Changes between Version 1 and Version 2 of Ticket #12550, comment 1
- Timestamp:
- 12/22/2019 07:47:23 PM (5 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Ticket #12550, comment 1
v1 v2 1 1 Non-comprehensive list of changes in this release: 2 {{{ 2 3 3 Two new extension points, namely EP_FullLinkTimeOptimizationEarly and EP_FullLinkTimeOptimizationLast are available for plugins to specialize the legacy pass manager full LTO pipeline. 4 4 5 llvm-objcopy/llvm-strip got support for COFF object files/executables, supporting the most common copying/stripping options. 6 5 7 The CMake parameter CLANG_ANALYZER_ENABLE_Z3_SOLVER has been replaced by LLVM_ENABLE_Z3_SOLVER. 6 8 The RISCV target is no longer “experimental” (see Changes to the RISCV Target below for more details). 9 7 10 The ORCv1 JIT API has been deprecated. Please see Transitioning from ORCv1 to ORCv2. 8 11 Support for target-independent hardware loops in IR has been added, with PowerPC and Arm implementations. 9 }}}10 12 11 13 Noteworthy optimizations: 12 {{{ 14 13 15 LLVM will now remove stores to constant memory (since this is a contradiction) under the assumption the code in question must be dead. This has proven to be problematic for some C/C++ code bases which expect to be able to cast away ‘const’. This is (and has always been) undefined behavior, but up until now had not been actively utilized for optimization purposes in this exact way. For more information, please see: bug 42763 and post commit discussion. 16 14 17 The optimizer will now convert calls to memcmp into a calls to bcmp in some circumstances. Users who are building freestanding code (not depending on the platform’s libc) without specifying -ffreestanding may need to either pass -fno-builtin-bcmp, or provide a bcmp function. 18 15 19 LLVM will now pattern match wide scalar values stored by a succession of narrow stores. 20 16 21 LLVM will now omit range checks for jump tables when lowering switches with unreachable default destination. 22 17 23 LLVM can now sink similar instructions to a common successor block also when the instructions have no uses, such as calls to void functions. 18 }}} 24 19 25 20 26 Changes to the LLVM IR: 21 27 22 {{{23 28 Added immarg parameter attribute. This indicates an intrinsic parameter is required to be a simple constant. This annotation must be accurate to avoid possible miscompiles. 24 The 2-field form of global variables @llvm.global_ctors and @llvm.global_dtors has been deleted. The third field of their element type is now mandatory. Specify i8* null to migrate from the obsoleted 2-field form. 29 30 The 2-field form of global variables @llvm.global_ctors and @llvm.global_dtors has been deleted. 31 The third field of their element type is now mandatory. Specify i8* null to migrate from the obsoleted 2-field form. 32 25 33 The byval attribute can now take a type parameter: byval(<ty>). If present it must be identical to the argument’s pointee type. In the next release we intend to make this parameter mandatory in preparation for opaque pointer types. 34 26 35 atomicrmw xchg now allows floating point types 36 27 37 atomicrmw now supports fadd and fsub 28 }}} 38 29 39 30 40 Changes to the X86 Target: