
LLVM 10.0 RC1 Released - htfy96
https://lists.llvm.org/pipermail/llvm-dev/2020-January/138806.html
======
htfy96
Release Notes can be found at "release notes" links on
[https://prereleases.llvm.org/10.0.0/#rc1](https://prereleases.llvm.org/10.0.0/#rc1).

A few highlights:

> llvm: -mprefer-vector-width=256 is now the default behavior skylake-avx512
> and later Intel CPUs. This tries to limit the use of 512-bit registers which
> can cause a decrease in CPU frequency on these CPUs.

This reminds me of all those "don't use AVX512" memes and a good explanation
is at [https://stackoverflow.com/questions/56852812/simd-
instructio...](https://stackoverflow.com/questions/56852812/simd-instructions-
lowering-cpu-frequency/56861355#56861355)

> llvm: 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.

A good resource for learning basics of ClangCFI:
[https://blog.trailofbits.com/2017/02/20/the-challenges-of-
de...](https://blog.trailofbits.com/2017/02/20/the-challenges-of-deploying-
security-mitigations/)

> clang/c++: Concepts support. Clang now supports C++2a Concepts under the
> -std=c++2a flag.

This finally landed and was considered one of the biggest features of C++23.
Visual Studio implemented it in 16.3 released last year:
[https://devblogs.microsoft.com/cppblog/c20-concepts-are-
here...](https://devblogs.microsoft.com/cppblog/c20-concepts-are-here-in-
visual-studio-2019-version-16-3/)

> clang now defaults to .init_array on Linux. It used to use .ctors if the
> found gcc installation is older than 4.7.0. Add -fno-use-init-array to get
> the old behavior (.ctors).

That's the pain of relying gcc toolchain in many components to keep backward
compatibility. I really wish there could be a "-fbehavior-model=v3" for these
kind of subtle changes.

