[spirv] The creator of a BB shouldn't know its result-id.
This commit is contained in:
Родитель
ea966012f9
Коммит
a49715de95
|
@ -24,7 +24,7 @@ class SpirvVisitor;
|
|||
/// The class representing a SPIR-V basic block in memory.
|
||||
class SpirvBasicBlock {
|
||||
public:
|
||||
SpirvBasicBlock(uint32_t id, llvm::StringRef name);
|
||||
SpirvBasicBlock(llvm::StringRef name);
|
||||
~SpirvBasicBlock() = default;
|
||||
|
||||
// Forbid copy construction and assignment
|
||||
|
|
|
@ -13,8 +13,8 @@
|
|||
namespace clang {
|
||||
namespace spirv {
|
||||
|
||||
SpirvBasicBlock::SpirvBasicBlock(uint32_t id, llvm::StringRef name)
|
||||
: labelId(id), labelName(name), mergeTarget(nullptr),
|
||||
SpirvBasicBlock::SpirvBasicBlock(llvm::StringRef name)
|
||||
: labelId(0), labelName(name), mergeTarget(nullptr),
|
||||
continueTarget(nullptr) {}
|
||||
|
||||
bool SpirvBasicBlock::hasTerminator() const {
|
||||
|
|
|
@ -85,7 +85,7 @@ void SpirvBuilder::endFunction() {
|
|||
|
||||
SpirvBasicBlock *SpirvBuilder::createBasicBlock(llvm::StringRef name) {
|
||||
assert(function && "found detached basic block");
|
||||
auto *bb = new (context) SpirvBasicBlock(/*id*/ 0, name);
|
||||
auto *bb = new (context) SpirvBasicBlock(name);
|
||||
basicBlocks.push_back(bb);
|
||||
return bb;
|
||||
}
|
||||
|
|
|
@ -17,34 +17,34 @@ using namespace clang::spirv;
|
|||
namespace {
|
||||
|
||||
TEST(SpirvBasicBlockTest, CheckName) {
|
||||
SpirvBasicBlock bb(0, "myBasicBlock");
|
||||
SpirvBasicBlock bb("myBasicBlock");
|
||||
EXPECT_EQ(bb.getName(), "myBasicBlock");
|
||||
}
|
||||
|
||||
TEST(SpirvBasicBlockTest, CheckResultId) {
|
||||
SpirvBasicBlock bb(0, "myBasicBlock");
|
||||
SpirvBasicBlock bb("myBasicBlock");
|
||||
bb.setResultId(5);
|
||||
EXPECT_EQ(bb.getResultId(), 5);
|
||||
}
|
||||
|
||||
TEST(SpirvBasicBlockTest, CheckMergeTarget) {
|
||||
SpirvBasicBlock bb1(0, "bb1");
|
||||
SpirvBasicBlock bb2(0, "bb2");
|
||||
SpirvBasicBlock bb1("bb1");
|
||||
SpirvBasicBlock bb2("bb2");
|
||||
bb1.setMergeTarget(&bb2);
|
||||
EXPECT_EQ(bb1.getMergeTarget(), &bb2);
|
||||
}
|
||||
|
||||
TEST(SpirvBasicBlockTest, CheckContinueTarget) {
|
||||
SpirvBasicBlock bb1(0, "bb1");
|
||||
SpirvBasicBlock bb2(0, "bb2");
|
||||
SpirvBasicBlock bb1("bb1");
|
||||
SpirvBasicBlock bb2("bb2");
|
||||
bb1.setContinueTarget(&bb2);
|
||||
EXPECT_EQ(bb1.getContinueTarget(), &bb2);
|
||||
}
|
||||
|
||||
TEST(SpirvBasicBlockTest, CheckSuccessors) {
|
||||
SpirvBasicBlock bb1(0, "bb1");
|
||||
SpirvBasicBlock bb2(0, "bb2");
|
||||
SpirvBasicBlock bb3(0, "bb3");
|
||||
SpirvBasicBlock bb1("bb1");
|
||||
SpirvBasicBlock bb2("bb2");
|
||||
SpirvBasicBlock bb3("bb3");
|
||||
bb1.addSuccessor(&bb2);
|
||||
bb1.addSuccessor(&bb3);
|
||||
auto successors = bb1.getSuccessors();
|
||||
|
@ -53,42 +53,42 @@ TEST(SpirvBasicBlockTest, CheckSuccessors) {
|
|||
}
|
||||
|
||||
TEST(SpirvBasicBlockTest, CheckTerminatedByKill) {
|
||||
SpirvBasicBlock bb(0, "bb");
|
||||
SpirvBasicBlock bb("bb");
|
||||
SpirvKill kill({});
|
||||
bb.addInstruction(&kill);
|
||||
EXPECT_TRUE(bb.hasTerminator());
|
||||
}
|
||||
|
||||
TEST(SpirvBasicBlockTest, CheckTerminatedByBranch) {
|
||||
SpirvBasicBlock bb(0, "bb");
|
||||
SpirvBasicBlock bb("bb");
|
||||
SpirvBranch branch({}, nullptr);
|
||||
bb.addInstruction(&branch);
|
||||
EXPECT_TRUE(bb.hasTerminator());
|
||||
}
|
||||
|
||||
TEST(SpirvBasicBlockTest, CheckTerminatedByBranchConditional) {
|
||||
SpirvBasicBlock bb(0, "bb");
|
||||
SpirvBasicBlock bb("bb");
|
||||
SpirvBranchConditional branch({}, nullptr, nullptr, nullptr);
|
||||
bb.addInstruction(&branch);
|
||||
EXPECT_TRUE(bb.hasTerminator());
|
||||
}
|
||||
|
||||
TEST(SpirvBasicBlockTest, CheckTerminatedByReturn) {
|
||||
SpirvBasicBlock bb(0, "bb");
|
||||
SpirvBasicBlock bb("bb");
|
||||
SpirvReturn returnInstr({});
|
||||
bb.addInstruction(&returnInstr);
|
||||
EXPECT_TRUE(bb.hasTerminator());
|
||||
}
|
||||
|
||||
TEST(SpirvBasicBlockTest, CheckTerminatedByUnreachable) {
|
||||
SpirvBasicBlock bb(0, "bb");
|
||||
SpirvBasicBlock bb("bb");
|
||||
SpirvUnreachable unreachable({});
|
||||
bb.addInstruction(&unreachable);
|
||||
EXPECT_TRUE(bb.hasTerminator());
|
||||
}
|
||||
|
||||
TEST(SpirvBasicBlockTest, CheckNotTerminated) {
|
||||
SpirvBasicBlock bb(0, "bb");
|
||||
SpirvBasicBlock bb("bb");
|
||||
SpirvLoad load({}, 0, {}, nullptr);
|
||||
bb.addInstruction(&load);
|
||||
EXPECT_FALSE(bb.hasTerminator());
|
||||
|
|
Загрузка…
Ссылка в новой задаче