summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEugene Leviant <eleviant@accesssoftek.com>2018-01-25 08:35:52 +0000
committerEugene Leviant <eleviant@accesssoftek.com>2018-01-25 08:35:52 +0000
commit41e45955bb32d02bce91b1cd2dcf3f0ebedcd062 (patch)
tree59c369947f96f446081ad94f736cbf8b231cecc5
parentb369cdbaadb9ed3bc92d51f4361233d065ecdd4b (diff)
downloadbcm5719-llvm-41e45955bb32d02bce91b1cd2dcf3f0ebedcd062.tar.gz
bcm5719-llvm-41e45955bb32d02bce91b1cd2dcf3f0ebedcd062.zip
[IRMover] Add comment and fix test case
llvm-svn: 323407
-rw-r--r--llvm/lib/Linker/IRMover.cpp6
-rw-r--r--llvm/test/Linker/type-unique-dst-types.ll6
2 files changed, 11 insertions, 1 deletions
diff --git a/llvm/lib/Linker/IRMover.cpp b/llvm/lib/Linker/IRMover.cpp
index f7170e714b9..6863a895cb1 100644
--- a/llvm/lib/Linker/IRMover.cpp
+++ b/llvm/lib/Linker/IRMover.cpp
@@ -95,6 +95,12 @@ void TypeMapTy::addTypeMapping(Type *DstTy, Type *SrcTy) {
for (StructType *Ty : SpeculativeDstOpaqueTypes)
DstResolvedOpaqueTypes.erase(Ty);
} else {
+ // SrcTy and DstTy are recursively ismorphic. We clear names of SrcTy
+ // and all its descendants to lower amount of renaming in LLVM context
+ // Renaming occurs because we load all source modules to the same context
+ // and declaration with existing name gets renamed (i.e Foo -> Foo.42).
+ // As a result we may get several different types in the destination
+ // module, which are in fact the same.
for (Type *Ty : SpeculativeTypes)
if (auto *STy = dyn_cast<StructType>(Ty))
if (STy->hasName())
diff --git a/llvm/test/Linker/type-unique-dst-types.ll b/llvm/test/Linker/type-unique-dst-types.ll
index 1adad49de91..cfcad130e6a 100644
--- a/llvm/test/Linker/type-unique-dst-types.ll
+++ b/llvm/test/Linker/type-unique-dst-types.ll
@@ -1,6 +1,8 @@
; RUN: llvm-link %p/type-unique-dst-types.ll \
; RUN: %p/Inputs/type-unique-dst-types2.ll \
-; RUN: %p/Inputs/type-unique-dst-types3.ll -S -o - | FileCheck %s
+; RUN: %p/Inputs/type-unique-dst-types3.ll -S -o %t1.ll
+; RUN: cat %t1.ll | FileCheck %s
+; RUN: cat %t1.ll | FileCheck --check-prefix=RENAMED %s
; This tests the importance of keeping track of which types are part of the
; destination module.
@@ -14,6 +16,8 @@
; CHECK: @g1 = external global %A
; CHECK: @g2 = external global %A
+; RENAMED-NOT: A.11
+
%A = type { %B }
%B = type { i8 }
@g3 = external global %A
OpenPOWER on IntegriCloud