<p dir="ltr">I think that's where we work on that abstraction for the middle end so we don't need to worry about it. </p>
<br><div class="gmail_quote">On Tue, Dec 23, 2014, 10:22 AM Bob Wilson <<a href="mailto:bob.wilson@apple.com">bob.wilson@apple.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><blockquote type="cite"><div>On Dec 23, 2014, at 9:45 AM, Chris Lattner <<a href="mailto:clattner@apple.com" target="_blank">clattner@apple.com</a>> wrote:</div><br><div><div style="word-wrap:break-word">On Dec 22, 2014, at 2:56 PM, Chris Bieneman <<a href="mailto:beanz@apple.com" target="_blank">beanz@apple.com</a>> wrote:<div><blockquote type="cite"><div><div style="word-wrap:break-word">Circling back to Chandler on file size differences. Here are the highlights of what is different.<div><br></div><div>For my analysis I built LLVM and Clang using a clang built with my patches. The same clang was used for the baseline and the stripped build. I used the following CMake command:</div><div><br></div><div><div style="margin:0px;font-family:'Andale Mono'"><span style="color:rgb(69,123,249);background-color:rgb(0,0,0)">cmake</span><span style="color:rgb(41,249,20);background-color:rgb(0,0,0)"> </span><font color="#38c1ff"><span style="background-color:rgb(0,0,0)">-G</span></font><span style="color:rgb(41,249,20);background-color:rgb(0,0,0)"> </span><span style="color:rgb(175,173,36);background-color:rgb(0,0,0)">"Sublime Text 2 - Ninja"</span><span style="color:rgb(41,249,20);background-color:rgb(0,0,0)"> </span><font color="#38c1ff"><span style="background-color:rgb(0,0,0)">-DCMAKE_BUILD_TYPE=Release</span></font><span style="color:rgb(41,249,20);background-color:rgb(0,0,0)"> </span><font color="#38c1ff"><span style="background-color:rgb(0,0,0)">-DLLVM_BUILD_LLVM_DYLIB=Yes</span></font><span style="color:rgb(41,249,20);background-color:rgb(0,0,0)"> </span><font color="#38c1ff"><span style="background-color:rgb(0,0,0)">-DLLVM_DISABLE_LLVM_DYLIB_ATEXIT=On</span></font><span style="color:rgb(41,249,20);background-color:rgb(0,0,0)"> </span><font color="#38c1ff"><span style="background-color:rgb(0,0,0)">-DCMAKE_INSTALL_PREFIX=/Users/cbieneman/dev/llvm-install/</span></font><span style="color:rgb(41,249,20);background-color:rgb(0,0,0)"> </span><font color="#38c1ff"><span style="background-color:rgb(0,0,0)">-DLLVM_TARGETS_TO_BUILD=</span></font><span style="color:rgb(175,173,36);background-color:rgb(0,0,0)">"AArch64;ARM;X86"</span><span style="color:rgb(41,249,20);background-color:rgb(0,0,0)"> </span><span style="color:rgb(56,193,255);background-color:rgb(0,0,0);text-decoration:underline">../llvm</span></div></div><div><br></div><div>and built using Ninja.</div><div><br></div><div>Created a fresh build directory and built once as a baseline from the following revisions:</div><div><br></div><div>LLVM - ba05946</div><div>lld - 33bd1dc</div><div>clang - 1589d90 (With my patches applied)</div><div><br></div><div>I then applied my tablegen and CMake patches, made a new build directory, and built a second time. I then compared the file sizes between the two directories by diffing the output of:</div><div><br></div><div><div style="margin:0px;font-family:'Andale Mono';color:rgb(56,193,255);background-color:rgb(0,0,0)"><span style="color:#457bf9">find</span><span style="color:#29f914"> </span>.<span style="color:#29f914"> </span>-type<span style="color:#29f914"> </span>f<span style="color:#29f914"> </span>-exec<span style="color:#29f914"> </span>stat<span style="color:#29f914"> </span>-f<span style="color:#29f914"> </span><span style="color:#afad24">'%N %z'</span><span style="color:#29f914"> </span><span style="color:#afad24">'{}'</span><span style="color:#29f914"> </span>+<span style="color:#29f914"> | </span><span style="color:#457bf9">sort</span></div></div><div><br></div><div>The biggest benefits are an 11% reduction in size for libLLVMCore, which is mostly due to Function.cpp.o reducing in size by 300KB (almost 39%). The biggest thing in there that would contribute to actual code size is the almost 28,000 line switch statement that provides the implementation for Function::lookupIntrinsicID.</div></div></div></blockquote><br></div><div>That makes sense.  It sounds like there is a better design here: we should move to a model where intrinsic tables are registered by any targets that are activated.  That would allow the intrinsic tables (including these switch/lookup mapping tables) to be in the target that uses them.</div><div><br></div><div>It should be straight-forward to have something like LLVMInitializeX86Target/RegisterTargetMachine install the intrinsics into a registry.</div></div></div></blockquote><br></div></div><div style="word-wrap:break-word"><div>I tried doing that a few years ago. It’s not nearly as easy as it sounds because we’ve got hardcoded references to various target intrinsics scattered throughout the code.</div></div>______________________________<u></u>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/llvmdev</a><br>
</blockquote></div>