Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

#12550 closed enhancement (fixed)

llvm-9.0.1

Reported by: Xi Ruoyao Owned by: blfs-book
Priority: normal Milestone: 9.1
Component: BOOK Version: SVN
Severity: normal Keywords:
Cc:

Description

Change History (15)

comment:1 by Xi Ruoyao, 4 years ago

Non-comprehensive list of changes in this release:

Two new extension points, namely EP_FullLinkTimeOptimizationEarly and EP_FullLinkTimeOptimizationLast are available for plugins to specialize the legacy pass manager full LTO pipeline.

llvm-objcopy/llvm-strip got support for COFF object files/executables, supporting the most common copying/stripping options.

The CMake parameter CLANG_ANALYZER_ENABLE_Z3_SOLVER has been replaced by LLVM_ENABLE_Z3_SOLVER. The RISCV target is no longer “experimental” (see Changes to the RISCV Target below for more details).

The ORCv1 JIT API has been deprecated. Please see Transitioning from ORCv1 to ORCv2. Support for target-independent hardware loops in IR has been added, with PowerPC and Arm implementations.

Noteworthy optimizations:

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.

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.

LLVM will now pattern match wide scalar values stored by a succession of narrow stores.

LLVM will now omit range checks for jump tables when lowering switches with unreachable default destination.

LLVM can now sink similar instructions to a common successor block also when the instructions have no uses, such as calls to void functions.

Changes to the LLVM IR:

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.

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.

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.

atomicrmw xchg now allows floating point types

atomicrmw now supports fadd and fsub

Changes to the X86 Target:

Fixed a bug in generating DWARF unwind information for 32 bit MinGW

Changes to the AMDGPU Target:

Function call support is now enabled by default
Improved support for 96-bit loads and stores
DPP combiner pass is now enabled by default
Support for gfx10

I think other sections of the release note are irrelevant with LFS/BLFS.

Last edited 4 years ago by Bruce Dubbs (previous) (diff)

comment:2 by Douglas R. Reno, 4 years ago

For whoever does this ticket:

Known Issues

These are issues that couldn’t be fixed before the release. See the bug reports for the latest status.

  • PR40547 Clang gets miscompiled by GCC 9.

Clang gets miscompiled by GCC 9. A patch is available here:

https://bugs.llvm.org/attachment.cgi?id=22516

With some discussion here:

https://bugs.llvm.org/show_bug.cgi?id=40547

Last edited 4 years ago by Bruce Dubbs (previous) (diff)

in reply to:  2 comment:3 by Xi Ruoyao, 4 years ago

Replying to renodr:

https://bugs.llvm.org/show_bug.cgi?id=40547

It seems the test failures are from the targets BLFS doesn't use. But anyway it's an uninitialized usage so we should add the patch (or wait for 9.0.1).

comment:4 by Bruce Dubbs, 4 years ago

Lets give it a couple of weeks to see if upstream makes another release by then.

comment:5 by Xi Ruoyao, 4 years ago

For whoever does the ticket: rustc needs a patch to be built with LLVM-9.

https://github.com/rust-lang/rust/pull/62474

in reply to:  4 comment:6 by ken@…, 4 years ago

Replying to bdubbs:

Lets give it a couple of weeks to see if upstream makes another release by then.

The patch has now been upstreamed, but based on the fairly-recent problem when compiling llvm with gcc (incompatible ABI?) llvm will be slow to make a point release (although I don't say that gcc would make a point release for only something like this).

in reply to:  5 comment:7 by ken@…, 4 years ago

Replying to xry111:

For whoever does the ticket: rustc needs a patch to be built with LLVM-9.

https://github.com/rust-lang/rust/pull/62474

Thanks. So if this goes in to enable rustc-1.38.0 we'll need to put both in at the same time.

comment:8 by ken@…, 4 years ago

Owner: changed from blfs-book to ken@…
Status: newassigned

I'll do some experimental evaluation over the next days, to see if patched llvm-9.0.0 builds ok, and allows rustc-1.38.0 to build, and if that can build current cbindgen, firefox-release, firefox-beta, rsvg, thunderbird. Taking the ticket, but I'm not yet saying that I'll commit these newer versions :)

comment:9 by ken@…, 4 years ago

Owner: changed from ken@… to blfs-book
Status: assignednew

I was overly pessimistic about needing llvm-9.0.0 for rustc-1.38.0, it merely ships with 9.0.0.

Builds ok on llvm-8.0.1 and is good enough for cbindgen, librsvg, firefox-70b10. However thunderbird-68.1.1 FTBFS (but is ok with rustc-1.37.0) :

 6:20.66 error[E0506]: cannot assign to `self.input.cached_token` because it is borrowed

Giving the ticket back, I'll put 1.37.0 into the book for firefox-70 (after further testing, and assuming it can still build current firefox).

comment:10 by Bruce Dubbs, 4 years ago

Milestone: 9.1hold
Summary: llvm-9.0.0llvm-9.0.0 (Hold for next version)

comment:11 by Xi Ruoyao, 4 years ago

Milestone: hold9.1
Summary: llvm-9.0.0 (Hold for next version)llvm-9.0.1

comment:12 by Bruce Dubbs, 4 years ago

The cfe-<version>.src.tar.xz tarball is now clang-9.0.1.src.tar.xz.

The patch referenced above in Comment 2 above has been incorporated in clang-9.0.1.

comment:13 by Bruce Dubbs, 4 years ago

No release notes for version 9.0.1, but the 9.0.0 notes are at:

http://releases.llvm.org/9.0.0/tools/clang/docs/ReleaseNotes.html

comment:14 by Bruce Dubbs, 4 years ago

Resolution: fixed
Status: newclosed

Fixed at revision 22502.

comment:15 by Douglas R. Reno, 4 years ago

As Pierre pointed out on the blfs-dev list, LLVM 9.0.1 seems to break rustc

Note: See TracTickets for help on using tickets.