[LLVMdev] LLVM Weekly - #2, Jan 13th 2014

Alex Bradbury asb at asbradbury.org
Mon Jan 13 07:00:26 PST 2014


LLVM Weekly - #2, Jan 13th 2014
==============================

If you prefer, you can read a HTML version of this email at
<http://llvmweekly.org/issue/2>

Welcome to the second issue of LLVM Weekly, a weekly newsletter (published
every Monday) covering developments in LLVM, Clang, and related projects.
Thank you to everyone who has given positive feedback or suggestions, I'm
planning in future editions to integrate some sort of statistics of git
activity and contributions as well as activity on Bugzilla. 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.

## News and articles from around the web

Stephen Diehl has published a [Haskell adaptation of the 'Kaleidoscope'
tutorials](http://www.stephendiehl.com/llvm/) on how to implement aJIT
compiled language using LLVM. This was received very positively and prompted
some [discussion on HN](https://news.ycombinator.com/item?id=7031998).

Registration for EuroLLVM is [now open](http://llvm.org/devmtg/2014-04/).
There's still time to submit your talk, poster or workshop proposals too.

[Rust 0.9 has been
released](https://github.com/mozilla/rust/blob/0.9/RELEASES.txt). Rust is a
systems programming language which targetting LLVM with a particular emphasis
on type safety, memory safety and concurrency. One of the core Rust developers
at Mozilla, Niko Matsakis, also gave a [talk at linux.conf.au introducing
Rust](http://www.youtube.com/watch?v=gfCtbGiHcg0).

Coverity 7 [now includes Clang compiler
support](http://www.prnewswire.com/news-releases/coverity-unveils-new-version-of-development-testing-platform-239056251.html).

## On the mailing lists

* Apple are [advertising for
interns](http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-January/069169.html)
with their LLVM compiler frontend and runtime teams this summer. Note
internships are restricted to students.

* Amara Emerson shares a [proposal on handling the removal of the -mfpu option
for AArch64](article.gmane.org/gmane.comp.compilers.clang.devel/34199/). This
proposal aims to match gcc, where instead of `-mfpu` to specify FPU/NEON, the
same information will be passed using feature modifiers on `-march`. It was
pointed out that GCC also has `-mcpu` to complicate things. It's hoped
collaboration with the GCC devs will lead to a simplification that both can
use.

* Tobias Grosser has [set up some new machines tracking performance at
-O3](http://article.gmane.org/gmane.comp.compilers.llvm.devel/69264) using
[LNT](http://llvm.org/docs/lnt/), which is a framework used for performance
tracking of LLVM over time. Tobias is asking for someone to step in and
improve the LNT infrastructure to take advantage of this new data. LNT is
written in Python, using Flask and SQLAlchemy so this would be an ideal
project for someone interested in contributing to LLVM but perhaps doesn't
match the typical profile of the LLVM contributor.

* Timothy Baldridge asks whether [LLVM can inline external library functions
in a JITted
method](http://article.gmane.org/gmane.comp.compilers.llvm.devel/69219).
Replies point out that for the specific example given (memcpy), LLVM is
already able to inline. Kevin Modzelewski [describes a technique he's
used](http://article.gmane.org/gmane.comp.compilers.llvm.devel/69236).

* Rafael EspĂ­ndola announces a new milestone, all in-tree backends [now use
MCInst for printing
assembly](http://article.gmane.org/gmane.comp.compilers.llvm.devel/69369). Out
of tree targets will need to lower MachineInstr to MCInst to use the new
printer and the recent [conversion of the Sparc
backend](http://llvm-reviews.chandlerc.com/rL198030) to do this is probably as
good a guide as any.

* As part of the effort to use C++11 inside the LLVM codebase, Chandler
Carruth has asked anyone running build-bot to look at [upgrading to the new
baseline compiler
versions](http://article.gmane.org/gmane.comp.compilers.llvm.devel/69242).
These are MSVC 2012, GCC 4.7, or Clang 3.1.

* Jasper Neumann has been [working on switch lowering using
hashing](http://article.gmane.org/gmane.comp.compilers.llvm.devel/69383/) as
an alternative to using a jump table. He later [further elaborates on the
technique](http://article.gmane.org/gmane.comp.compilers.llvm.devel/69389/)
and points to an interesting looking paper, [Multiway Branch Code
Generation](http://ols.fedoraproject.org/GCC/Reprints-2008/sayle-reprint.pdf)
by Roger Anthony Sayle.

* Kevin Modzelewski is encountering [disappointing bitcode parsing
performance](http://article.gmane.org/gmane.comp.compilers.llvm.devel/69349),
in particular when debug info is present. The issue is not identified or
solved yet, I'm hoping to be able to point to an explanation of the problem in
next week's issue!

* Chandler Carruth suggests that the [interprocedual analysis passes be merged
in to the Analysis
library](http://article.gmane.org/gmane.comp.compilers.llvm.devel/69244).
Right now, various interprocedural analyses live in lib/Analysis/IPA and are
built as the LLVMipa library. Chris Lattner agrees so we can expect the merge
to happen in the not too distant future.

* Chandler Carruth has
[suggested](http://article.gmane.org/gmane.comp.compilers.llvm.devel/69392)
that the [LLVM coding
standards](http://www.llvm.org/docs/CodingStandards.html) be updated so that
namespaces are never indented, as opposed to the current confusing mixture.
Despite the fact that debating whitespace is a favourite pastime of most
programmers, the thread has been fairly uncontroversial thus far.

* Milian Wolff wonders about [using the clang C API to parse default
values](http://article.gmane.org/gmane.comp.compilers.clang.devel/34168).

* Renato Golin is working towards [adding various pragmas to
Clang](http://article.gmane.org/gmane.comp.compilers.clang.devel/34161) and is
seeking feedback on how to implement it. A few people on the mailing list
suggest it might be worth trying to instead implement these using [C++11
generalized
attributes](http://www.codesynthesis.com/~boris/blog/2012/04/18/cxx11-generalized-attributes/)
and perhaps enabling support for the syntax in C99.

* The `__has_attribute` feature macro is commonly used to detect support for a
particular attribute in the compiler. Aaron Ballman [suggests extending
it](http://article.gmane.org/gmane.comp.compilers.clang.scm/90321) so you can
test for the precise form of attribute syntax you are after.

## LLVM commits

* The Sparc ASM parser has seen further development, learning to parse branch
instructions, conditional moves, and floating point instructions and more. It
also gained an initial disassembler implementation.
[r198738](http://llvm-reviews.chandlerc.com/rL198738),
[r199033](http://llvm-reviews.chandlerc.com/rL199033),
[r198591](http://llvm-reviews.chandlerc.com/rL198591)

* In SimplifyCFG will now understand that when building a lookup table for a
switch with no holes that it doesn't need a default result. According to the
commit message, this saves 164KB off the clang binary in a bootstrap build.
[r199025](http://llvm-reviews.chandlerc.com/rL199025)

* The new pass manager saw further developments.
[r198998](http://llvm-reviews.chandlerc.com/rL198998) and many others
(prefixed with `[PM]` in the commit logs)

* The SampleProfile pass saw further development. Profile samples are
propagated through the CFG, heuristically converting instruction samples to
branch weights. Work was done to extend and simplify the format of sample
profile input files. [r198972](http://llvm-reviews.chandlerc.com/rL198972),
[r198973](http://llvm-reviews.chandlerc.com/rL198973)

* The LoopVectorizer can use versioning for strided memory access.
[r198950](http://llvm-reviews.chandlerc.com/rL198950)

* In DataLayout, 'w' is now used rather than 'c' for win32 name mangling.
[r198938](http://llvm-reviews.chandlerc.com/rL198938)

* The LLVM developer policy was updated to more clearly spell out how to
submit patches to the project.
[r198901](http://llvm-reviews.chandlerc.com/rL198901)

* WriteAsOperand has been killed in favour of the the printAsOperand method.
[r198836](http://llvm-reviews.chandlerc.com/rL198836)

* The x86 backend learned some more AVX-512 instrinsics.
[r198745](http://llvm-reviews.chandlerc.com/rL198745)

## Clang commits

* Support for the `enable_if` attribute was added. This can be placed on
function declarations to control which overload is selected based on the
values of the function's arguments. See the commitdiff (particularly the docs
change) for more info. [r198996](http://llvm-reviews.chandlerc.com/rL198996)

* More work on MS VC++ ABI compatibility was committed.
[r198907](http://llvm-reviews.chandlerc.com/rL198907),
[r198975](http://llvm-reviews.chandlerc.com/rL198975),
[r198977](http://llvm-reviews.chandlerc.com/rL198977),
[r198900](http://llvm-reviews.chandlerc.com/rL198900) and more.

* `__has_attribute` now understands target-specific attributes.
[r198897](http://llvm-reviews.chandlerc.com/rL198897)

* The clang plugin infrastructure is now covered by at least some tests.
[r198747](http://llvm-reviews.chandlerc.com/rL198747)

* The documentation on clang internals was updated with more up to date
information on adding new attributes.
[r198705](http://llvm-reviews.chandlerc.com/rL198705)

* An initial instrumentation-based profile guided optimisation implementation
landed. [r198640](http://llvm-reviews.chandlerc.com/rL198640)




More information about the llvm-dev mailing list