LLVM Weekly - #21, May 26th 2014 =============================== If you prefer, you can read a HTML version of this email at <http://llvmweekly.org/issue/21> Welcome to the 21st 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. I'm back in the UK and mostly recovered from the ensuing jetlag. I am however disturbed that all mailing lists on [GMANE](http://gmane.org/) don't seem to have been updated for the past week and have been unable to find any explanation of what is going on online. GMANE is an important and massively useful aggregrator and archiver of free software development lists and I really hope these are only temporary problems. For this issue, I have instead linked directly to the mailman archives at UIUC. ## News and articles from around the web Jonathan Mah has written a [Clang plugin for checking key path strings in Objective C code](http://devetc.org/code/2014/05/17/safe-and-sane-key-paths.html). The implementation is [available on Github](https://github.com/jmah/Clang-KeyPathValidator). LWN has published an [article about ThreadSanitizer v2](http://lwn.net/Articles/598486/). This week, the merge of the AArch64 and the Apple-contributed ARM64 backends was completed. The old AArch64 was deleted and the result of merging code from AArch64 in to ARM64 was renamed to AArch64. A paper '[Static energy consumption analysis of LLVM IR programs](http://arxiv.org/abs/1405.4565)' has been posted to arXiv.org. ## On the mailing lists * Philip Reames wonders [why can't atomic loads and stores handle floats](http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-May/073180.html). David Chisnall has a good followup which explains [why just bitcasting floats to use atomic load/store on them is far from ideal](http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-May/073191.html). * Louis Gerbarg has shared an [RFC on indexing of structs vs arrays in getelementpointr](http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-May/073125.html). This is inspired by his recent work to optimise getelementptr across different basic blocks. * Jingyue Wu [asks for advice on sinking incoming values of a PHI node in CodeGenPrepare](http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-May/073079.html). Louis Gerbarg points out that [these optimisations are similar to his recent GetElementPtr work](http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-May/073096.html). ## LLVM commits * A new attribute, 'nonnull' has been added. When applied to a parameter or return pointer this indicates it is not null, which may allow additional optimisations (at least, avoiding comparisons between that value and null). [r209185](http://reviews.llvm.org/rL209185), [r209193](http://reviews.llvm.org/rL209193). * The llvm.arm.undefined intrinsic has been added. This is used to generate the 0xde opcode on ARM. It takes an integer parameter, which might be used by the OS to implement custom behaviour on the trap. [r209390](http://reviews.llvm.org/rL209390). * The MIPS disassembler has seen some work. Some support has been added for MIPS64r6 and various issues fixed. [r209415](http://reviews.llvm.org/rL209415). * LLVM learned the `-pass-remarks-missed` and `-pass-remarks-analysis` command line options. `-pass-remarks-missed` shows diagnostics when a pass tried to apply a transformation but couldn't. `-pass-remarks-analysis` shows information about analysis results. [r209442](http://reviews.llvm.org/rL209442). * The documentation for the `llvm.mem.parallel_loop_access` metadata has been updated. [r209507](http://reviews.llvm.org/rL209507). * Old AArch64 has been removed and ARM64 renamed to AArch64. [r209576](http://reviews.llvm.org/rL209576), [r209577](http://reviews.llvm.org/rL209577). ## Clang commits * clang-format has seen more JS support. It can now reformat ES6 arrow functions and ES6 destructuring assignments. [r209112](http://reviews.llvm.org/rL209112), [r209113](http://reviews.llvm.org/rL209113). * Experimental checkers for the clang static analyzer are [now documented](http://clang.llvm.org/analyzer/alpha_checks.html). [r209131](http://reviews.llvm.org/rL209131). * Support was added to clang for global named registers, using the LLVM intrinsics which were recently added. [r209149](http://reviews.llvm.org/rL209149). * Clang learned the `no_split_stack` attribute to turn off split stacks on a per-function bases. [r209167](http://reviews.llvm.org/rL209167). * Clang learned the `flatten` attribute. This causes calls within the function to be inlined where possible. [r209217](http://reviews.llvm.org/rL209217). * An initial version of codegen for pragma omp simd has been committed. This also adds CGLoopInfo which is a helper for marking memory instructions with `llvm.mem.parallel_loop_access` metadata. [r209411](http://reviews.llvm.org/rL209411). * The pragma `clang optimize {on,off}` has been implemented. This allows you to selectively disable optimisations on certain functions. [r209510](http://reviews.llvm.org/rL209510). * An implementation of Microsoft ABI-compatible RTTI (run-time type information) has landed. [r209523](http://reviews.llvm.org/rL209523). ## Other project commits * 'Chained origins' as used by MemorySanitizer has been redesigned. [r209284](http://reviews.llvm.org/rL209284).