diff options
| -rw-r--r-- | llvm/lib/Linker/IRMover.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/Linker/LinkModules.cpp | 2 | ||||
| -rw-r--r-- | llvm/test/Linker/Inputs/only-needed-recurse.ll | 8 | ||||
| -rw-r--r-- | llvm/test/Linker/only-needed-recurse.ll | 11 |
4 files changed, 23 insertions, 2 deletions
diff --git a/llvm/lib/Linker/IRMover.cpp b/llvm/lib/Linker/IRMover.cpp index b4d91d186e1..1100daf7116 100644 --- a/llvm/lib/Linker/IRMover.cpp +++ b/llvm/lib/Linker/IRMover.cpp @@ -849,9 +849,11 @@ bool IRLinker::shouldLink(GlobalValue *DGV, GlobalValue &SGV) { if (SGV.hasAvailableExternallyLinkage()) return true; - if (DoneLinkingBodies) + if (SGV.isDeclaration()) return false; + if (DoneLinkingBodies) + return false; // Callback to the client to give a chance to lazily add the Global to the // list of value to link. diff --git a/llvm/lib/Linker/LinkModules.cpp b/llvm/lib/Linker/LinkModules.cpp index 8ed885649ca..5b713fe29fb 100644 --- a/llvm/lib/Linker/LinkModules.cpp +++ b/llvm/lib/Linker/LinkModules.cpp @@ -423,7 +423,7 @@ void ModuleLinker::addLazyFor(GlobalValue &GV, IRMover::ValueAdder Add) { return; // Add these to the internalize list - if (!GV.hasLinkOnceLinkage()) + if (!GV.hasLinkOnceLinkage() && !shouldLinkOnlyNeeded()) return; if (shouldInternalizeLinkedSymbols()) diff --git a/llvm/test/Linker/Inputs/only-needed-recurse.ll b/llvm/test/Linker/Inputs/only-needed-recurse.ll new file mode 100644 index 00000000000..423c9d53e9d --- /dev/null +++ b/llvm/test/Linker/Inputs/only-needed-recurse.ll @@ -0,0 +1,8 @@ +define void @f2() { + call void @f3() + ret void +} + +define void @f3() { + ret void +} diff --git a/llvm/test/Linker/only-needed-recurse.ll b/llvm/test/Linker/only-needed-recurse.ll new file mode 100644 index 00000000000..dcb99e91eef --- /dev/null +++ b/llvm/test/Linker/only-needed-recurse.ll @@ -0,0 +1,11 @@ +; RUN: llvm-link -S -only-needed %s %p/Inputs/only-needed-recurse.ll | FileCheck %s + +declare void @f2() + +define void @f1() { + call void @f2() + ret void +} + +; CHECK: define void @f3 + |

