Update the minimum external LLVM to 17

This commit is contained in:
Josh Stone 2024-03-15 18:43:19 -07:00
parent 35dfc67d94
commit 29430554f6
16 changed files with 20 additions and 168 deletions

View File

@ -58,7 +58,7 @@ jobs:
- name: mingw-check-tidy - name: mingw-check-tidy
os: ubuntu-20.04-4core-16gb os: ubuntu-20.04-4core-16gb
env: {} env: {}
- name: x86_64-gnu-llvm-16 - name: x86_64-gnu-llvm-17
env: env:
ENABLE_GCC_CODEGEN: "1" ENABLE_GCC_CODEGEN: "1"
os: ubuntu-20.04-16core-64gb os: ubuntu-20.04-16core-64gb
@ -323,10 +323,6 @@ jobs:
env: env:
RUST_BACKTRACE: 1 RUST_BACKTRACE: 1
os: ubuntu-20.04-8core-32gb os: ubuntu-20.04-8core-32gb
- name: x86_64-gnu-llvm-16
env:
RUST_BACKTRACE: 1
os: ubuntu-20.04-8core-32gb
- name: x86_64-gnu-nopt - name: x86_64-gnu-nopt
os: ubuntu-20.04-4core-16gb os: ubuntu-20.04-4core-16gb
env: {} env: {}

View File

@ -126,17 +126,6 @@ pub unsafe fn create_module<'ll>(
let mut target_data_layout = sess.target.data_layout.to_string(); let mut target_data_layout = sess.target.data_layout.to_string();
let llvm_version = llvm_util::get_version(); let llvm_version = llvm_util::get_version();
if llvm_version < (17, 0, 0) {
if sess.target.arch.starts_with("powerpc") {
// LLVM 17 specifies function pointer alignment for ppc:
// https://reviews.llvm.org/D147016
target_data_layout = target_data_layout
.replace("-Fn32", "")
.replace("-Fi32", "")
.replace("-Fn64", "")
.replace("-Fi64", "");
}
}
if llvm_version < (18, 0, 0) { if llvm_version < (18, 0, 0) {
if sess.target.arch == "x86" || sess.target.arch == "x86_64" { if sess.target.arch == "x86" || sess.target.arch == "x86_64" {
// LLVM 18 adjusts i128 to be 128-bit aligned on x86 variants. // LLVM 18 adjusts i128 to be 128-bit aligned on x86 variants.

View File

@ -24,9 +24,7 @@
#include "llvm/Passes/StandardInstrumentations.h" #include "llvm/Passes/StandardInstrumentations.h"
#include "llvm/Support/CBindingWrapping.h" #include "llvm/Support/CBindingWrapping.h"
#include "llvm/Support/FileSystem.h" #include "llvm/Support/FileSystem.h"
#if LLVM_VERSION_GE(17, 0)
#include "llvm/Support/VirtualFileSystem.h" #include "llvm/Support/VirtualFileSystem.h"
#endif
#include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetMachine.h"
#include "llvm/Transforms/IPO/AlwaysInliner.h" #include "llvm/Transforms/IPO/AlwaysInliner.h"
#include "llvm/Transforms/IPO/FunctionImport.h" #include "llvm/Transforms/IPO/FunctionImport.h"
@ -334,14 +332,8 @@ extern "C" void LLVMRustPrintTargetCPUs(LLVMTargetMachineRef TM,
std::ostringstream Buf; std::ostringstream Buf;
#if LLVM_VERSION_GE(17, 0)
const MCSubtargetInfo *MCInfo = Target->getMCSubtargetInfo(); const MCSubtargetInfo *MCInfo = Target->getMCSubtargetInfo();
const ArrayRef<SubtargetSubTypeKV> CPUTable = MCInfo->getAllProcessorDescriptions(); const ArrayRef<SubtargetSubTypeKV> CPUTable = MCInfo->getAllProcessorDescriptions();
#else
Buf << "Full target CPU help is not supported by this LLVM version.\n\n";
SubtargetSubTypeKV TargetCPUKV = { TargetCPU, {{}}, {{}} };
const ArrayRef<SubtargetSubTypeKV> CPUTable = TargetCPUKV;
#endif
unsigned MaxCPULen = getLongestEntryLength(CPUTable); unsigned MaxCPULen = getLongestEntryLength(CPUTable);
Buf << "Available CPUs for this target:\n"; Buf << "Available CPUs for this target:\n";
@ -476,10 +468,6 @@ extern "C" LLVMTargetMachineRef LLVMRustCreateTargetMachine(
Options.RelaxELFRelocations = RelaxELFRelocations; Options.RelaxELFRelocations = RelaxELFRelocations;
#endif #endif
Options.UseInitArray = UseInitArray; Options.UseInitArray = UseInitArray;
#if LLVM_VERSION_LT(17, 0)
Options.ExplicitEmulatedTLS = true;
#endif
Options.EmulatedTLS = UseEmulatedTls; Options.EmulatedTLS = UseEmulatedTls;
if (TrapUnreachable) { if (TrapUnreachable) {
@ -761,16 +749,10 @@ LLVMRustOptimize(
} }
std::optional<PGOOptions> PGOOpt; std::optional<PGOOptions> PGOOpt;
#if LLVM_VERSION_GE(17, 0)
auto FS = vfs::getRealFileSystem(); auto FS = vfs::getRealFileSystem();
#endif
if (PGOGenPath) { if (PGOGenPath) {
assert(!PGOUsePath && !PGOSampleUsePath); assert(!PGOUsePath && !PGOSampleUsePath);
PGOOpt = PGOOptions(PGOGenPath, "", "", PGOOpt = PGOOptions(PGOGenPath, "", "", "", FS,
#if LLVM_VERSION_GE(17, 0)
"",
FS,
#endif
PGOOptions::IRInstr, PGOOptions::NoCSAction, PGOOptions::IRInstr, PGOOptions::NoCSAction,
#if LLVM_VERSION_GE(19, 0) #if LLVM_VERSION_GE(19, 0)
PGOOptions::ColdFuncOpt::Default, PGOOptions::ColdFuncOpt::Default,
@ -778,33 +760,21 @@ LLVMRustOptimize(
DebugInfoForProfiling); DebugInfoForProfiling);
} else if (PGOUsePath) { } else if (PGOUsePath) {
assert(!PGOSampleUsePath); assert(!PGOSampleUsePath);
PGOOpt = PGOOptions(PGOUsePath, "", "", PGOOpt = PGOOptions(PGOUsePath, "", "", "", FS,
#if LLVM_VERSION_GE(17, 0)
"",
FS,
#endif
PGOOptions::IRUse, PGOOptions::NoCSAction, PGOOptions::IRUse, PGOOptions::NoCSAction,
#if LLVM_VERSION_GE(19, 0) #if LLVM_VERSION_GE(19, 0)
PGOOptions::ColdFuncOpt::Default, PGOOptions::ColdFuncOpt::Default,
#endif #endif
DebugInfoForProfiling); DebugInfoForProfiling);
} else if (PGOSampleUsePath) { } else if (PGOSampleUsePath) {
PGOOpt = PGOOptions(PGOSampleUsePath, "", "", PGOOpt = PGOOptions(PGOSampleUsePath, "", "", "", FS,
#if LLVM_VERSION_GE(17, 0)
"",
FS,
#endif
PGOOptions::SampleUse, PGOOptions::NoCSAction, PGOOptions::SampleUse, PGOOptions::NoCSAction,
#if LLVM_VERSION_GE(19, 0) #if LLVM_VERSION_GE(19, 0)
PGOOptions::ColdFuncOpt::Default, PGOOptions::ColdFuncOpt::Default,
#endif #endif
DebugInfoForProfiling); DebugInfoForProfiling);
} else if (DebugInfoForProfiling) { } else if (DebugInfoForProfiling) {
PGOOpt = PGOOptions("", "", "", PGOOpt = PGOOptions("", "", "", "", FS,
#if LLVM_VERSION_GE(17, 0)
"",
FS,
#endif
PGOOptions::NoAction, PGOOptions::NoCSAction, PGOOptions::NoAction, PGOOptions::NoCSAction,
#if LLVM_VERSION_GE(19, 0) #if LLVM_VERSION_GE(19, 0)
PGOOptions::ColdFuncOpt::Default, PGOOptions::ColdFuncOpt::Default,
@ -1353,9 +1323,7 @@ LLVMRustCreateThinLTOData(LLVMRustThinLTOModule *modules,
ComputeCrossModuleImport( ComputeCrossModuleImport(
Ret->Index, Ret->Index,
Ret->ModuleToDefinedGVSummaries, Ret->ModuleToDefinedGVSummaries,
#if LLVM_VERSION_GE(17, 0)
isPrevailing, isPrevailing,
#endif
Ret->ImportLists, Ret->ImportLists,
Ret->ExportLists Ret->ExportLists
); );

View File

@ -2152,19 +2152,3 @@ extern "C" LLVMValueRef LLVMConstStringInContext2(LLVMContextRef C,
return wrap(ConstantDataArray::getString(*unwrap(C), StringRef(Str, Length), !DontNullTerminate)); return wrap(ConstantDataArray::getString(*unwrap(C), StringRef(Str, Length), !DontNullTerminate));
} }
#endif #endif
// FIXME: Remove when Rust's minimum supported LLVM version reaches 17.
// https://github.com/llvm/llvm-project/commit/35276f16e5a2cae0dfb49c0fbf874d4d2f177acc
#if LLVM_VERSION_LT(17, 0)
extern "C" LLVMValueRef LLVMConstArray2(LLVMTypeRef ElementTy,
LLVMValueRef *ConstantVals,
uint64_t Length) {
ArrayRef<Constant *> V(unwrap<Constant>(ConstantVals, Length), Length);
return wrap(ConstantArray::get(ArrayType::get(unwrap(ElementTy), Length), V));
}
extern "C" LLVMTypeRef LLVMArrayType2(LLVMTypeRef ElementTy,
uint64_t ElementCount) {
return wrap(ArrayType::get(unwrap(ElementTy), ElementCount));
}
#endif

View File

@ -564,11 +564,11 @@ fn check_llvm_version(builder: &Builder<'_>, llvm_config: &Path) {
let version = output(cmd.arg("--version")); let version = output(cmd.arg("--version"));
let mut parts = version.split('.').take(2).filter_map(|s| s.parse::<u32>().ok()); let mut parts = version.split('.').take(2).filter_map(|s| s.parse::<u32>().ok());
if let (Some(major), Some(_minor)) = (parts.next(), parts.next()) { if let (Some(major), Some(_minor)) = (parts.next(), parts.next()) {
if major >= 16 { if major >= 17 {
return; return;
} }
} }
panic!("\n\nbad LLVM version: {version}, need >=16.0\n\n") panic!("\n\nbad LLVM version: {version}, need >=17.0\n\n")
} }
fn configure_cmake( fn configure_cmake(

View File

@ -1,67 +0,0 @@
FROM ubuntu:23.04
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends \
g++ \
gcc-multilib \
make \
ninja-build \
file \
curl \
ca-certificates \
python3 \
git \
cmake \
sudo \
gdb \
llvm-16-tools \
llvm-16-dev \
libedit-dev \
libssl-dev \
pkg-config \
zlib1g-dev \
xz-utils \
nodejs \
mingw-w64 \
# libgccjit dependencies
flex \
libmpfr-dev \
libgmp-dev \
libmpc3 \
libmpc-dev \
&& rm -rf /var/lib/apt/lists/*
# Note: libgccjit needs to match the default gcc version for the linker to find it.
# Install powershell (universal package) so we can test x.ps1 on Linux
RUN curl -sL "https://github.com/PowerShell/PowerShell/releases/download/v7.3.1/powershell_7.3.1-1.deb_amd64.deb" > powershell.deb && \
dpkg -i powershell.deb && \
rm -f powershell.deb
COPY scripts/sccache.sh /scripts/
RUN sh /scripts/sccache.sh
# We are disabling CI LLVM since this builder is intentionally using a host
# LLVM, rather than the typical src/llvm-project LLVM.
ENV NO_DOWNLOAD_CI_LLVM 1
# This is not the latest LLVM version, so some components required by tests may
# be missing.
ENV IS_NOT_LATEST_LLVM 1
# Using llvm-link-shared due to libffi issues -- see #34486
ENV RUST_CONFIGURE_ARGS \
--build=x86_64-unknown-linux-gnu \
--llvm-root=/usr/lib/llvm-16 \
--enable-llvm-link-shared \
--set rust.thin-lto-import-instr-limit=10
COPY host-x86_64/x86_64-gnu-llvm-16/script.sh /tmp/
COPY host-x86_64/dist-x86_64-linux/shared.sh /scripts/
COPY host-x86_64/dist-x86_64-linux/build-gccjit.sh /scripts/
RUN /scripts/build-gccjit.sh /scripts
ENV SCRIPT /tmp/script.sh

View File

@ -56,11 +56,10 @@ ENV RUST_CONFIGURE_ARGS \
--enable-llvm-link-shared \ --enable-llvm-link-shared \
--set rust.thin-lto-import-instr-limit=10 --set rust.thin-lto-import-instr-limit=10
COPY host-x86_64/x86_64-gnu-llvm-16/script.sh /tmp/
COPY host-x86_64/dist-x86_64-linux/shared.sh /scripts/ COPY host-x86_64/dist-x86_64-linux/shared.sh /scripts/
COPY host-x86_64/dist-x86_64-linux/build-gccjit.sh /scripts/ COPY host-x86_64/dist-x86_64-linux/build-gccjit.sh /scripts/
RUN /scripts/build-gccjit.sh /scripts RUN /scripts/build-gccjit.sh /scripts
COPY scripts/x86_64-gnu-llvm.sh /tmp/script.sh
ENV SCRIPT /tmp/script.sh ENV SCRIPT /tmp/script.sh

View File

@ -24,11 +24,14 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
xz-utils \ xz-utils \
nodejs \ nodejs \
mingw-w64 \ mingw-w64 \
libgccjit-13-dev \ # libgccjit dependencies
flex \
libmpfr-dev \
libgmp-dev \
libmpc3 \
libmpc-dev \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
# Note: libgccjit needs to match the default gcc version for the linker to find it.
# Install powershell (universal package) so we can test x.ps1 on Linux # Install powershell (universal package) so we can test x.ps1 on Linux
# FIXME: need a "universal" version that supports libicu74, but for now it still works to ignore that dep. # FIXME: need a "universal" version that supports libicu74, but for now it still works to ignore that dep.
RUN curl -sL "https://github.com/PowerShell/PowerShell/releases/download/v7.3.1/powershell_7.3.1-1.deb_amd64.deb" > powershell.deb && \ RUN curl -sL "https://github.com/PowerShell/PowerShell/releases/download/v7.3.1/powershell_7.3.1-1.deb_amd64.deb" > powershell.deb && \
@ -50,6 +53,10 @@ ENV RUST_CONFIGURE_ARGS \
--enable-llvm-link-shared \ --enable-llvm-link-shared \
--set rust.thin-lto-import-instr-limit=10 --set rust.thin-lto-import-instr-limit=10
COPY host-x86_64/x86_64-gnu-llvm-16/script.sh /tmp/ COPY host-x86_64/dist-x86_64-linux/shared.sh /scripts/
COPY host-x86_64/dist-x86_64-linux/build-gccjit.sh /scripts/
RUN /scripts/build-gccjit.sh /scripts
COPY scripts/x86_64-gnu-llvm.sh /tmp/script.sh
ENV SCRIPT /tmp/script.sh ENV SCRIPT /tmp/script.sh

View File

@ -357,7 +357,7 @@ jobs:
- name: mingw-check-tidy - name: mingw-check-tidy
<<: *job-linux-4c <<: *job-linux-4c
- name: x86_64-gnu-llvm-16 - name: x86_64-gnu-llvm-17
env: env:
ENABLE_GCC_CODEGEN: "1" ENABLE_GCC_CODEGEN: "1"
<<: *job-linux-16c <<: *job-linux-16c
@ -520,11 +520,6 @@ jobs:
RUST_BACKTRACE: 1 RUST_BACKTRACE: 1
<<: *job-linux-8c <<: *job-linux-8c
- name: x86_64-gnu-llvm-16
env:
RUST_BACKTRACE: 1
<<: *job-linux-8c
- name: x86_64-gnu-nopt - name: x86_64-gnu-nopt
<<: *job-linux-4c <<: *job-linux-4c

View File

@ -1,5 +1,4 @@
//@ compile-flags: -O //@ compile-flags: -O
//@ min-llvm-version: 17
//@ only-x86_64-unknown-linux-gnu //@ only-x86_64-unknown-linux-gnu
// We want to check that this function does not mis-optimize to loop jumping. // We want to check that this function does not mis-optimize to loop jumping.

View File

@ -1,7 +1,6 @@
// Verify that move before the call of the function with noalias, nocapture, readonly. // Verify that move before the call of the function with noalias, nocapture, readonly.
// #107436 // #107436
//@ compile-flags: -O //@ compile-flags: -O
//@ min-llvm-version: 17
#![crate_type = "lib"] #![crate_type = "lib"]

View File

@ -1,5 +1,4 @@
//@ compile-flags: -O //@ compile-flags: -O
//@ min-llvm-version: 17
#![crate_type = "lib"] #![crate_type = "lib"]

View File

@ -1,8 +1,5 @@
//@ revisions: old new
// LLVM 17 realizes double panic is not possible and doesn't generate calls // LLVM 17 realizes double panic is not possible and doesn't generate calls
// to panic_cannot_unwind. // to panic_cannot_unwind.
//@ [old]ignore-llvm-version: 17 - 99
//@ [new]min-llvm-version: 17
//@ compile-flags: -O //@ compile-flags: -O
//@ ignore-debug: plain old debug assertions //@ ignore-debug: plain old debug assertions
//@ needs-unwind //@ needs-unwind
@ -22,14 +19,6 @@ pub fn shrink_to_fit(vec: &mut Vec<u32>) {
// CHECK-LABEL: @issue71861 // CHECK-LABEL: @issue71861
#[no_mangle] #[no_mangle]
pub fn issue71861(vec: Vec<u32>) -> Box<[u32]> { pub fn issue71861(vec: Vec<u32>) -> Box<[u32]> {
// CHECK-NOT: panic
// Call to panic_cannot_unwind in case of double-panic is expected
// on LLVM 16 and older, but other panics are not.
// old: filter
// old-NEXT: ; call core::panicking::panic_cannot_unwind
// old-NEXT: panic_cannot_unwind
// CHECK-NOT: panic // CHECK-NOT: panic
vec.into_boxed_slice() vec.into_boxed_slice()
} }
@ -40,6 +29,3 @@ pub fn issue75636<'a>(iter: &[&'a str]) -> Box<[&'a str]> {
// CHECK-NOT: panic // CHECK-NOT: panic
iter.iter().copied().collect() iter.iter().copied().collect()
} }
// old: ; core::panicking::panic_cannot_unwind
// old: declare void @{{.*}}panic_cannot_unwind

View File

@ -2,7 +2,6 @@ include ../tools.mk
# Verify that the impl_* symbols are preserved. #108030 # Verify that the impl_* symbols are preserved. #108030
# only-x86_64-unknown-linux-gnu # only-x86_64-unknown-linux-gnu
# min-llvm-version: 17
all: all:
$(RUSTC) -Cdebuginfo=0 -Copt-level=3 lib.rs $(RUSTC) -Cdebuginfo=0 -Copt-level=3 lib.rs

View File

@ -1,4 +1,3 @@
//@ needs-llvm-components: webassembly //@ needs-llvm-components: webassembly
//@ min-llvm-version: 17
//@ compile-flags: --print=target-cpus --target=wasm32-unknown-unknown //@ compile-flags: --print=target-cpus --target=wasm32-unknown-unknown
//@ check-pass //@ check-pass