LLVM 3.3 Achieves Full C++11 Compliance
The latest release of the LLVM project brings forth a host of new features, including full C++11 compiler support developed through the Clang sub-project. Foremost among the new features is support for several new CPU architectures, including AArch64 (64-bit ARM), AMD’s R600 GPU, IBM’s z/Architecture (s390x), and several improvements to the MIPS and PowerPC targets.
LLVM has two vectorizers: loop and freshly added SLP. For 3.3, the loop vectorizer benefits from several improvements to generate better code and is enabled by default when the –O3 flag is used. Some of the new additions include runtime checks of pointers, reverse iterators, and If conversion. The SLP vectorizer (superword-level parallelism) combines “similar independent instructions into vector instructions”. SLP vectorizer is enabled with the flag “-fslp-vectorize”.
Dragon Egg is a sub-project of LLVM which brings LLVM technology to GCC. DragonEgg replaces the optimizer’s and code generators in GCC with its own. Notable LLVM 3.3 improvements are support for gcc-4.8.1+, and better debug info. LLDB, the Low Level Debugger, adds several Linux features:
- Support for watchpoints
- vim integration for lldb commands and program status using a vim plug-in
- Improved register support including vector registers
- Builds with cmake/ninja/auto-tools/clang 3.3/gcc 4.6
Developers using C++11 (or those considering it for use with an existing code base) can explore LLVM’s C++11 migration tool, cpp11-migrate. As noted on the LLVM blog, “The purpose of the C++11 Migrator is to do source-to-source translation to migrate existing C++ code to use C++11 features to enhance maintainability, readability, runtime performance, and compile-time performance.”
LLVM 3.3 is distributed in a variety of formats, including source and pre-built binaries. Users of Linux, FreeBSD, and Mac OS X may download an installer from the project directly. Alternatively check with your operating system’s distribution or compile from source. The LLVM team provides detailed instructions on how the compilation can be done.
Ben Linders May 28, 2015