LLVM Weekly - #1, Jan 6th 2014

Welcome to the inaugural issue of LLVM Weekly, a weekly newsletter (published every Monday) covering developments in LLVM, Clang, and related projects. I've been a long time lurker on the LLVM and Clang mailing lists and have been using LLVM extensively in my PhD research for the past 4 years. I thought it might be worthwhile to produce something to help keep track of what's going on in LLVM development, and here we are. I'm very open to suggestions and will probably play a bit with the format and content over the next few weeks. I'd also be very grateful for any suggestions of things to mention or cover.

Subscribe to future issues at http://llvmweekly.org, and please pass it on to anyone else you think may be interested. Please send any tips or feedback to asb@asbradbury.org, or @llvmweekly or @asbradbury on Twitter.

News and articles from around the web

LLVM 3.4 was released. The release notes do a far better and more thorough job of summarising the key changes than I could, so I point you there for more information.

EuroLLVM 2014 has been announced. It will take place April 7th-8th in Edinburgh Scotland. Registration will open soon, now is the time to submit your proposals for talks, workshops, lightning talks or posters. The call for participation is at this mailing list post and the homepage for the event is here.

In a recent mailing list post I came across a link to this rather excellent article on mapping high-level constructions to LLVM IR by Mikael Lyngvig. The document is already in a good state, but Mikael is inviting review or contributions, particularly from those who implement frontends of higher level languages targetting LLVM IR.

Andrew Wilkins writes about recent changes to llgo, a Go frontend for LLVM.

DZone predicts the end of the GNU gcc era

Phoronix published a series of benchmarks comparing Clang 3.4 performance against GCC 4.9

On the mailing lists

LLVM commits

Warning: this is an opinionated, unscientific highlighting of certain LLVM commits. I may have missed your favourite change - apologies.

An initial ASM parser was added to the SPARC backend r198484. The backend also learned to handle atomics loads/stores r198286.

Various AVX512 (currently only available in Xeon Phi CPUs) intrinsics were added r198277, r198557

ARM: For compatibility with GNU as, aliases for old (deprecated) FP mnemonics were added r198172. Additionally, softvfp was added to the list of supported FPU names r198313

The LLVM mangler, used to determin the symbol name of a GlobalValue no longer requires linking with Target. This means the DataLayout now contains a specification for the name mangling behaviour. r198438

tryInstructionSplit() has been made less aggressive r198369

In the world of tablegen, a bug with the use of multiclass parameters was fixed r198348

A confusion between Value* identify and 'value' equivalence was corrected in BasicAA r198290

Clang commits

RecursiveASTVisitor and DataRecursiveASTVisitor learned to visit attributes r198224, r198249

ExpectAndConsume will diagnose more errors automatically r198270

The formatter gained an option to avoid splitting certain sorts of comments which have special meaning (e.g. pragmas) across multiple lines r198310. It can also format short enums on to a single line r198558

The VBTableBuilder class was moved from CodeGen to AST with the long-term goal of using it to compute virtual fuction table names r198380

CreateAnalysisConsumer is added to the static analyzer's public interface as a way to get at its ASTConsumer. r198426

Virtual base class table mangling is now more compatible with MSVC202+ r198462

The IdempotentOperations checker was killed as it has various known issues and nobody has come forwards to fix them. r198476

dump() function definitions are now only marked as used in debug builds. This will enable more stripping of dead code in release builds resulting in smaller filesize. r198489

Previously, clang could be tortured by providing a K and R style function declaration with a missing semicolon, e.g. void knrNoSemi(i) int i { } which would result in a long stream of errors covering the rest of the input file. It now recognises this error and presents a single error r198540.

Other project commits