MDBuilderTest.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. //===- llvm/unittests/Support/MDBuilderTest.cpp - MDBuilder unit 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 "llvm/IRBuilder.h"
  10. #include "llvm/Operator.h"
  11. #include "llvm/Support/MDBuilder.h"
  12. #include "gtest/gtest.h"
  13. using namespace llvm;
  14. namespace {
  15. class MDBuilderTest : public testing::Test {
  16. protected:
  17. LLVMContext Context;
  18. };
  19. TEST_F(MDBuilderTest, createString) {
  20. MDBuilder MDHelper(Context);
  21. MDString *Str0 = MDHelper.createString("");
  22. MDString *Str1 = MDHelper.createString("string");
  23. EXPECT_EQ(Str0->getString(), StringRef(""));
  24. EXPECT_EQ(Str1->getString(), StringRef("string"));
  25. }
  26. TEST_F(MDBuilderTest, createFPMath) {
  27. MDBuilder MDHelper(Context);
  28. MDNode *MD0 = MDHelper.createFPMath(0.0);
  29. MDNode *MD1 = MDHelper.createFPMath(1.0);
  30. EXPECT_EQ(MD0, (MDNode *)0);
  31. EXPECT_NE(MD1, (MDNode *)0);
  32. EXPECT_EQ(MD1->getNumOperands(), 1U);
  33. Value *Op = MD1->getOperand(0);
  34. EXPECT_TRUE(isa<ConstantFP>(Op));
  35. EXPECT_TRUE(Op->getType()->isFloatingPointTy());
  36. ConstantFP *Val = cast<ConstantFP>(Op);
  37. EXPECT_TRUE(Val->isExactlyValue(1.0));
  38. }
  39. TEST_F(MDBuilderTest, createRangeMetadata) {
  40. MDBuilder MDHelper(Context);
  41. APInt A(8, 1), B(8, 2);
  42. MDNode *R0 = MDHelper.createRange(A, A);
  43. MDNode *R1 = MDHelper.createRange(A, B);
  44. EXPECT_EQ(R0, (MDNode *)0);
  45. EXPECT_NE(R1, (MDNode *)0);
  46. EXPECT_EQ(R1->getNumOperands(), 2U);
  47. EXPECT_TRUE(isa<ConstantInt>(R1->getOperand(0)));
  48. EXPECT_TRUE(isa<ConstantInt>(R1->getOperand(1)));
  49. ConstantInt *C0 = cast<ConstantInt>(R1->getOperand(0));
  50. ConstantInt *C1 = cast<ConstantInt>(R1->getOperand(1));
  51. EXPECT_EQ(C0->getValue(), A);
  52. EXPECT_EQ(C1->getValue(), B);
  53. }
  54. TEST_F(MDBuilderTest, createAnonymousTBAARoot) {
  55. MDBuilder MDHelper(Context);
  56. MDNode *R0 = MDHelper.createAnonymousTBAARoot();
  57. MDNode *R1 = MDHelper.createAnonymousTBAARoot();
  58. EXPECT_NE(R0, R1);
  59. EXPECT_GE(R0->getNumOperands(), 1U);
  60. EXPECT_GE(R1->getNumOperands(), 1U);
  61. EXPECT_EQ(R0->getOperand(0), R0);
  62. EXPECT_EQ(R1->getOperand(0), R1);
  63. EXPECT_TRUE(R0->getNumOperands() == 1 || R0->getOperand(1) == 0);
  64. EXPECT_TRUE(R1->getNumOperands() == 1 || R1->getOperand(1) == 0);
  65. }
  66. TEST_F(MDBuilderTest, createTBAARoot) {
  67. MDBuilder MDHelper(Context);
  68. MDNode *R0 = MDHelper.createTBAARoot("Root");
  69. MDNode *R1 = MDHelper.createTBAARoot("Root");
  70. EXPECT_EQ(R0, R1);
  71. EXPECT_GE(R0->getNumOperands(), 1U);
  72. EXPECT_TRUE(isa<MDString>(R0->getOperand(0)));
  73. EXPECT_EQ(cast<MDString>(R0->getOperand(0))->getString(), "Root");
  74. EXPECT_TRUE(R0->getNumOperands() == 1 || R0->getOperand(1) == 0);
  75. }
  76. TEST_F(MDBuilderTest, createTBAANode) {
  77. MDBuilder MDHelper(Context);
  78. MDNode *R = MDHelper.createTBAARoot("Root");
  79. MDNode *N0 = MDHelper.createTBAANode("Node", R);
  80. MDNode *N1 = MDHelper.createTBAANode("edoN", R);
  81. MDNode *N2 = MDHelper.createTBAANode("Node", R, true);
  82. MDNode *N3 = MDHelper.createTBAANode("Node", R);
  83. EXPECT_EQ(N0, N3);
  84. EXPECT_NE(N0, N1);
  85. EXPECT_NE(N0, N2);
  86. EXPECT_GE(N0->getNumOperands(), 2U);
  87. EXPECT_GE(N1->getNumOperands(), 2U);
  88. EXPECT_GE(N2->getNumOperands(), 3U);
  89. EXPECT_TRUE(isa<MDString>(N0->getOperand(0)));
  90. EXPECT_TRUE(isa<MDString>(N1->getOperand(0)));
  91. EXPECT_TRUE(isa<MDString>(N2->getOperand(0)));
  92. EXPECT_EQ(cast<MDString>(N0->getOperand(0))->getString(), "Node");
  93. EXPECT_EQ(cast<MDString>(N1->getOperand(0))->getString(), "edoN");
  94. EXPECT_EQ(cast<MDString>(N2->getOperand(0))->getString(), "Node");
  95. EXPECT_EQ(N0->getOperand(1), R);
  96. EXPECT_EQ(N1->getOperand(1), R);
  97. EXPECT_EQ(N2->getOperand(1), R);
  98. EXPECT_TRUE(isa<ConstantInt>(N2->getOperand(2)));
  99. EXPECT_EQ(cast<ConstantInt>(N2->getOperand(2))->getZExtValue(), 1U);
  100. }
  101. }