<div dir="ltr">LGTM</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Mar 29, 2016 at 4:47 PM, Davide Italiano <span dir="ltr"><<a href="mailto:davide@freebsd.org" target="_blank">davide@freebsd.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Tue, Mar 29, 2016 at 2:59 PM, Rui Ueyama <<a href="mailto:ruiu@google.com">ruiu@google.com</a>> wrote:<br>
> On Tue, Mar 29, 2016 at 2:46 PM, Davide Italiano via llvm-commits<br>
> <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br>
>><br>
>> Author: davide<br>
>> Date: Tue Mar 29 16:46:35 2016<br>
>> New Revision: 264790<br>
>><br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=264790&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=264790&view=rev</a><br>
>> Log:<br>
>> [LTO] Teach LTO about @llvm.used global.<br>
>><br>
>> If a symbol appears in @llvm.used, the linker is forced to treat<br>
>> the symbol as there's a reference to it.<br>
>><br>
>> Added:<br>
>>     lld/trunk/test/ELF/lto/internalize-llvmused.ll<br>
>> Modified:<br>
>>     lld/trunk/ELF/LTO.cpp<br>
>><br>
>> Modified: lld/trunk/ELF/LTO.cpp<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LTO.cpp?rev=264790&r1=264789&r2=264790&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LTO.cpp?rev=264790&r1=264789&r2=264790&view=diff</a><br>
>><br>
>> ==============================================================================<br>
>> --- lld/trunk/ELF/LTO.cpp (original)<br>
>> +++ lld/trunk/ELF/LTO.cpp Tue Mar 29 16:46:35 2016<br>
>> @@ -21,6 +21,7 @@<br>
>>  #include "llvm/Support/TargetRegistry.h"<br>
>>  #include "llvm/Target/TargetMachine.h"<br>
>>  #include "llvm/Transforms/IPO.h"<br>
>> +#include "llvm/Transforms/Utils/ModuleUtils.h"<br>
>>  #include "llvm/Transforms/IPO/PassManagerBuilder.h"<br>
>><br>
>>  using namespace llvm;<br>
>> @@ -76,6 +77,10 @@ void BitcodeCompiler::add(BitcodeFile &F<br>
>>    unsigned BodyIndex = 0;<br>
>>    ArrayRef<SymbolBody *> Bodies = F.getSymbols();<br>
>><br>
>> +  Module &M = Obj->getModule();<br>
>> +  SmallPtrSet<GlobalValue *, 8> Used;<br>
>> +  collectUsedGlobalVariables(M, Used, /* CompilerUsed */ false);<br>
><br>
><br>
> Please add a comment.<br>
><br>
<br>
</div></div>Does the following look good to you?<br>
<br>
diff --git a/ELF/LTO.cpp b/ELF/LTO.cpp<br>
index 63fb6e3..b1d5d60 100644<br>
--- a/ELF/LTO.cpp<br>
+++ b/ELF/LTO.cpp<br>
@@ -78,6 +78,10 @@ void BitcodeCompiler::add(BitcodeFile &F) {<br>
<span class="">   ArrayRef<SymbolBody *> Bodies = F.getSymbols();<br>
<br>
</span><span class="">   Module &M = Obj->getModule();<br>
+<br>
</span>+  // If a symbol appears in @llvm.used, the linker is required<br>
+  // to treat the symbol as there is a reference to the symbol<br>
+  // that it cannot see. Therefore, we can't internalize.<br>
<span class="im HOEnZb">   SmallPtrSet<GlobalValue *, 8> Used;<br>
</span><div class="HOEnZb"><div class="h5">   collectUsedGlobalVariables(M, Used, /* CompilerUsed */ false);<br>
<br>
<br>
<br>
</div></div><span class="HOEnZb"><font color="#888888">--<br>
Davide<br>
<br>
"There are no solved problems; there are only problems that are more<br>
or less solved" -- Henri Poincare<br>
</font></span></blockquote></div><br></div>