diff options
author | Stephen Hines <srhines@google.com> | 2018-09-04 14:43:47 -0700 |
---|---|---|
committer | Chih-Hung Hsieh <chh@google.com> | 2018-11-15 11:18:18 -0800 |
commit | 05ec7c765159d4ee2471aef366d56a4a5160b5b4 (patch) | |
tree | 7af2520d9a9c4650a495340e4ed1ffe4db66ab39 | |
parent | 6d08abd8ca4485a9a2fa070c6b5bfa7fec2e5a86 (diff) | |
download | llvm-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.cpp | 19 | ||||
-rw-r--r-- | test/LTO/X86/Inputs/type-mapping-bug2.ll | 16 | ||||
-rw-r--r-- | test/LTO/X86/type-mapping-bug2.ll | 42 |
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) - |