Path to this page:
Subject: CVS commit: pkgsrc/lang/llvm
From: Adam Ciarcinski
Date: 2020-04-18 09:50:18
Message id: 20200418075018.C4285FB27@cvs.NetBSD.org
Log Message:
llvm: updated to 10.0.0
Non-comprehensive list of changes in this release
The ISD::FP_ROUND_INREG opcode and related code was removed from SelectionDAG.
Enabled MemorySSA as a loop dependency. Since r370957 (D58311 [MemorySSA & \
LoopPassManager] Enable MemorySSA as loop dependency. Update tests.), the \
MemorySSA analysis is being preserved and used by a series of loop passes. The \
most significant use is in LICM, where the instruction hoisting and sinking \
relies on aliasing information provided by MemorySSA vs previously creating an \
AliasSetTracker. The LICM step of promoting variables to scalars still relies on \
the creation of an AliasSetTracker, but its use is reduced to only be enabled \
for loops with a small number of overall memory instructions. This choice was \
motivated by experimental results showing compile and run time benefits or \
replacing the AliasSetTracker usage with MemorySSA without any performance \
penalties. The fact that MemorySSA is now preserved by and available in a series \
of loop passes, also opens up opportunities for its use in those respective \
passes.
The BasicBlockPass, BBPassManager and all their uses were deleted in this revision.
The LLVM_BUILD_LLVM_DYLIB and LLVM_LINK_LLVM_DYLIB CMake options are no longer \
available on Windows.
As per LLVM Language Reference Manual, getelementptr inbounds can not change the \
null status of a pointer, meaning it can not produce non-null pointer given null \
base pointer, and likewise given non-null base pointer it can not produce null \
pointer; if it does, the result is a poison value. Since r369789 (D66608 \
[InstCombine] icmp eq/ne (gep inbounds P, Idx..), null -> icmp eq/ne P, null) \
LLVM uses that for transformations. If the original source violates these \
requirements this may result in code being miscompiled. If you are using Clang \
front-end, Undefined Behaviour Sanitizer -fsanitize=pointer-overflow check will \
now catch such cases.
Windows Control Flow Guard: the -cfguard option now emits CFG checks on indirect \
function calls. The previous behavior is still available with the \
-cfguard-nochecks option. Note that this feature should always be used with \
optimizations enabled.
Callbacks have been added to CommandLine Options. These can be used to validate \
or selectively enable other options.
The function attributes no-frame-pointer-elim and no-frame-pointer-elim-non-leaf \
have been replaced by frame-pointer, which has 3 values: none, non-leaf, and \
all. The values mean what functions should retain frame pointers.
The inter-procedural analysis and optimization capabilities in the Attributor \
framework and pass have been substantially advanced (initial commit D59918, \
LLVM-Dev talk). In this release, 19 different attributes are inferred, including \
12 LLVM IR attributes and 7 “abstract” attributes, such as liveness. The \
Attributor is still under heavy development and disabled by default; to enable \
an early run pass -mllvm -attributor-disable=false to an invocation of clang.
New matrix math intrinsics have been added to LLVM (see LLVM Language Reference \
Manual), together with the LowerMatrixIntrinsics pass. The pass lowers matrix \
intrinsics to a set of efficient vector instructions. The lowering pass is off \
by default and can be enabled by passing -mllvm -enable-matrix to an invocation \
of clang.
Files: