<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Dec 7, 2015 at 8:31 AM, Rafael Espindola via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rafael<br>
Date: Mon Dec  7 10:31:41 2015<br>
New Revision: 254917<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=254917&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=254917&view=rev</a><br>
Log:<br>
Link declaration lazily.<br>
<br>
We already linked available_externally and linkonce lazily, this just<br>
adds declarations to the list.<br>
<br>
Modified:<br>
    llvm/trunk/lib/Linker/LinkModules.cpp<br>
    llvm/trunk/test/Linker/2003-04-23-LinkOnceLost.ll<br>
    llvm/trunk/test/Linker/2003-05-31-LinkerRename.ll<br>
    llvm/trunk/test/Linker/ConstantGlobals.ll<br>
    llvm/trunk/test/Linker/Inputs/opaque.ll<br>
    llvm/trunk/test/Linker/Inputs/testlink.ll<br>
    llvm/trunk/test/Linker/Inputs/type-unique-dst-types2.ll<br>
    llvm/trunk/test/Linker/Inputs/type-unique-dst-types3.ll<br>
    llvm/trunk/test/Linker/opaque.ll<br>
    llvm/trunk/test/Linker/testlink.ll<br>
    llvm/trunk/test/Linker/type-unique-dst-types.ll<br>
    llvm/trunk/test/Linker/type-unique-src-type.ll<br>
    llvm/trunk/test/Linker/unnamed-addr1-a.ll<br>
    llvm/trunk/test/Linker/weakextern.ll<br>
<br>
Modified: llvm/trunk/lib/Linker/LinkModules.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Linker/LinkModules.cpp?rev=254917&r1=254916&r2=254917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Linker/LinkModules.cpp?rev=254917&r1=254916&r2=254917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Linker/LinkModules.cpp (original)<br>
+++ llvm/trunk/lib/Linker/LinkModules.cpp Mon Dec  7 10:31:41 2015<br>
@@ -1753,6 +1753,9 @@ bool ModuleLinker::linkIfNeeded(GlobalVa<br>
        GV.hasAvailableExternallyLinkage()))<br>
     return false;<br>
<br>
+  if (GV.isDeclaration())<br>
+    return false;<br></blockquote><div><br></div><div>This breaks Halide (<a href="http://halide-lang.org">halide-lang.org</a>), which links together a bunch of .ll files to form its runtime library, and relies on declarations being preserved by that link step (in particular, it has declarations of various intrinsics that it wants to look up by name later). Is there any way to turn this off, to get back the "preserve all globals" behavior we used to have here?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+<br>
   if (const Comdat *SC = GV.getComdat()) {<br>
     bool LinkFromSrc;<br>
     Comdat::SelectionKind SK;<br>
<br>
Modified: llvm/trunk/test/Linker/2003-04-23-LinkOnceLost.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/2003-04-23-LinkOnceLost.ll?rev=254917&r1=254916&r2=254917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/2003-04-23-LinkOnceLost.ll?rev=254917&r1=254916&r2=254917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Linker/2003-04-23-LinkOnceLost.ll (original)<br>
+++ llvm/trunk/test/Linker/2003-04-23-LinkOnceLost.ll Mon Dec  7 10:31:41 2015<br>
@@ -4,3 +4,7 @@<br>
<br>
 declare void @foo()<br>
<br>
+define void @use_foo() {<br>
+  call void @foo()<br>
+  ret void<br>
+}<br>
<br>
Modified: llvm/trunk/test/Linker/2003-05-31-LinkerRename.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/2003-05-31-LinkerRename.ll?rev=254917&r1=254916&r2=254917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/2003-05-31-LinkerRename.ll?rev=254917&r1=254916&r2=254917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Linker/2003-05-31-LinkerRename.ll (original)<br>
+++ llvm/trunk/test/Linker/2003-05-31-LinkerRename.ll Mon Dec  7 10:31:41 2015<br>
@@ -6,13 +6,13 @@<br>
 ; CHECK-NEXT:   ret i32 7<br>
 ; CHECK-NEXT: }<br>
<br>
-; CHECK: declare i32 @foo()<br>
-<br>
 ; CHECK:      define i32 @test() {<br>
 ; CHECK-NEXT:   %X = call i32 @foo()<br>
 ; CHECK-NEXT:   ret i32 %X<br>
 ; CHECK-NEXT: }<br>
<br>
+; CHECK: declare i32 @foo()<br>
+<br>
 declare i32 @foo()<br>
<br>
 define i32 @test() {<br>
<br>
Modified: llvm/trunk/test/Linker/ConstantGlobals.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/ConstantGlobals.ll?rev=254917&r1=254916&r2=254917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/ConstantGlobals.ll?rev=254917&r1=254916&r2=254917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Linker/ConstantGlobals.ll (original)<br>
+++ llvm/trunk/test/Linker/ConstantGlobals.ll Mon Dec  7 10:31:41 2015<br>
@@ -6,3 +6,7 @@<br>
<br>
 ; CHECK-DAG: @Y = external global [1 x i32]<br>
 @Y = external global [1 x i32]<br>
+<br>
+define [1 x i32]* @use-Y() {<br>
+  ret [1 x i32] *@Y<br>
+}<br>
<br>
Modified: llvm/trunk/test/Linker/Inputs/opaque.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/Inputs/opaque.ll?rev=254917&r1=254916&r2=254917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/Inputs/opaque.ll?rev=254917&r1=254916&r2=254917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Linker/Inputs/opaque.ll (original)<br>
+++ llvm/trunk/test/Linker/Inputs/opaque.ll Mon Dec  7 10:31:41 2015<br>
@@ -11,3 +11,11 @@ define void @f1()  {<br>
   getelementptr %A, %A* null, i32 0<br>
   ret void<br>
 }<br>
+<br>
+define %A* @use_g2() {<br>
+ ret %A* @g2<br>
+}<br>
+<br>
+define %B* @use_g3() {<br>
+  ret %B* @g3<br>
+}<br>
<br>
Modified: llvm/trunk/test/Linker/Inputs/testlink.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/Inputs/testlink.ll?rev=254917&r1=254916&r2=254917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/Inputs/testlink.ll?rev=254917&r1=254916&r2=254917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Linker/Inputs/testlink.ll (original)<br>
+++ llvm/trunk/test/Linker/Inputs/testlink.ll Mon Dec  7 10:31:41 2015<br>
@@ -53,4 +53,6 @@ define internal void @testIntern() {<br>
   ret void<br>
 }<br>
<br>
-declare void @VecSizeCrash1(%VecSize)<br>
+define void @VecSizeCrash1(%VecSize) {<br>
+  ret void<br>
+}<br>
<br>
Modified: llvm/trunk/test/Linker/Inputs/type-unique-dst-types2.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/Inputs/type-unique-dst-types2.ll?rev=254917&r1=254916&r2=254917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/Inputs/type-unique-dst-types2.ll?rev=254917&r1=254916&r2=254917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Linker/Inputs/type-unique-dst-types2.ll (original)<br>
+++ llvm/trunk/test/Linker/Inputs/type-unique-dst-types2.ll Mon Dec  7 10:31:41 2015<br>
@@ -1,3 +1,7 @@<br>
 %A.11 = type { %B }<br>
 %B = type { i8 }<br>
 @g1 = external global %A.11<br>
+<br>
+define %A.11* @use_g1() {<br>
+  ret %A.11* @g1<br>
+}<br>
<br>
Modified: llvm/trunk/test/Linker/Inputs/type-unique-dst-types3.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/Inputs/type-unique-dst-types3.ll?rev=254917&r1=254916&r2=254917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/Inputs/type-unique-dst-types3.ll?rev=254917&r1=254916&r2=254917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Linker/Inputs/type-unique-dst-types3.ll (original)<br>
+++ llvm/trunk/test/Linker/Inputs/type-unique-dst-types3.ll Mon Dec  7 10:31:41 2015<br>
@@ -1,2 +1,6 @@<br>
 %A.11 = type opaque<br>
 @g2 = external global %A.11<br>
+<br>
+define %A.11* @use_g2() {<br>
+  ret %A.11* @g2<br>
+}<br>
<br>
Modified: llvm/trunk/test/Linker/opaque.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/opaque.ll?rev=254917&r1=254916&r2=254917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/opaque.ll?rev=254917&r1=254916&r2=254917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Linker/opaque.ll (original)<br>
+++ llvm/trunk/test/Linker/opaque.ll Mon Dec  7 10:31:41 2015<br>
@@ -19,3 +19,7 @@<br>
 %C = type { %A }<br>
<br>
 @g1 = external global %B<br>
+<br>
+define %B* @use_g1() {<br>
+  ret %B* @g1<br>
+}<br>
<br>
Modified: llvm/trunk/test/Linker/testlink.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/testlink.ll?rev=254917&r1=254916&r2=254917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/testlink.ll?rev=254917&r1=254916&r2=254917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Linker/testlink.ll (original)<br>
+++ llvm/trunk/test/Linker/testlink.ll Mon Dec  7 10:31:41 2015<br>
@@ -32,6 +32,11 @@<br>
<br>
 ; CHECK-DAG: @0 = external global i32<br>
 @0 = external global i32<br>
+<br>
+define i32* @use0() {<br>
+  ret i32* @0<br>
+}<br>
+<br>
 ; CHECK-DAG: @Inte = global i32 1<br>
 @Inte = global i32 1<br>
<br>
@@ -101,4 +106,6 @@ define void @testIntern() {<br>
   ret void<br>
 }<br>
<br>
-declare void @VecSizeCrash(%VecSize)<br>
+define void @VecSizeCrash(%VecSize) {<br>
+  ret void<br>
+}<br>
<br>
Modified: llvm/trunk/test/Linker/type-unique-dst-types.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/type-unique-dst-types.ll?rev=254917&r1=254916&r2=254917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/type-unique-dst-types.ll?rev=254917&r1=254916&r2=254917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Linker/type-unique-dst-types.ll (original)<br>
+++ llvm/trunk/test/Linker/type-unique-dst-types.ll Mon Dec  7 10:31:41 2015<br>
@@ -17,3 +17,7 @@<br>
 %A = type { %B }<br>
 %B = type { i8 }<br>
 @g3 = external global %A<br>
+<br>
+define %A* @use_g3() {<br>
+  ret %A* @g3<br>
+}<br>
<br>
Modified: llvm/trunk/test/Linker/type-unique-src-type.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/type-unique-src-type.ll?rev=254917&r1=254916&r2=254917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/type-unique-src-type.ll?rev=254917&r1=254916&r2=254917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Linker/type-unique-src-type.ll (original)<br>
+++ llvm/trunk/test/Linker/type-unique-src-type.ll Mon Dec  7 10:31:41 2015<br>
@@ -10,7 +10,7 @@<br>
 ; CHECK-NEXT: %B = type { %A }<br>
 ; CHECK-NEXT: %A = type { i8 }<br>
<br>
-; CHECK: @g1 = external global %C.0<br>
+; CHECK: @g1 = global %C.0 zeroinitializer<br>
 ; CHECK:  getelementptr %C.0, %C.0* null, i64 0, i32 0, i32 0<br>
<br>
 %A   = type { i8 }<br>
@@ -21,4 +21,4 @@ define void @f1() {<br>
   getelementptr %C, %C* null, i64 0, i32 0, i32 0<br>
   ret void<br>
 }<br>
-@g1 = external global %C.0<br>
+@g1 = global %C.0 zeroinitializer<br>
<br>
Modified: llvm/trunk/test/Linker/unnamed-addr1-a.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/unnamed-addr1-a.ll?rev=254917&r1=254916&r2=254917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/unnamed-addr1-a.ll?rev=254917&r1=254916&r2=254917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Linker/unnamed-addr1-a.ll (original)<br>
+++ llvm/trunk/test/Linker/unnamed-addr1-a.ll Mon Dec  7 10:31:41 2015<br>
@@ -15,6 +15,11 @@ define weak void @func-b() unnamed_addr<br>
 @global-c = common unnamed_addr global i32 0<br>
 ; CHECK-DAG: @global-c = common unnamed_addr global i32 0<br>
 @global-d = external global i32<br>
+<br>
+define i32* @use-global-d() {<br>
+  ret i32* @global-d<br>
+}<br>
+<br>
 ; CHECK-DAG: @global-d = global i32 42<br>
 @global-e = external unnamed_addr global i32<br>
 ; CHECK-DAG: @global-e = unnamed_addr global i32 42<br>
@@ -27,6 +32,11 @@ define weak void @func-b() unnamed_addr<br>
 ; CHECK-DAG: @alias-b = unnamed_addr alias i32, i32* @global-f<br>
<br>
 declare void @func-c()<br>
+define void @use-func-c() {<br>
+  call void @func-c()<br>
+  ret void<br>
+}<br>
+<br>
 ; CHECK-DAG: define weak void @func-c() {<br>
 define weak void @func-d() { ret void }<br>
 ; CHECK-DAG: define weak void @func-d() {<br>
<br>
Modified: llvm/trunk/test/Linker/weakextern.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/weakextern.ll?rev=254917&r1=254916&r2=254917&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Linker/weakextern.ll?rev=254917&r1=254916&r2=254917&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Linker/weakextern.ll (original)<br>
+++ llvm/trunk/test/Linker/weakextern.ll Mon Dec  7 10:31:41 2015<br>
@@ -6,3 +6,7 @@<br>
 @kallsyms_names = extern_weak global [0 x i8]<br>
 @MyVar = extern_weak global i32<br>
 @Inte = extern_weak global i32<br>
+<br>
+define weak [0 x i8]* @use_kallsyms_names() {<br>
+  ret [0 x i8]* @kallsyms_names<br>
+}<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>