[LLVMdev] LLVM Weekly - #1, Jan 6th 2014

Alex Bradbury asb at asbradbury.org
Mon Jan 6 14:49:04 PST 2014

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 at asbradbury.org>, or @llvmweekly or @asbradbury on Twitter.

Find the HTML version of this issue at http://llvmweekly.org/issue/1

## News and articles from around the web

LLVM 3.4 was released <http://llvm.org/releases/3.4/docs/ReleaseNotes.html>.
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
<http://article.gmane.org/gmane.comp.compilers.llvm.devel/69221> and the
homepage for the event is at <http://llvm.org/devmtg/2014-04/>.

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](http://llvm-reviews.chandlerc.com/rL198287)
and so writes how to work around this if your out of tree target relied on
that modifier <http://article.gmane.org/gmane.comp.compilers.llvm.devel/69143>

* Chandler Carruth asks a question about flags for instructions in .td files
<http://thread.gmane.org/gmane.comp.compilers.llvm.devel/69118>. 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 <http://thread.gmane.org/gmane.comp.compilers.llvm.devel/69130>.
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

* Andrew Trick outlines an algorithm to estimate cycles taken on an
out-of-order core

* Build bot fatigue
<http://thread.gmane.org/gmane.comp.compilers.llvm.devel/69103> 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 <http://article.gmane.org/gmane.comp.compilers.llvm.devel/69200>.
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. <http://article.gmane.org/gmane.comp.compilers.llvm.devel/69094>

* David Fang posts a summary of the current status of the PowerPC-Darwin ports
<http://article.gmane.org/gmane.comp.compilers.llvm.devel/69196>. An
extensively detailed status page is also available at

* Swarup Kumar Sahoo points to the current giri code
<https://github.com/liuml07/giri> 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.
<http://article.gmane.org/gmane.comp.compilers.clang.devel/34050> 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
<http://llvm-reviews.chandlerc.com/rL198484>. The backend also learned to
handle atomics loads/stores <http://llvm-reviews.chandlerc.com/rL198286>.

* Various AVX512 (currently only available in Xeon Phi CPUs) intrinsics were
added <http://llvm-reviews.chandlerc.com/rL198277>,

* ARM: For compatibility with GNU as, aliases for old (deprecated) FP
mnemonics were added <http://llvm-reviews.chandlerc.com/rL198172>.
Additionally, softvfp was added to the list of supported FPU names

* 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.

* tryInstructionSplit() has been made less aggressive

* In the world of tablegen, a bug with the use of multiclass parameters was
fixed <http://llvm-reviews.chandlerc.com/rL198348>

* A confusion between `Value*` identify and 'value' equivalence was corrected
in BasicAA <http://llvm-reviews.chandlerc.com/rL198290>

## Clang commits

* RecursiveASTVisitor and DataRecursiveASTVisitor learned to visit attributes

* ExpectAndConsume will diagnose more errors automatically

* The formatter gained an option to avoid splitting certain sorts of comments
which have special meaning (e.g. pragmas) across multiple lines
<http://llvm-reviews.chandlerc.com/rL198310>. It can also format short enums
on to a single line <http://llvm-reviews.chandlerc.com/rL198558>

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

* CreateAnalysisConsumer is added to the static analyzer's public interface as
a way to get at its ASTConsumer. <http://llvm-reviews.chandlerc.com/rL198426>

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

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

* `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. <http://llvm-reviews.chandlerc.com/rL198489>

* 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

## Other project commits

* Building libclc with LLVM 3.5 was fixed

* In libcxx, the clz/ctz family of functions are now implemented for when
building with Visual C++ on Win32 or Win64.

* The PollyCananicalizePass was introduced. This is a ModulePass that
schedules the Polly canonicalization passes.

More information about the llvm-dev mailing list