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 https://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
- Rafael EspĂndola removed support for the 's' modifier in a DataLayout specification in commit r198287 and so writes how to work around this if your out of tree target relied on that modifier.
-
Chandler Carruth asks a question about flags for instructions in .td files. From the answers, it seems like confusion can arise from the fact flags don't need to be listed explicitly if they are inferred from patterns. Hal Finkel suggests auditing the generated tablegen output directly.
-
Jon Pry has posted an RFC suggesting to change the datalayout for the Radeon R600 backend . The problem is that the r600 datalayout description currently claims native integer widths of 32 and 64 bit, but support for 64 bit arithmetic is actually limited to getelementptr-like load/store operations (although this point is debated in replies to the thread). The patch proposes to simply claim native 32 bit integer width only, though alternative solutions are proposed in thread responses.
-
Andrew Trick outlines an algorithm to estimate cycles taken on an out-of-order core.
-
Build bot fatigue is causing problems. In short the build bots are sending too many messages, and slow servers keep on sending messages for issues that were fixed already resulting in a low signal to noise ratio. There was a suggestion to move to the phased builder infrastructure as used by Apple. There were additional complaints from Alp about large numbers of emails from ARM buildbots about errors such as out of disk. Renato Golin responds explaining that due to the lack of commercial ARM server hardware they have to rely on development boards or consumer laptops, which may not be the most reliable under heavy load.
-
Snehasish Kumar asks about using DependenceAnalysis to find both loop-independent and loop-carried dependences, receiving some useful responses.
-
David Fang posts a summary of the current status of the PowerPC-Darwin ports. An extensively detailed status page is also available at http://www.csl.cornell.edu/~fang/sw/llvm/
-
Swarup Kumar Sahoo points to the current giri code in response to a question about how to trace every value and address used by a program.
-
Tim Northover provides a straight forward overview of what to do in order to disable loop unrolling and function inlining, and where the source to the relevant passes can be found
-
Michael Schlottke asks for advice about LibTools vs LibClang+Python for some C++ refactoring tasks. The mailing list is overwhelmingly in favour of using LibTooling, though it does have the downside that nobody has produced Python bindings to it yet.
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.