SpirvBasicBlockTest.cpp 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. //===- unittests/SPIRV/SpirvBasicBlockTest.cpp ----- Basic Block Tests ----===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #include "clang/SPIRV/SpirvBasicBlock.h"
  10. #include "clang/SPIRV/SpirvInstruction.h"
  11. #include "gmock/gmock.h"
  12. #include "gtest/gtest.h"
  13. using namespace clang::spirv;
  14. namespace {
  15. TEST(SpirvBasicBlockTest, CheckName) {
  16. SpirvBasicBlock bb("myBasicBlock");
  17. EXPECT_EQ(bb.getName(), "myBasicBlock");
  18. }
  19. TEST(SpirvBasicBlockTest, CheckResultId) {
  20. SpirvBasicBlock bb("myBasicBlock");
  21. bb.setResultId(5);
  22. EXPECT_EQ(bb.getResultId(), 5u);
  23. }
  24. TEST(SpirvBasicBlockTest, CheckMergeTarget) {
  25. SpirvBasicBlock bb1("bb1");
  26. SpirvBasicBlock bb2("bb2");
  27. bb1.setMergeTarget(&bb2);
  28. EXPECT_EQ(bb1.getMergeTarget(), &bb2);
  29. }
  30. TEST(SpirvBasicBlockTest, CheckContinueTarget) {
  31. SpirvBasicBlock bb1("bb1");
  32. SpirvBasicBlock bb2("bb2");
  33. bb1.setContinueTarget(&bb2);
  34. EXPECT_EQ(bb1.getContinueTarget(), &bb2);
  35. }
  36. TEST(SpirvBasicBlockTest, CheckSuccessors) {
  37. SpirvBasicBlock bb1("bb1");
  38. SpirvBasicBlock bb2("bb2");
  39. SpirvBasicBlock bb3("bb3");
  40. bb1.addSuccessor(&bb2);
  41. bb1.addSuccessor(&bb3);
  42. auto successors = bb1.getSuccessors();
  43. EXPECT_EQ(successors[0], &bb2);
  44. EXPECT_EQ(successors[1], &bb3);
  45. }
  46. TEST(SpirvBasicBlockTest, CheckTerminatedByKill) {
  47. SpirvBasicBlock bb("bb");
  48. SpirvKill kill({});
  49. bb.addInstruction(&kill);
  50. EXPECT_TRUE(bb.hasTerminator());
  51. }
  52. TEST(SpirvBasicBlockTest, CheckTerminatedByBranch) {
  53. SpirvBasicBlock bb("bb");
  54. SpirvBranch branch({}, nullptr);
  55. bb.addInstruction(&branch);
  56. EXPECT_TRUE(bb.hasTerminator());
  57. }
  58. TEST(SpirvBasicBlockTest, CheckTerminatedByBranchConditional) {
  59. SpirvBasicBlock bb("bb");
  60. SpirvBranchConditional branch({}, nullptr, nullptr, nullptr);
  61. bb.addInstruction(&branch);
  62. EXPECT_TRUE(bb.hasTerminator());
  63. }
  64. TEST(SpirvBasicBlockTest, CheckTerminatedByReturn) {
  65. SpirvBasicBlock bb("bb");
  66. SpirvReturn returnInstr({});
  67. bb.addInstruction(&returnInstr);
  68. EXPECT_TRUE(bb.hasTerminator());
  69. }
  70. TEST(SpirvBasicBlockTest, CheckTerminatedByUnreachable) {
  71. SpirvBasicBlock bb("bb");
  72. SpirvUnreachable unreachable({});
  73. bb.addInstruction(&unreachable);
  74. EXPECT_TRUE(bb.hasTerminator());
  75. }
  76. TEST(SpirvBasicBlockTest, CheckNotTerminated) {
  77. SpirvBasicBlock bb("bb");
  78. SpirvLoad load({}, {}, nullptr);
  79. bb.addInstruction(&load);
  80. EXPECT_FALSE(bb.hasTerminator());
  81. }
  82. } // anonymous namespace