[spirv] The creator of a BB shouldn't know its result-id.

This commit is contained in:
Ehsan Nasiri 2018-12-17 12:14:03 -05:00 коммит произвёл Ehsan
Родитель ea966012f9
Коммит a49715de95
4 изменённых файлов: 19 добавлений и 19 удалений

Просмотреть файл

@ -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());