MDBuilderTest.cpp 4.0 KB

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