<div dir="ltr">Hi All,<div><br></div><div>After the initial learning curve, we're excited to have put together a completely gcc/binutils-free toolchain based on LLVM.  Now that we have things working, we desperately need to optimize the resulting binaries.  Our bin files are up to 10x their fully optimized gcc equivalent (1.5k vs 16k).  This is for a bare metal ARM based system so this is significant.</div><div><br></div><div><font face="arial, helvetica, sans-serif">We're using lld for linking and the following dead code elimination techniques seem to be dead ends:</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">1) whole program optimization on our most egregious space waster (-fwhole-program not supported by clang)</font></div><div><font face="arial, helvetica, sans-serif">2) link time optimization (looks like this is only supported by lld for the COFF path not the ELF path)</font></div><div><font face="arial, helvetica, sans-serif">3) using a linker plugin like gold (-<span style="color:rgb(0,0,0)">fuse-linker-plugin doesn't seem to be supported by clang)</span></font></div><div><br></div><div>We have control over the whole codebase and could essentially compile all of our C/C++ code as single file if there was a way to tell clang that it is seeing the whole program.</div><div><br></div><div>Any thoughts on how we could achieve this?  This slidedeck suggests using llvm-link to accomplish this: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_devmtg_2013-2D11_slides_Gao-2DLTO.pdf&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=TLoIRs6M_cYUZSKAcynkcq55H57t5tpplD2x6T-b3mM&s=kZfwoBElwGePaEljcvFWBQ2n9bCYoAS2bojmIpl1-QE&e=">http://llvm.org/devmtg/2013-11/slides/Gao-LTO.pdf</a>.  Is this the most promising way forward?  </div><div><br></div><div>Thanks,</div><div>Ed</div></div>