<div dir="ltr">Thanks Nick.  I've been pursuing Gao's technique but can't seem to get opt to remove obviously dead code from even the following trivial example:<div><br></div><div>







<p class=""><span class="">int</span><span class=""> mult(</span><span class="">int</span><span class=""> a, </span><span class="">int</span><span class=""> b){</span></p>
<p class=""><span class="">    </span><span class="">return</span><span class=""> a*b;</span></p>
<p class=""><span class="">}</span></p>
<p class=""><span class=""></span><br></p>
<p class=""><span class="">int</span><span class=""> main(</span><span class="">void</span><span class="">){</span></p>
<p class=""><span class="">    </span><span class="">return</span><span class=""> </span><span class="">0</span><span class="">;</span></p>
<p class=""><span class="">}</span></p><p class=""><span class=""><br></span></p><p class="">While mult is never called it still is not removed.  I just can't seem to get opt to understand it's seeing the whole program so it can remove this globally accessible function.  What am I missing?  Seems related to the missing -fwhole-program flag in clang.  Perhaps this is not even possible?  If I can't get any answers here I may repost that specific question since I didn't list [opt] in the original question subject.</p><p class=""><br></p><p class="">Thanks,</p><p class="">Ed</p></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jul 17, 2015 at 1:15 AM, Nick Lewycky <span dir="ltr"><<a href="mailto:nicholas@mxc.ca" target="_blank">nicholas@mxc.ca</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><a href="mailto:ed@modk.it" target="_blank">ed@modk.it</a> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
<br>
    Is there a reason why LLVM's link-time optimization won't work for you?<br>
<br>
    <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_docs_GoldPlugin.html&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=tjBpaasySx20628q8qfV2DNErQclShvKfcrbbFqJ2gU&s=Lq8Hh2-3iqKWsDOJuaQs7QPFxkpl61Mn1H-dWkMOTTo&e=" rel="noreferrer" target="_blank">http://llvm.org/docs/GoldPlugin.html</a><br></span>
    <<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_docs_GoldPlugin.html&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=rF94h73bKDdWVhxOWqRXpvw5pSMgvuHQXJ__qw8n2LU&s=PR31BXeMANGrAQP2Tt9Eg5psH82vj8Oq1WmyprGhyn8&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_docs_GoldPlugin.html&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=rF94h73bKDdWVhxOWqRXpvw5pSMgvuHQXJ__qw8n2LU&s=PR31BXeMANGrAQP2Tt9Eg5psH82vj8Oq1WmyprGhyn8&e=</a>><br>
    <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_docs_LinkTimeOptimization.html&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=tjBpaasySx20628q8qfV2DNErQclShvKfcrbbFqJ2gU&s=MboRtNHNcr1ktweE1NG6agzlryu9-0hWVOZt0gbAGMY&e=" rel="noreferrer" target="_blank">http://llvm.org/docs/LinkTimeOptimization.html</a><br>
    <<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_docs_LinkTimeOptimization.html&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=rF94h73bKDdWVhxOWqRXpvw5pSMgvuHQXJ__qw8n2LU&s=PoqmeRXrssdG9xj6Fko_SKttwLPWqUVkxFH41dOcg4w&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_docs_LinkTimeOptimization.html&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=rF94h73bKDdWVhxOWqRXpvw5pSMgvuHQXJ__qw8n2LU&s=PoqmeRXrssdG9xj6Fko_SKttwLPWqUVkxFH41dOcg4w&e=</a>><span class=""><br>
<br>
<br>
Well the primary motivation to move to LLVM is licensing which is why we<br>
also ditched binutils since we can't package gcc for iOS due to the<br>
GPL.  So in the end the gold plugin wouldn't work for licensing reasons<br>
even if we can get it to work technically but thanks for the links I'm<br>
still trying to wrap my head around the problem and any info helps.<br>
</span></blockquote>
<br>
The right future is a world where lld performs llvm lto for you.<br>
<br>
Until then, the technique in Gao's PDF is what I would recommend.<span class="HOEnZb"><font color="#888888"><br>
<br>
Nick<br>
</font></span></blockquote></div><br></div>