summaryrefslogtreecommitdiffstats
path: root/unittests/Linker
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2016-06-23 16:13:23 +0000
committerHans Wennborg <hans@hanshq.net>2016-06-23 16:13:23 +0000
commit99faa52b7ba56045a6282e50a4cd7fdd3fe7c21e (patch)
tree7ea2242f7ae5d2ca0c4995de40d7a69093da42af /unittests/Linker
parent1fa3fc6d8962b67b410f429eda354c067e19c2b8 (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.cpp54
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