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:
RevisionActionfile
1.52modifypkgsrc/lang/llvm/Makefile
1.15modifypkgsrc/lang/llvm/PLIST
1.26modifypkgsrc/lang/llvm/distinfo
1.2modifypkgsrc/lang/llvm/version.mk
1.6modifypkgsrc/lang/llvm/patches/patch-cmake_modules_AddLLVM.cmake
1.2modifypkgsrc/lang/llvm/patches/patch-cmake_modules_CheckAtomic.cmake