Changes between Version 1 and Version 2 of Ticket #12550, comment 1


Ignore:
Timestamp:
12/22/2019 07:47:23 PM (4 years ago)
Author:
Bruce Dubbs

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #12550, comment 1

    v1 v2  
    11Non-comprehensive list of changes in this release:
    2 {{{
     2
    33Two new extension points, namely EP_FullLinkTimeOptimizationEarly and EP_FullLinkTimeOptimizationLast are available for plugins to specialize the legacy pass manager full LTO pipeline.
     4
    45llvm-objcopy/llvm-strip got support for COFF object files/executables, supporting the most common copying/stripping options.
     6
    57The CMake parameter CLANG_ANALYZER_ENABLE_Z3_SOLVER has been replaced by LLVM_ENABLE_Z3_SOLVER.
    68The RISCV target is no longer “experimental” (see Changes to the RISCV Target below for more details).
     9
    710The ORCv1 JIT API has been deprecated. Please see Transitioning from ORCv1 to ORCv2.
    811Support for target-independent hardware loops in IR has been added, with PowerPC and Arm implementations.
    9 }}}
    1012
    1113Noteworthy optimizations:
    12 {{{
     14
    1315LLVM 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
    1417The 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
    1519LLVM will now pattern match wide scalar values stored by a succession of narrow stores.
     20
    1621LLVM will now omit range checks for jump tables when lowering switches with unreachable default destination.
     22
    1723LLVM 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
    1925
    2026Changes to the LLVM IR:
    2127
    22 {{{
    2328Added 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
     30The 2-field form of global variables @llvm.global_ctors and @llvm.global_dtors has been deleted.
     31The third field of their element type is now mandatory. Specify i8* null to migrate from the obsoleted 2-field form.
     32
    2533The 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
    2635atomicrmw xchg now allows floating point types
     36
    2737atomicrmw now supports fadd and fsub
    28 }}}
     38
    2939
    3040Changes to the X86 Target: