<div dir="ltr">Hey Peter,<br><br>Bit of thread necromancy here - but I'm trying to change some things wrt alias+linkonce_odr (going to make it behave like the alias+external case, for simplicity, less duplication, and simplified debug info) & this test is failing:<br><br>My change causes none of the aliasees to be imported (not even those linkonce_odr ones). This causes -thinlto-action=internalize to fail ("-internalize will not perform without -exportedsymbol").<br><br>It looks like if I fix this by passing -exported-symbol=main, nothing is internalized (all the aliases are called from main) so it may defeat the purpose of this test?<br><br>(I don't really understand how this was working/what it was doing before, though: What kept the aliasees alive if not the calls from main? Maybe a record in the index saying "these are being used elsewhere" - but why isn't there a similar record for the aliases that would've stopped them from being internalized in the first place?)<br><br>Preciate any thoughts you have here,<br><br>- Dave<br><br><div class="gmail_quote"><div dir="ltr">On Wed, Jul 6, 2016 at 4:00 PM Peter Collingbourne via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: pcc<br>
Date: Wed Jul  6 17:53:02 2016<br>
New Revision: 274699<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=274699&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=274699&view=rev</a><br>
Log:<br>
ThinLTO: Add test cases for promote+internalize.<br>
<br>
This tests the effect of both promotion and internalization on a module,<br>
and helps show that D21883 is NFC wrt promotion+internalization.<br>
<br>
Differential Revision: <a href="http://reviews.llvm.org/D21915" rel="noreferrer" target="_blank">http://reviews.llvm.org/D21915</a><br>
<br>
Modified:<br>
    llvm/trunk/test/ThinLTO/X86/alias_import.ll<br>
    llvm/trunk/test/ThinLTO/X86/weak_resolution.ll<br>
<br>
Modified: llvm/trunk/test/ThinLTO/X86/alias_import.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ThinLTO/X86/alias_import.ll?rev=274699&r1=274698&r2=274699&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ThinLTO/X86/alias_import.ll?rev=274699&r1=274698&r2=274699&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/ThinLTO/X86/alias_import.ll (original)<br>
+++ llvm/trunk/test/ThinLTO/X86/alias_import.ll Wed Jul  6 17:53:02 2016<br>
@@ -2,6 +2,7 @@<br>
 ; RUN: opt -module-summary %p/Inputs/alias_import.ll -o %t2.bc<br>
 ; RUN: llvm-lto -thinlto-action=thinlink -o %t.index.bc %t1.bc %t2.bc<br>
 ; RUN: llvm-lto -thinlto-action=promote -thinlto-index %t.index.bc %t2.bc -o - | llvm-dis -o - | FileCheck %s --check-prefix=PROMOTE<br>
+; RUN: llvm-lto -thinlto-action=promote -thinlto-index %t.index.bc %t2.bc -o - | llvm-lto -thinlto-action=internalize -thinlto-index %t.index.bc -thinlto-module-id=%t2.bc - -o - | llvm-dis -o - | FileCheck %s --check-prefix=PROMOTE-INTERNALIZE<br>
 ; RUN: llvm-lto -thinlto-action=import -thinlto-index %t.index.bc %t1.bc -o - | llvm-dis -o - | FileCheck %s --check-prefix=IMPORT<br>
<br>
 ;<br>
@@ -86,7 +87,45 @@<br>
 ; IMPORT-DAG: declare void @weakfuncWeakODRAlias()<br>
 ; IMPORT-DAG: declare void @weakfuncLinkonceODRAlias()<br>
<br>
-<br>
+; Promotion + internalization should internalize all of these, except for aliases of<br>
+; linkonce_odr functions, because alias to linkonce_odr are the only aliases we will<br>
+; import (see selectCallee() in FunctionImport.cpp).<br>
+; PROMOTE-INTERNALIZE-DAG: @globalfuncAlias = internal alias void (...), bitcast (void ()* @globalfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @globalfuncWeakAlias = internal alias void (...), bitcast (void ()* @globalfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @globalfuncLinkonceAlias = internal alias void (...), bitcast (void ()* @globalfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @globalfuncWeakODRAlias = internal alias void (...), bitcast (void ()* @globalfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @globalfuncLinkonceODRAlias = internal alias void (...), bitcast (void ()* @globalfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @internalfuncAlias = internal alias void (...), bitcast (void ()* @internalfunc.llvm.0 to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @internalfuncWeakAlias = internal alias void (...), bitcast (void ()* @internalfunc.llvm.0 to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @internalfuncLinkonceAlias = internal alias void (...), bitcast (void ()* @internalfunc.llvm.0 to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @internalfuncWeakODRAlias = internal alias void (...), bitcast (void ()* @internalfunc.llvm.0 to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @internalfuncLinkonceODRAlias = internal alias void (...), bitcast (void ()* @internalfunc.llvm.0 to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @linkonceODRfuncAlias = alias void (...), bitcast (void ()* @linkonceODRfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @linkonceODRfuncWeakAlias = internal alias void (...), bitcast (void ()* @linkonceODRfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @linkonceODRfuncLinkonceAlias = internal alias void (...), bitcast (void ()* @linkonceODRfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @linkonceODRfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @linkonceODRfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @linkonceODRfuncLinkonceODRAlias = weak_odr alias void (...), bitcast (void ()* @linkonceODRfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @weakODRfuncAlias = internal alias void (...), bitcast (void ()* @weakODRfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @weakODRfuncWeakAlias = internal alias void (...), bitcast (void ()* @weakODRfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @weakODRfuncLinkonceAlias = internal alias void (...), bitcast (void ()* @weakODRfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @weakODRfuncWeakODRAlias = internal alias void (...), bitcast (void ()* @weakODRfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @weakODRfuncLinkonceODRAlias = internal alias void (...), bitcast (void ()* @weakODRfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @linkoncefuncAlias = internal alias void (...), bitcast (void ()* @linkoncefunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @linkoncefuncWeakAlias = internal alias void (...), bitcast (void ()* @linkoncefunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @linkoncefuncLinkonceAlias = internal alias void (...), bitcast (void ()* @linkoncefunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @linkoncefuncWeakODRAlias = internal alias void (...), bitcast (void ()* @linkoncefunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @linkoncefuncLinkonceODRAlias = internal alias void (...), bitcast (void ()* @linkoncefunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @weakfuncAlias = internal alias void (...), bitcast (void ()* @weakfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @weakfuncWeakAlias = internal alias void (...), bitcast (void ()* @weakfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @weakfuncLinkonceAlias = internal alias void (...), bitcast (void ()* @weakfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @weakfuncWeakODRAlias = internal alias void (...), bitcast (void ()* @weakfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: @weakfuncLinkonceODRAlias = internal alias void (...), bitcast (void ()* @weakfunc to void (...)*)<br>
+; PROMOTE-INTERNALIZE-DAG: define internal void @globalfunc()<br>
+; PROMOTE-INTERNALIZE-DAG: define internal void @internalfunc.llvm.0()<br>
+; PROMOTE-INTERNALIZE-DAG: define internal void @linkonceODRfunc()<br>
+; PROMOTE-INTERNALIZE-DAG: define internal void @weakODRfunc()<br>
+; PROMOTE-INTERNALIZE-DAG: define internal void @linkoncefunc()<br>
+; PROMOTE-INTERNALIZE-DAG: define internal void @weakfunc()<br>
<br>
 define i32 @main() #0 {<br>
 entry:<br>
<br>
Modified: llvm/trunk/test/ThinLTO/X86/weak_resolution.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ThinLTO/X86/weak_resolution.ll?rev=274699&r1=274698&r2=274699&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ThinLTO/X86/weak_resolution.ll?rev=274699&r1=274698&r2=274699&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/ThinLTO/X86/weak_resolution.ll (original)<br>
+++ llvm/trunk/test/ThinLTO/X86/weak_resolution.ll Wed Jul  6 17:53:02 2016<br>
@@ -7,6 +7,7 @@<br>
 ; non-prevailing ODR are not kept when possible, but non-ODR non-prevailing<br>
 ; are not affected.<br>
 ; RUN: llvm-lto -thinlto-action=promote %t.bc -thinlto-index=%t3.bc -o - | llvm-dis -o - | FileCheck %s --check-prefix=MOD1<br>
+; RUN: llvm-lto -thinlto-action=promote %t.bc -thinlto-index=%t3.bc -exported-symbol=linkoncefunc -o - | llvm-lto -thinlto-action=internalize -thinlto-module-id=%t.bc - -thinlto-index=%t3.bc -exported-symbol=linkoncefunc -o - | llvm-dis -o - | FileCheck %s --check-prefix=MOD1-INT<br>
 ; RUN: llvm-lto -thinlto-action=promote %t2.bc -thinlto-index=%t3.bc -o - | llvm-dis -o - | FileCheck %s --check-prefix=MOD2<br>
 ; When exported, we always preserve a linkonce<br>
 ; RUN: llvm-lto -thinlto-action=promote %t.bc -thinlto-index=%t3.bc -o - --exported-symbol=linkonceodrfuncInSingleModule | llvm-dis -o - | FileCheck %s --check-prefix=EXPORTED<br>
@@ -47,6 +48,7 @@ entry:<br>
   ret void<br>
 }<br>
 ; MOD1: define weak void @linkoncefunc()<br>
+; MOD1-INT: define weak void @linkoncefunc()<br>
 ; MOD2: define linkonce void @linkoncefunc()<br>
 define linkonce void @linkoncefunc() #0 {<br>
 entry:<br>
@@ -66,6 +68,7 @@ entry:<br>
 }<br>
<br>
 ; MOD1: define linkonce_odr void @linkonceodrfuncInSingleModule()<br>
+; MOD1-INT: define internal void @linkonceodrfuncInSingleModule()<br>
 ; EXPORTED: define weak_odr void @linkonceodrfuncInSingleModule()<br>
 define linkonce_odr void @linkonceodrfuncInSingleModule() #0 {<br>
 entry:<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">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></div>