diff options
Diffstat (limited to 'unittests/VMCore')
-rw-r--r-- | unittests/VMCore/ConstantsTest.cpp | 5 | ||||
-rw-r--r-- | unittests/VMCore/MetadataTest.cpp | 112 | ||||
-rw-r--r-- | unittests/VMCore/PassManagerTest.cpp | 36 |
3 files changed, 84 insertions, 69 deletions
diff --git a/unittests/VMCore/ConstantsTest.cpp b/unittests/VMCore/ConstantsTest.cpp index 519d928..8f28407 100644 --- a/unittests/VMCore/ConstantsTest.cpp +++ b/unittests/VMCore/ConstantsTest.cpp @@ -9,13 +9,14 @@ #include "llvm/Constants.h" #include "llvm/DerivedTypes.h" +#include "llvm/LLVMContext.h" #include "gtest/gtest.h" namespace llvm { namespace { TEST(ConstantsTest, Integer_i1) { - const IntegerType* Int1 = IntegerType::get(1); + const IntegerType* Int1 = IntegerType::get(getGlobalContext(), 1); Constant* One = ConstantInt::get(Int1, 1, true); Constant* Zero = ConstantInt::get(Int1, 0); Constant* NegOne = ConstantInt::get(Int1, static_cast<uint64_t>(-1), true); @@ -96,7 +97,7 @@ TEST(ConstantsTest, Integer_i1) { } TEST(ConstantsTest, IntSigns) { - const IntegerType* Int8Ty = Type::Int8Ty; + const IntegerType* Int8Ty = Type::getInt8Ty(getGlobalContext()); EXPECT_EQ(100, ConstantInt::get(Int8Ty, 100, false)->getSExtValue()); EXPECT_EQ(100, ConstantInt::get(Int8Ty, 100, true)->getSExtValue()); EXPECT_EQ(100, ConstantInt::getSigned(Int8Ty, 100)->getSExtValue()); diff --git a/unittests/VMCore/MetadataTest.cpp b/unittests/VMCore/MetadataTest.cpp index 2de3a92..b92b068 100644 --- a/unittests/VMCore/MetadataTest.cpp +++ b/unittests/VMCore/MetadataTest.cpp @@ -10,22 +10,24 @@ #include "gtest/gtest.h" #include "llvm/Constants.h" #include "llvm/Instructions.h" -#include "llvm/MDNode.h" +#include "llvm/Metadata.h" +#include "llvm/Module.h" #include "llvm/Type.h" +#include "llvm/Support/raw_ostream.h" #include "llvm/Support/ValueHandle.h" -#include <sstream> - using namespace llvm; namespace { +LLVMContext &Context = getGlobalContext(); + // Test that construction of MDString with different value produces different // MDString objects, even with the same string pointer and nulls in the string. TEST(MDStringTest, CreateDifferent) { char x[3] = { 'f', 0, 'A' }; - MDString *s1 = MDString::get(&x[0], &x[3]); + MDString *s1 = MDString::get(Context, StringRef(&x[0], 3)); x[2] = 'B'; - MDString *s2 = MDString::get(&x[0], &x[3]); + MDString *s2 = MDString::get(Context, StringRef(&x[0], 3)); EXPECT_NE(s1, s2); } @@ -35,8 +37,8 @@ TEST(MDStringTest, CreateSame) { char x[4] = { 'a', 'b', 'c', 'X' }; char y[4] = { 'a', 'b', 'c', 'Y' }; - MDString *s1 = MDString::get(&x[0], &x[3]); - MDString *s2 = MDString::get(&y[0], &y[3]); + MDString *s1 = MDString::get(Context, StringRef(&x[0], 3)); + MDString *s2 = MDString::get(Context, StringRef(&y[0], 3)); EXPECT_EQ(s1, s2); } @@ -44,11 +46,12 @@ TEST(MDStringTest, CreateSame) { TEST(MDStringTest, PrintingSimple) { char *str = new char[13]; strncpy(str, "testing 1 2 3", 13); - MDString *s = MDString::get(str, str+13); + MDString *s = MDString::get(Context, StringRef(str, 13)); strncpy(str, "aaaaaaaaaaaaa", 13); delete[] str; - std::ostringstream oss; + std::string Str; + raw_string_ostream oss(Str); s->print(oss); EXPECT_STREQ("metadata !\"testing 1 2 3\"", oss.str().c_str()); } @@ -56,8 +59,9 @@ TEST(MDStringTest, PrintingSimple) { // Test printing of MDString with non-printable characters. TEST(MDStringTest, PrintingComplex) { char str[5] = {0, '\n', '"', '\\', -1}; - MDString *s = MDString::get(str+0, str+5); - std::ostringstream oss; + MDString *s = MDString::get(Context, StringRef(str+0, 5)); + std::string Str; + raw_string_ostream oss(Str); s->print(oss); EXPECT_STREQ("metadata !\"\\00\\0A\\22\\5C\\FF\"", oss.str().c_str()); } @@ -67,21 +71,25 @@ TEST(MDNodeTest, Simple) { char x[3] = { 'a', 'b', 'c' }; char y[3] = { '1', '2', '3' }; - MDString *s1 = MDString::get(&x[0], &x[3]); - MDString *s2 = MDString::get(&y[0], &y[3]); - ConstantInt *CI = ConstantInt::get(APInt(8, 0)); + MDString *s1 = MDString::get(Context, StringRef(&x[0], 3)); + MDString *s2 = MDString::get(Context, StringRef(&y[0], 3)); + ConstantInt *CI = ConstantInt::get(getGlobalContext(), APInt(8, 0)); std::vector<Value *> V; V.push_back(s1); V.push_back(CI); V.push_back(s2); - MDNode *n1 = MDNode::get(&V[0], 3); + MDNode *n1 = MDNode::get(Context, &V[0], 3); Value *const c1 = n1; - MDNode *n2 = MDNode::get(&c1, 1); - MDNode *n3 = MDNode::get(&V[0], 3); + MDNode *n2 = MDNode::get(Context, &c1, 1); + MDNode *n3 = MDNode::get(Context, &V[0], 3); EXPECT_NE(n1, n2); +#ifdef ENABLE_MDNODE_UNIQUING EXPECT_EQ(n1, n3); +#else + (void) n3; +#endif EXPECT_EQ(3u, n1->getNumElements()); EXPECT_EQ(s1, n1->getElement(0)); @@ -91,49 +99,55 @@ TEST(MDNodeTest, Simple) { EXPECT_EQ(1u, n2->getNumElements()); EXPECT_EQ(n1, n2->getElement(0)); - std::ostringstream oss1, oss2; - n1->print(oss1); - n2->print(oss2); - EXPECT_STREQ("metadata !{metadata !\"abc\", i8 0, metadata !\"123\"}", - oss1.str().c_str()); - EXPECT_STREQ("metadata !{metadata !{metadata !\"abc\", i8 0, " - "metadata !\"123\"}}", - oss2.str().c_str()); -} - -TEST(MDNodeTest, RAUW) { - Constant *C = ConstantInt::get(Type::Int32Ty, 1); - Instruction *I = new BitCastInst(C, Type::Int32Ty); - - Value *const V1 = I; - MDNode *n1 = MDNode::get(&V1, 1); - WeakVH wn1 = n1; - - Value *const V2 = C; - MDNode *n2 = MDNode::get(&V2, 1); - WeakVH wn2 = n2; - - EXPECT_NE(wn1, wn2); - - I->replaceAllUsesWith(C); - - EXPECT_EQ(wn1, wn2); + std::string Str; + raw_string_ostream oss(Str); + n1->print(oss); + EXPECT_STREQ("!0 = metadata !{metadata !\"abc\", i8 0, metadata !\"123\"}\n", + oss.str().c_str()); + Str.clear(); + n2->print(oss); + EXPECT_STREQ("!0 = metadata !{metadata !1}\n" + "!1 = metadata !{metadata !\"abc\", i8 0, metadata !\"123\"}\n", + oss.str().c_str()); } TEST(MDNodeTest, Delete) { - Constant *C = ConstantInt::get(Type::Int32Ty, 1); - Instruction *I = new BitCastInst(C, Type::Int32Ty); + Constant *C = ConstantInt::get(Type::getInt32Ty(getGlobalContext()), 1); + Instruction *I = new BitCastInst(C, Type::getInt32Ty(getGlobalContext())); Value *const V = I; - MDNode *n = MDNode::get(&V, 1); + MDNode *n = MDNode::get(Context, &V, 1); WeakVH wvh = n; EXPECT_EQ(n, wvh); delete I; - std::ostringstream oss; + std::string Str; + raw_string_ostream oss(Str); wvh->print(oss); - EXPECT_STREQ("metadata !{null}", oss.str().c_str()); + EXPECT_STREQ("!0 = metadata !{null}\n", oss.str().c_str()); +} + +TEST(NamedMDNodeTest, Search) { + Constant *C = ConstantInt::get(Type::getInt32Ty(getGlobalContext()), 1); + Constant *C2 = ConstantInt::get(Type::getInt32Ty(getGlobalContext()), 2); + + Value *const V = C; + Value *const V2 = C2; + MDNode *n = MDNode::get(Context, &V, 1); + MDNode *n2 = MDNode::get(Context, &V2, 1); + + MetadataBase *Nodes[2] = { n, n2 }; + + Module *M = new Module("MyModule", getGlobalContext()); + const char *Name = "llvm.NMD1"; + NamedMDNode *NMD = NamedMDNode::Create(getGlobalContext(), Name, &Nodes[0], 2, M); + std::string Str; + raw_string_ostream oss(Str); + NMD->print(oss); + EXPECT_STREQ("!llvm.NMD1 = !{!0, !1}\n!0 = metadata !{i32 1}\n" + "!1 = metadata !{i32 2}\n", + oss.str().c_str()); } } diff --git a/unittests/VMCore/PassManagerTest.cpp b/unittests/VMCore/PassManagerTest.cpp index 8122e2c..cb8f9eb 100644 --- a/unittests/VMCore/PassManagerTest.cpp +++ b/unittests/VMCore/PassManagerTest.cpp @@ -154,7 +154,7 @@ namespace llvm { struct CGPass : public PassTest<CallGraph, CallGraphSCCPass> { public: - virtual bool runOnSCC(const std::vector<CallGraphNode*> &SCMM) { + virtual bool runOnSCC(std::vector<CallGraphNode*> &SCMM) { EXPECT_TRUE(getAnalysisIfAvailable<TargetData>()); run(); return false; @@ -272,7 +272,7 @@ namespace llvm { char OnTheFlyTest::ID=0; TEST(PassManager, RunOnce) { - Module M("test-once", *new LLVMContext()); + Module M("test-once", getGlobalContext()); struct ModuleNDNM *mNDNM = new ModuleNDNM(); struct ModuleDNM *mDNM = new ModuleDNM(); struct ModuleNDM *mNDM = new ModuleNDM(); @@ -296,7 +296,7 @@ namespace llvm { } TEST(PassManager, ReRun) { - Module M("test-rerun", *new LLVMContext()); + Module M("test-rerun", getGlobalContext()); struct ModuleNDNM *mNDNM = new ModuleNDNM(); struct ModuleDNM *mDNM = new ModuleDNM(); struct ModuleNDM *mNDM = new ModuleNDM(); @@ -387,7 +387,7 @@ namespace llvm { Module* makeLLVMModule() { // Module Construction - Module* mod = new Module("test-mem", *new LLVMContext()); + Module* mod = new Module("test-mem", getGlobalContext()); mod->setDataLayout("e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-" "i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-" "a0:0:64-s0:64:64-f80:128:128"); @@ -396,14 +396,14 @@ namespace llvm { // Type Definitions std::vector<const Type*>FuncTy_0_args; FunctionType* FuncTy_0 = FunctionType::get( - /*Result=*/IntegerType::get(32), + /*Result=*/IntegerType::get(getGlobalContext(), 32), /*Params=*/FuncTy_0_args, /*isVarArg=*/false); std::vector<const Type*>FuncTy_2_args; - FuncTy_2_args.push_back(IntegerType::get(1)); + FuncTy_2_args.push_back(IntegerType::get(getGlobalContext(), 1)); FunctionType* FuncTy_2 = FunctionType::get( - /*Result=*/Type::VoidTy, + /*Result=*/Type::getVoidTy(getGlobalContext()), /*Params=*/FuncTy_2_args, /*isVarArg=*/false); @@ -454,7 +454,7 @@ namespace llvm { // Function: test1 (func_test1) { - BasicBlock* label_entry = BasicBlock::Create("entry",func_test1,0); + BasicBlock* label_entry = BasicBlock::Create(getGlobalContext(), "entry",func_test1,0); // Block entry (label_entry) CallInst* int32_3 = CallInst::Create(func_test2, "", label_entry); @@ -462,14 +462,14 @@ namespace llvm { int32_3->setTailCall(false);AttrListPtr int32_3_PAL; int32_3->setAttributes(int32_3_PAL); - ReturnInst::Create(int32_3, label_entry); + ReturnInst::Create(getGlobalContext(), int32_3, label_entry); } // Function: test2 (func_test2) { - BasicBlock* label_entry_5 = BasicBlock::Create("entry",func_test2,0); + BasicBlock* label_entry_5 = BasicBlock::Create(getGlobalContext(), "entry",func_test2,0); // Block entry (label_entry_5) CallInst* int32_6 = CallInst::Create(func_test3, "", label_entry_5); @@ -477,14 +477,14 @@ namespace llvm { int32_6->setTailCall(false);AttrListPtr int32_6_PAL; int32_6->setAttributes(int32_6_PAL); - ReturnInst::Create(int32_6, label_entry_5); + ReturnInst::Create(getGlobalContext(), int32_6, label_entry_5); } // Function: test3 (func_test3) { - BasicBlock* label_entry_8 = BasicBlock::Create("entry",func_test3,0); + BasicBlock* label_entry_8 = BasicBlock::Create(getGlobalContext(), "entry",func_test3,0); // Block entry (label_entry_8) CallInst* int32_9 = CallInst::Create(func_test1, "", label_entry_8); @@ -492,7 +492,7 @@ namespace llvm { int32_9->setTailCall(false);AttrListPtr int32_9_PAL; int32_9->setAttributes(int32_9_PAL); - ReturnInst::Create(int32_9, label_entry_8); + ReturnInst::Create(getGlobalContext(), int32_9, label_entry_8); } @@ -502,10 +502,10 @@ namespace llvm { Value* int1_f = args++; int1_f->setName("f"); - BasicBlock* label_entry_11 = BasicBlock::Create("entry",func_test4,0); - BasicBlock* label_bb = BasicBlock::Create("bb",func_test4,0); - BasicBlock* label_bb1 = BasicBlock::Create("bb1",func_test4,0); - BasicBlock* label_return = BasicBlock::Create("return",func_test4,0); + BasicBlock* label_entry_11 = BasicBlock::Create(getGlobalContext(), "entry",func_test4,0); + BasicBlock* label_bb = BasicBlock::Create(getGlobalContext(), "bb",func_test4,0); + BasicBlock* label_bb1 = BasicBlock::Create(getGlobalContext(), "bb1",func_test4,0); + BasicBlock* label_return = BasicBlock::Create(getGlobalContext(), "return",func_test4,0); // Block entry (label_entry_11) BranchInst::Create(label_bb, label_entry_11); @@ -517,7 +517,7 @@ namespace llvm { BranchInst::Create(label_bb1, label_return, int1_f, label_bb1); // Block return (label_return) - ReturnInst::Create(label_return); + ReturnInst::Create(getGlobalContext(), label_return); } return mod; |