The minimum compiler version required for building LLVM has been raised to 4.8 for GCC and 2015 for Visual Studio.
The C API functions LLVMAddFunctionAttr, LLVMGetFunctionAttr, LLVMRemoveFunctionAttr, LLVMAddAttribute, LLVMRemoveAttribute, LLVMGetAttribute, LLVMAddInstrAttribute and LLVMRemoveInstrAttribute have been removed.
The C API enum LLVMAttribute has been deleted.
The definition and uses of LLVM_ATRIBUTE_UNUSED_RESULT in the LLVM source were replaced with LLVM_NODISCARD, which matches the C++17 [[nodiscard]] semantics rather than gcc’s __attribute__((warn_unused_result)).
The Timer related APIs now expect a Name and Description. When upgrading code the previously used names should become descriptions and a short name in the style of a programming language identifier should be added.
LLVM now handles invariant.group across different basic blocks, which makes it possible to devirtualize virtual calls inside loops.
The aggressive dead code elimination phase (“adce”) now removes branches which do not effect program behavior. Loops are retained by default since they may be infinite but these can also be removed with LLVM option -adce-remove-loops when the loop body otherwise has no live operations.
The llvm-cov tool can now export coverage data as json. Its html output mode has also improved.
The LLVMContext gains a new runtime check (see LLVMContext::discardValueNames()) that can be set to discard Value names (other than GlobalValue). This is intended to be used in release builds by clients that are interested in saving CPU/memory as much as possible.
There is no longer a “global context” available in LLVM, except for the C API.
The autoconf build system has been removed in favor of CMake. LLVM 3.9 requires CMake 3.4.3 or later to build. For information about using CMake please see the documentation on Building LLVM with CMake. For information about the CMake language there is also a CMake Primer document available.
C API functions LLVMParseBitcode, LLVMParseBitcodeInContext, LLVMGetBitcodeModuleInContext and LLVMGetBitcodeModule having been removed. LLVMGetTargetMachineData has been removed (use LLVMGetDataLayout instead).
The C API function LLVMLinkModules has been removed.
The C API function LLVMAddTargetData has been removed.
The C API function LLVMGetDataLayout is deprecated in favor of LLVMGetDataLayoutStr.
The C API enum LLVMAttribute and associated API is deprecated in favor of the new LLVMAttributeRef API. The deprecated functions are LLVMAddFunctionAttr, LLVMAddTargetDependentFunctionAttr, LLVMRemoveFunctionAttr, LLVMGetFunctionAttr, LLVMAddAttribute, LLVMRemoveAttribute, LLVMGetAttribute, LLVMAddInstrAttribute, LLVMRemoveInstrAttribute and LLVMSetInstrParamAlignment.
TargetFrameLowering::eliminateCallFramePseudoInstr now returns an iterator to the next instruction instead of void. Targets that previously did MBB.erase(I); return; now probably want return MBB.erase(I);.
SelectionDAGISel::Select now returns void. Out-of-tree targets will need to be updated to replace the argument node and remove any dead nodes in cases where they currently return an SDNode * from this interface.
Added the MemorySSA analysis, which hopes to replace MemoryDependenceAnalysis. It should provide higher-quality results than MemDep, and be algorithmically faster than MemDep. Currently, GVNHoist (which is off by default) makes use of MemorySSA.
The minimum density for lowering switches with jump tables has been reduced from 40% to 10% for functions which are not marked optsize (that is, compiled with -Os).
* Drop CppBackend. It is removed.
Changelog:
* GCC ABI Tag
* LLVM IR: new intrinsics etc.
* Change LLVM IPO model
* Support ThinLTO
* Improve the ARM targets, ARMv8.2-A support etc.
* Improve the MIPS targets
* Improve the PowerPC target, default optim O3 to O2
* Improve the X86 target, SKylake AVX-512 etc.
* Improve the AMDGPU, better support for Mesa 12
Packaged in pkgsrc-wip by myself and Kamil.
Remove stale pkgsrc/SunOS bread crumbs that were difficult to merge
following the build framework switch. Needs to be redone. (Sorry!)
Summary of significant changes in LLVM:
- switch build framework from autoconf to CMake
- llvm-ar now supports thin archives.
- llvm doesn t produce .data.rel.ro.local or .data.rel sections anymore.
- opional support for linking clang and the LLVM tools with a single
libLLVM shared library
pkgsrc note: we have this library in lang/libLLVM, but we don't currently
use it. We may do so in the future if/when the API matures.
- The optimization to move the prologue and epilogue of functions in colder
code path (shrink-wrapping) is now enabled by default
- new target-independent gcc-compatible emulated Thread Local Storage mode
- various target specific optimizations
Summary of significant changes in Clang:
- new compiler flags for tuning what DWARF information is included
- better strict alignment handling
- better support for __builtin_object_size
Changelog:
Major changes in 3.7.1
======================
* 3.7.0 was released with an inadvertent change to the signature of the C
API function: LLVMBuildLandingPad, which made the C API incompatible with
prior releases. This has been corrected in LLVM 3.7.1.
As a result of this change, 3.7.0 is not ABI compatible with 3.7.1.
+----------------------------------------------------------------------------+
| History of the LLVMBuildLandingPad() function |
+===========================+================================================+
| 3.6.2 and prior releases | LLVMBuildLandingPad(LLVMBuilderRef, |
| | LLVMTypeRef, |
| | LLVMValueRef, |
| | unsigned, const char*) |
+---------------------------+------------------------------------------------+
| 3.7.0 | LLVMBuildLandingPad(LLVMBuilderRef, |
| | LLVMTypeRef, |
| | unsigned, const char*) |
+---------------------------+------------------------------------------------+
| 3.7.1 and future releases | LLVMBuildLandingPad(LLVMBuilderRef, |
| | LLVMTypeRef, |
| | LLVMValueRef, |
| | unsigned, const char*) |
+---------------------------+------------------------------------------------+
Compacted version of upstream's release notes:
The LLVM C API LLVMGetTargetMachineData is deprecated
DataLayout is no longer optional
Comdats are now ortogonal to the linkage
On ELF now supports multiple sections with the same name and comdat
LLVM now lazily loads metadata in some cases
Creating archives with IR files with debug info is now 25X faster
llvm-ar(1) can create archives in the BSD format used by OS X
LLVM received a backend for the extended Berkely Packet Filter instruction set
The BPF target is now available by default
Switch-case lowering was rewritten to avoid generating unbalanced search trees
The debug info IR class hierarchy now inherits from Metadata
Argument-less TargetMachine::getSubtarget has been removed from the tree
* Support for AuroraUX has been removed.
* Added support for a native object file-based bitcode wrapper format.
* Added support for MSVC’s __vectorcall calling convention as x86_vectorcallcc.
* Prefix data rework
* Metadata is not a Value
* Alias syntax change
* The old JIT has been removed
* object::Binary doesn’t own the file buffer
* IR in object files is now supported
* The gold plugin has been rewritten
when linking a shared library out of .a files.
This is what other packages that use -Wl,--whole-archive seem to do.
This works with and without cwrappers.
XXX someone please apply similar fixes for Darwin and SunOS if necessary
Background:
LLVM 3.6 upstream added support for being a native toolchain on NetBSD.
This changed the default C++ runtime library from libstdc++ to libc++.
Patch this in pkgsrc's clang so we continue to use libstdc++ (for now)
Proper support for libc++ should be added later (perhaps w/ PKG_OPTIONs).
Thanks to Joerg for explaining the problem.
I will spin this off to a libLLVM package when we have a ready use case for it.
Packages that may want to use libLLVM are for example MesaLib and OpenJDK.
Non-comprehensive list of changes in this release:
- Support for AuroraUX has been removed.
- Added support for a native object file-based bitcode wrapper format.
- Added support for MSVC?s __vectorcall calling convention as x86_vectorcallcc.
All backends have been changed to use the MC asm printer and support for the non MC one has been removed.
Clang can now successfully self-host itself on Linux/Sparc64 and on FreeBSD/Sparc64.
LLVM now assumes the assembler supports .loc for generating debug line numbers. The old support for printing the debug line info directly was only used by llc and has been removed.
All inline assembly is parsed by the integrated assembler when it is enabled. Previously this was only the case for object-file output. It is now the case for assembly output as well. The integrated assembler can be disabled with the -no-integrated-as option.
llvm-ar now handles IR files like regular object files. In particular, a regular symbol table is created for symbols defined in IR files, including those in file scope inline assembly.
LLVM now always uses cfi directives for producing most stack unwinding information.
The prefix for loop vectorizer hint metadata has been changed from llvm.vectorizer to llvm.loop.vectorize. In addition, llvm.vectorizer.unroll metadata has been renamed llvm.loop.interleave.count.
Some backends previously implemented Atomic NAND(x,y) as x & ~y. Now all backends implement it as ~(x & y), matching the semantics of GCC 4.4 and later.
All backends have been changed to use the MC asm printer and support for the non MC one has been removed.
Clang can now successfully self-host itself on Linux/Sparc64 and on FreeBSD/Sparc64.
LLVM now assumes the assembler supports .loc for generating debug line numbers. The old support for printing the debug line info directly was only used by llc and has been removed.
All inline assembly is parsed by the integrated assembler when it is enabled. Previously this was only the case for object-file output. It is now the case for assembly output as well. The integrated assembler can be disabled with the -no-integrated-as option.
llvm-ar now handles IR files like regular object files. In particular, a regular symbol table is created for symbols defined in IR files, including those in file scope inline assembly.
LLVM now always uses cfi directives for producing most stack unwinding information.
The prefix for loop vectorizer hint metadata has been changed from llvm.vectorizer to llvm.loop.vectorize. In addition, llvm.vectorizer.unroll metadata has been renamed llvm.loop.interleave.count.
Some backends previously implemented Atomic NAND(x,y) as x & ~y. Now all backends implement it as ~(x & y), matching the semantics of GCC 4.4 and later.