|
@@ -0,0 +1,97 @@
|
|
|
+//===- unittests/SPIRV/SpirvBasicBlockTest.cpp ----- Basic Block Tests ----===//
|
|
|
+//
|
|
|
+// The LLVM Compiler Infrastructure
|
|
|
+//
|
|
|
+// This file is distributed under the University of Illinois Open Source
|
|
|
+// License. See LICENSE.TXT for details.
|
|
|
+//
|
|
|
+//===----------------------------------------------------------------------===//
|
|
|
+
|
|
|
+#include "clang/SPIRV/SpirvBasicBlock.h"
|
|
|
+#include "clang/SPIRV/SpirvInstruction.h"
|
|
|
+#include "gmock/gmock.h"
|
|
|
+#include "gtest/gtest.h"
|
|
|
+
|
|
|
+using namespace clang::spirv;
|
|
|
+
|
|
|
+namespace {
|
|
|
+
|
|
|
+TEST(SpirvBasicBlockTest, CheckName) {
|
|
|
+ SpirvBasicBlock bb(0, "myBasicBlock");
|
|
|
+ EXPECT_EQ(bb.getName(), "myBasicBlock");
|
|
|
+}
|
|
|
+
|
|
|
+TEST(SpirvBasicBlockTest, CheckResultId) {
|
|
|
+ SpirvBasicBlock bb(0, "myBasicBlock");
|
|
|
+ bb.setResultId(5);
|
|
|
+ EXPECT_EQ(bb.getResultId(), 5);
|
|
|
+}
|
|
|
+
|
|
|
+TEST(SpirvBasicBlockTest, CheckMergeTarget) {
|
|
|
+ SpirvBasicBlock bb1(0, "bb1");
|
|
|
+ SpirvBasicBlock bb2(0, "bb2");
|
|
|
+ bb1.setMergeTarget(&bb2);
|
|
|
+ EXPECT_EQ(bb1.getMergeTarget(), &bb2);
|
|
|
+}
|
|
|
+
|
|
|
+TEST(SpirvBasicBlockTest, CheckContinueTarget) {
|
|
|
+ SpirvBasicBlock bb1(0, "bb1");
|
|
|
+ SpirvBasicBlock bb2(0, "bb2");
|
|
|
+ bb1.setContinueTarget(&bb2);
|
|
|
+ EXPECT_EQ(bb1.getContinueTarget(), &bb2);
|
|
|
+}
|
|
|
+
|
|
|
+TEST(SpirvBasicBlockTest, CheckSuccessors) {
|
|
|
+ SpirvBasicBlock bb1(0, "bb1");
|
|
|
+ SpirvBasicBlock bb2(0, "bb2");
|
|
|
+ SpirvBasicBlock bb3(0, "bb3");
|
|
|
+ bb1.addSuccessor(&bb2);
|
|
|
+ bb1.addSuccessor(&bb3);
|
|
|
+ auto successors = bb1.getSuccessors();
|
|
|
+ EXPECT_EQ(successors[0], &bb2);
|
|
|
+ EXPECT_EQ(successors[1], &bb3);
|
|
|
+}
|
|
|
+
|
|
|
+TEST(SpirvBasicBlockTest, CheckTerminatedByKill) {
|
|
|
+ SpirvBasicBlock bb(0, "bb");
|
|
|
+ SpirvKill kill({});
|
|
|
+ bb.addInstruction(&kill);
|
|
|
+ EXPECT_TRUE(bb.hasTerminator());
|
|
|
+}
|
|
|
+
|
|
|
+TEST(SpirvBasicBlockTest, CheckTerminatedByBranch) {
|
|
|
+ SpirvBasicBlock bb(0, "bb");
|
|
|
+ SpirvBranch branch({}, nullptr);
|
|
|
+ bb.addInstruction(&branch);
|
|
|
+ EXPECT_TRUE(bb.hasTerminator());
|
|
|
+}
|
|
|
+
|
|
|
+TEST(SpirvBasicBlockTest, CheckTerminatedByBranchConditional) {
|
|
|
+ SpirvBasicBlock bb(0, "bb");
|
|
|
+ SpirvBranchConditional branch({}, nullptr, nullptr, nullptr);
|
|
|
+ bb.addInstruction(&branch);
|
|
|
+ EXPECT_TRUE(bb.hasTerminator());
|
|
|
+}
|
|
|
+
|
|
|
+TEST(SpirvBasicBlockTest, CheckTerminatedByReturn) {
|
|
|
+ SpirvBasicBlock bb(0, "bb");
|
|
|
+ SpirvReturn returnInstr({});
|
|
|
+ bb.addInstruction(&returnInstr);
|
|
|
+ EXPECT_TRUE(bb.hasTerminator());
|
|
|
+}
|
|
|
+
|
|
|
+TEST(SpirvBasicBlockTest, CheckTerminatedByUnreachable) {
|
|
|
+ SpirvBasicBlock bb(0, "bb");
|
|
|
+ SpirvUnreachable unreachable({});
|
|
|
+ bb.addInstruction(&unreachable);
|
|
|
+ EXPECT_TRUE(bb.hasTerminator());
|
|
|
+}
|
|
|
+
|
|
|
+TEST(SpirvBasicBlockTest, CheckNotTerminated) {
|
|
|
+ SpirvBasicBlock bb(0, "bb");
|
|
|
+ SpirvLoad load({}, 0, {}, nullptr);
|
|
|
+ bb.addInstruction(&load);
|
|
|
+ EXPECT_FALSE(bb.hasTerminator());
|
|
|
+}
|
|
|
+
|
|
|
+} // anonymous namespace
|