diff options
author | Hans Wennborg <hans@hanshq.net> | 2016-06-23 16:13:23 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2016-06-23 16:13:23 +0000 |
commit | 99faa52b7ba56045a6282e50a4cd7fdd3fe7c21e (patch) | |
tree | 7ea2242f7ae5d2ca0c4995de40d7a69093da42af /unittests/Linker | |
parent | 1fa3fc6d8962b67b410f429eda354c067e19c2b8 (diff) |
Revert r273568 "Remangle intrinsics names when types are renamed"
It broke 2008-07-15-Bswap.ll and 2009-09-01-PostRAProlog.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273574 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'unittests/Linker')
-rw-r--r-- | unittests/Linker/LinkModulesTest.cpp | 54 |
1 files changed, 0 insertions, 54 deletions
diff --git a/unittests/Linker/LinkModulesTest.cpp b/unittests/Linker/LinkModulesTest.cpp index 92c483278be9..10a89f39869a 100644 --- a/unittests/Linker/LinkModulesTest.cpp +++ b/unittests/Linker/LinkModulesTest.cpp @@ -306,58 +306,4 @@ TEST_F(LinkModuleTest, MoveDistinctMDs) { EXPECT_EQ(M3, M4->getOperand(0)); } -TEST_F(LinkModuleTest, RemangleIntrinsics) { - LLVMContext C; - SMDiagnostic Err; - - // We load two modules inside the same context C. In both modules there is a - // "struct.rtx_def" type. In the module loaded the second (Bar) this type will - // be renamed to "struct.rtx_def.0". Check that the intrinsics which have this - // type in the signature are properly remangled. - const char *FooStr = - "%struct.rtx_def = type { i16 }\n" - "define void @foo(%struct.rtx_def* %a, i8 %b, i32 %c) {\n" - " call void @llvm.memset.p0struct.rtx_def.i32(%struct.rtx_def* %a, i8 %b, i32 %c, i32 4, i1 true)\n" - " ret void\n" - "}\n" - "declare void @llvm.memset.p0struct.rtx_def.i32(%struct.rtx_def*, i8, i32, i32, i1)\n"; - - const char *BarStr = - "%struct.rtx_def = type { i16 }\n" - "define void @bar(%struct.rtx_def* %a, i8 %b, i32 %c) {\n" - " call void @llvm.memset.p0struct.rtx_def.i32(%struct.rtx_def* %a, i8 %b, i32 %c, i32 4, i1 true)\n" - " ret void\n" - "}\n" - "declare void @llvm.memset.p0struct.rtx_def.i32(%struct.rtx_def*, i8, i32, i32, i1)\n"; - - std::unique_ptr<Module> Foo = parseAssemblyString(FooStr, Err, C); - assert(Foo); - ASSERT_TRUE(Foo.get()); - // Foo is loaded first, so the type and the intrinsic have theis original - // names. - ASSERT_TRUE(Foo->getFunction("llvm.memset.p0struct.rtx_def.i32")); - ASSERT_FALSE(Foo->getFunction("llvm.memset.p0struct.rtx_def.0.i32")); - - std::unique_ptr<Module> Bar = parseAssemblyString(BarStr, Err, C); - assert(Bar); - ASSERT_TRUE(Bar.get()); - // Bar is loaded after Foo, so the type is renamed to struct.rtx_def.0. Check - // that the intrinsic is also renamed. - ASSERT_FALSE(Bar->getFunction("llvm.memset.p0struct.rtx_def.i32")); - ASSERT_TRUE(Bar->getFunction("llvm.memset.p0struct.rtx_def.0.i32")); - - // Link two modules together. - auto Dst = llvm::make_unique<Module>("Linked", C); - ASSERT_TRUE(Dst.get()); - Ctx.setDiagnosticHandler(expectNoDiags); - bool Failed = Linker::linkModules(*Foo, std::move(Bar)); - ASSERT_FALSE(Failed); - - // "struct.rtx_def" from Foo and "struct.rtx_def.0" from Bar are isomorphic - // types, so they must be uniquified by linker. Check that they use the same - // intrinsic definition. - Function *F = Foo->getFunction("llvm.memset.p0struct.rtx_def.i32"); - ASSERT_EQ(F->getNumUses(), (unsigned)2); -} - } // end anonymous namespace |