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