[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.
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());