aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Hines <srhines@google.com>2018-09-04 14:43:47 -0700
committerChih-Hung Hsieh <chh@google.com>2018-11-15 11:18:18 -0800
commit05ec7c765159d4ee2471aef366d56a4a5160b5b4 (patch)
tree7af2520d9a9c4650a495340e4ed1ffe4db66ab39
parent6d08abd8ca4485a9a2fa070c6b5bfa7fec2e5a86 (diff)
downloadllvm-05ec7c765159d4ee2471aef366d56a4a5160b5b4.tar.gz
Revert "IRMover: Account for matching types present across modules"
This reverts commit 444617b4b373eef10ffddcecbeb018b5cb84b66f. Bug: 113573336 Change-Id: Idb7e51cefa7c969b47887d139f6e9bdd65655208
-rw-r--r--lib/Linker/IRMover.cpp19
-rw-r--r--test/LTO/X86/Inputs/type-mapping-bug2.ll16
-rw-r--r--test/LTO/X86/type-mapping-bug2.ll42
3 files changed, 5 insertions, 72 deletions
diff --git a/lib/Linker/IRMover.cpp b/lib/Linker/IRMover.cpp
index b304bfc401a..636fb814da8 100644
--- a/lib/Linker/IRMover.cpp
+++ b/lib/Linker/IRMover.cpp
@@ -240,27 +240,18 @@ Type *TypeMapTy::get(Type *Ty, SmallPtrSet<StructType *, 8> &Visited) {
// These are types that LLVM itself will unique.
bool IsUniqued = !isa<StructType>(Ty) || cast<StructType>(Ty)->isLiteral();
- if (!IsUniqued) {
- StructType *STy = cast<StructType>(Ty);
- // This is actually a type from the destination module, this can be reached
- // when this type is loaded in another module, added to DstStructTypesSet,
- // and then we reach the same type in another module where it has not been
- // added to MappedTypes. (PR37684)
- if (STy->getContext().isODRUniquingDebugTypes() && !STy->isOpaque() &&
- DstStructTypesSet.hasType(STy))
- return *Entry = STy;
-
#ifndef NDEBUG
+ if (!IsUniqued) {
for (auto &Pair : MappedTypes) {
assert(!(Pair.first != Ty && Pair.second == Ty) &&
"mapping to a source type");
}
+ }
#endif
- if (!Visited.insert(STy).second) {
- StructType *DTy = StructType::create(Ty->getContext());
- return *Entry = DTy;
- }
+ if (!IsUniqued && !Visited.insert(cast<StructType>(Ty)).second) {
+ StructType *DTy = StructType::create(Ty->getContext());
+ return *Entry = DTy;
}
// If this is not a recursive type, then just map all of the elements and
diff --git a/test/LTO/X86/Inputs/type-mapping-bug2.ll b/test/LTO/X86/Inputs/type-mapping-bug2.ll
deleted file mode 100644
index b58a1e953fb..00000000000
--- a/test/LTO/X86/Inputs/type-mapping-bug2.ll
+++ /dev/null
@@ -1,16 +0,0 @@
-target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
-target triple = "x86_64-unknown-linux-gnu"
-
-define i32 @c() !dbg !6 {
- unreachable
-}
-
-!llvm.module.flags = !{!0, !1}
-!llvm.dbg.cu = !{!2}
-!0 = !{i32 2, !"Debug Info Version", i32 3}
-!1 = !{i32 1, !"ThinLTO", i32 0}
-!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, retainedTypes: !4)
-!3 = !DIFile(filename: "f2", directory: "")
-!4 = !{!5}
-!5 = !DICompositeType(tag: DW_TAG_class_type, file: !3, flags: DIFlagFwdDecl, identifier: "SHARED")
-!6 = distinct !DISubprogram(unit: !2)
diff --git a/test/LTO/X86/type-mapping-bug2.ll b/test/LTO/X86/type-mapping-bug2.ll
deleted file mode 100644
index f14183f506f..00000000000
--- a/test/LTO/X86/type-mapping-bug2.ll
+++ /dev/null
@@ -1,42 +0,0 @@
-; RUN: opt -module-summary -o %t0.o %S/Inputs/type-mapping-bug2.ll
-; RUN: opt -module-summary -o %t1.o %s
-; RUN: llvm-lto2 run -o %t2 %t0.o %t1.o -r %t0.o,c,px -r %t1.o,a,px -r %t1.o,b,px
-;
-; Test for the issue described in https://bugs.llvm.org/show_bug.cgi?id=37684
-
-target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
-target triple = "x86_64-unknown-linux-gnu"
-
-; T1 will be linked against T2 because T2 was already loaded in %t0.o due to
-; the declaration for @b being imported due to !13
-%"T1" = type {}
-%"T2" = type {}
-
-define %"T1" @a() {
- unreachable
-}
-
-define i1 @b(%"T2"*) {
- unreachable
-}
-
-!llvm.module.flags = !{!0, !1}
-!llvm.dbg.cu = !{!2}
-!0 = !{i32 2, !"Debug Info Version", i32 3}
-!1 = !{i32 1, !"ThinLTO", i32 0}
-!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, retainedTypes: !4)
-!3 = !DIFile(filename: "f1", directory: "")
-!4 = !{!5, !9}
-!5 = !DICompositeType(tag: DW_TAG_class_type, file: !3, templateParams: !6, scope: !8)
-!6 = !{!7}
-
-; The reference to @b and T2 that will be loaded in %t0.o
-
-!7 = !DITemplateValueParameter(value: i1 (%"T2"*)* @b)
-!8 = distinct !DISubprogram(unit: !2)
-
-; This DICompositeType is uniqued against !5 in Inputs/type-mapping-bug2.ll,
-; causing !7 and hence %T2 to be loaded into it's module
-
-!9 = !DICompositeType(tag: DW_TAG_array_type, identifier: "SHARED", scope: !8)
-