diff options
author | Eugene Leviant <eleviant@accesssoftek.com> | 2018-01-25 08:35:52 +0000 |
---|---|---|
committer | Eugene Leviant <eleviant@accesssoftek.com> | 2018-01-25 08:35:52 +0000 |
commit | 41e45955bb32d02bce91b1cd2dcf3f0ebedcd062 (patch) | |
tree | 59c369947f96f446081ad94f736cbf8b231cecc5 | |
parent | b369cdbaadb9ed3bc92d51f4361233d065ecdd4b (diff) | |
download | bcm5719-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.cpp | 6 | ||||
-rw-r--r-- | llvm/test/Linker/type-unique-dst-types.ll | 6 |
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 |