<div dir="ltr">Sorry if this is a stupid question, but do the windows intrinsic headers actually contain the same contents as clang's? (e.g. maybe the windows ones don't cover all the ISA's that clang's do).<div><br></div><div>-- Sean Silva</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, May 12, 2016 at 9:16 AM, Nico Weber via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi,<div><br></div><div>on Windows, C++ system headers like e.g. <string> end up pulling in intrin.h. clang's intrinsic headers are very large.</div><div><br></div><div>If you take a cc file containing just `#include <string>` and run that through the preprocessor with `cl /P test.cc` and `clang-cl /P test.cc`, the test.I file generated by clang-cl is 1.7MB while the one created by cl.exe is 0.7MB. This is solely due to clang's intrin.h expanding to way more stuff.</div><div><br>The biggest offenders are avx512vlintrin.h, avx512fintrin.h, avx512vlbwintrin.h which add up to 657kB already. Before r239883, we only included avx headers if __AVX512F__ etc was defined. This is currently never the case in practice. Later (r243394 r243402 r243406 and more), the avx headers got much bigger.</div><div><br></div><div>Parsing all this code takes time -- removing the avx512 includes from immintrin.h locally makes compiling a file containing just the <string> header 0.25s faster (!), and building all of v8 gets 6% faster, just from not including the avx512 headers.</div><div><br>What can we do about this? Since avx512 is new, maybe they could be not part of immintrin.h? Or we could re-introduce</div><div><br></div><div>  #if !__has_feature(modules) && defined(__AVX512BW__)</div><div><br></div><div>include guards in immintrin.h. This would give us a speed win immediately without drawbacks as far as I can see, but in a few years when people start compiling with /arch:avx512 that'd go away again. (Then again, by then, modules are hopefully commonly available. cl.exe doesn't have an /arch:avx512 switch yet, so this is probably several years away from happening.)</div><div><br></div><div>Comments? Is it feasible to require that people who want to use avx512 include a new header instead of immintrin.h? Else, does anyone have a better idea other than reintroducing the #ifdefs, augmented with the module check?</div><div><br></div><div>Thanks,</div><div>Nico</div></div>
<br>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div>