LLVM Weekly - #17, Apr 28th 2014 =============================== If you prefer, you can read a HTML version of this email at <http://llvmweekly.org/issue/17> Welcome to the 17th issue of LLVM Weekly, a weekly newsletter (published every Monday) covering developments in LLVM, Clang, and related projects. LLVM Weekly is brought to you by [Alex Bradbury](http://asbradbury.org). Subscribe to future issues at <http://llvmweekly.org> and pass it on to anyone else you think may be interested. Please send any tips or feedback to <asb at asbradbury.org>, or @llvmweekly or @asbradbury on Twitter. Last week I wondered why the GCC logo is a [GNU leaping out of an egg](http://commons.wikimedia.org/wiki/File:GNU_Compiler_Collection_logo.svg). Thank you to everyone who wrote in to let me know it is a reference to EGCS. GCC was of course famously forked as EGCS which was later merged back in. Apparently this was pronounced by some as "eggs". Mystery solved. ## News and articles from around the web GCC 4.9.0 was [released last Tuesday](http://gcc.gnu.org/ml/gcc/2014-04/msg00195.html). See [here](http://gcc.gnu.org/gcc-4.9/changes.html) for more detailed notes on changes in this release. Honza Hubička wrote a blog post on the [history of linktime optimisation in GCC](http://hubicka.blogspot.co.uk/2014/04/linktime-optimization-in-gcc-1-brief.html), which was followed by a post containing a [benchmark comparison of LTO in GCC vs LLVM](http://hubicka.blogspot.ca/2014/04/linktime-optimization-in-gcc-2-firefox.html). On Twitter, @lambdamix drew my attention to [Notes on Graph Algorithms Used in Optimizing Compilers](http://www.cs.umb.edu/~offner/files/flow_graph.pdf) (PDF). I imagine it will be of interest to many LLVM Weekly readers. ## On the mailing lists * Michael Zolotukhin [proposes extending LLVM IR with new intrinsics for safe division](http://article.gmane.org/gmane.comp.compilers.llvm.devel/72466). These join the existing intrinsics for addition with overflow. Filip Pizlo follows up with a [description of how it would be used for various potential language frontends](http://article.gmane.org/gmane.comp.compilers.llvm.devel/72510). Michael has also posted a [detailed justification in answer to concerns raised](http://article.gmane.org/gmane.comp.compilers.llvm.devel/72533). * James Molloy [shares an updated on the AArch64 to ARM64 merge](http://article.gmane.org/gmane.comp.compilers.llvm.cvs/185388/), including time estimates for remaining tasks. The initial merge should be complete before LLVM 3.5. Additionally, Ana Pazos has gained permission to share [relative SPEC2000 figures for ARM64 vs AArch64](http://article.gmane.org/gmane.comp.compilers.llvm.devel/72454/). * Sylvestre Ledru [proposes removing outdated marketing material from the Clang website](http://article.gmane.org/gmane.comp.compilers.clang.devel/36229). In particular, the performance comparisons are with GCC 4.0 or 4.2 which is of course rather outdated, particularly given how GCC has improved since then. * Kostya Serebryany reports that [AddressSanitizer and LeakSanitizer are finding many many leaks within Clang](http://article.gmane.org/gmane.comp.compilers.clang.devel/36234). The bug tracking this is [#19521](http://llvm.org/bugs/show_bug.cgi?id=19521). * Tom Stellard has [kicked off the second testing phase for LLVM and Clang 3.4.1](http://article.gmane.org/gmane.comp.compilers.llvm.devel/72524). This is expected to be the last release candidate, so 3.4.1 shouldn't be far away. ## LLVM commits * The 'musttail' marker which was [proposed several weeks ago](http://article.gmane.org/gmane.comp.compilers.llvm.devel/71775) has been added. Unlike the 'tail' marker, musttail guarantees that tail call optimization will occur. Check the documentation added in the commit for a more detailed explanation. [r207143](http://reviews.llvm.org/rL207143). * The rewrite of BlockFrequencyInfo finally landed. A description of the advantages of the new algorithm is in the original commit message, [r206548](http://reviews.llvm.org/rL206548). After a series of bounces, it landed in [r206766](http://reviews.llvm.org/rL206766). * LLVM can now generate PE/COFF object files targeting 'Windows on ARM'. [r207345](http://reviews.llvm.org/rL207345). * A CallGraph strongly connected components pass manager has been added making use of the new LazyCallGraph analysis framework. This is part of the new pass manager work Chandler Carruth has been working on and is of course a work in progress. [r206745](http://reviews.llvm.org/rL206745). * The scheduler model for the Intel Silvermont microarchitecture has been replaced. The commit message claims substantial improvements on integer tests. I'm assuming RAL in this context refers to RegAllocLocal? [r206957](http://reviews.llvm.org/rL206957). * ARM64 has of course seen a large number of changes. Among those, support for feature predicates for NEON/FP/CYPTO instructions. This allows the compiler to generate code without using those instructions. [r206949](http://reviews.llvm.org/rL206949). Additionally, there is now a big endian version of the ARM64 target machine. [r206965](http://reviews.llvm.org/rL206965). * getFileOffset has been dropped from LLVM's C API. Justification is in the commit message. [r206750](http://reviews.llvm.org/rL206750). * The LoopVectorize pass now keeps statistics on the number of analyzed loops and the number of vectorized loops. [r206956](http://reviews.llvm.org/rL206956). * The x86 backend gained new intrinsics for Read Time Stamp Counter. [r207127](http://reviews.llvm.org/rL207127). * Initial work on mutation support for the lazy call graph has landed. As with most of Chandler's commits, there's much more information in the commit message. [r206968](http://reviews.llvm.org/rL206968). * MCTargetOptions has been introduced, which for now only contains a single flag. SanitizeAddress enabled AddressSanitizer instrumentation of inline assembly. [r206971](http://reviews.llvm.org/rL206971). * llvm-cov now supports gcov's `--long-file-names` option. [r207035](http://reviews.llvm.org/rL207035). ## Clang commits * Documentation for sample profiling was added. [r206994](http://reviews.llvm.org/rL206994). * Support for parsing the linear clause for the 'omp simd' directive was added. [r206891](http://reviews.llvm.org/rL206891). * Clang gained support for the `-fmodules-search-all` option, which searches for symbols in non-imported modules (i.e. those referenced in module maps but not imported). [r206977](http://reviews.llvm.org/rL206977). ## Other project commits * AddressSanitizer gained an experimental detector for "one definition rule" violations (where two globals with the same name are defined in different modules). [r207210](http://reviews.llvm.org/rL207210).