mirror of
https://github.com/rust-lang/rust
synced 2024-09-05 16:57:03 +00:00
Update the minimum external LLVM to 14
This commit is contained in:
parent
2773383a31
commit
a06aaa4a9e
8
.github/workflows/ci.yml
vendored
8
.github/workflows/ci.yml
vendored
|
@ -54,7 +54,7 @@ jobs:
|
|||
tidy: true
|
||||
os: ubuntu-20.04-xl
|
||||
env: {}
|
||||
- name: x86_64-gnu-llvm-13
|
||||
- name: x86_64-gnu-llvm-14
|
||||
tidy: false
|
||||
os: ubuntu-20.04-xl
|
||||
env: {}
|
||||
|
@ -300,11 +300,7 @@ jobs:
|
|||
env:
|
||||
RUST_BACKTRACE: 1
|
||||
os: ubuntu-20.04-xl
|
||||
- name: x86_64-gnu-llvm-13
|
||||
env:
|
||||
RUST_BACKTRACE: 1
|
||||
os: ubuntu-20.04-xl
|
||||
- name: x86_64-gnu-llvm-13-stage1
|
||||
- name: x86_64-gnu-llvm-14-stage1
|
||||
env:
|
||||
RUST_BACKTRACE: 1
|
||||
os: ubuntu-20.04-xl
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
use crate::debuginfo;
|
||||
use crate::errors::{InvalidMinimumAlignment, SymbolAlreadyDefined};
|
||||
use crate::llvm::{self, True};
|
||||
use crate::llvm_util;
|
||||
use crate::type_::Type;
|
||||
use crate::type_of::LayoutLlvmExt;
|
||||
use crate::value::Value;
|
||||
|
@ -56,13 +55,7 @@ fn append_chunks_of_init_and_uninit_bytes<'ll, 'a, 'b>(
|
|||
// to avoid the cost of generating large complex const expressions.
|
||||
// For example, `[(u32, u8); 1024 * 1024]` contains uninit padding in each element,
|
||||
// and would result in `{ [5 x i8] zeroinitializer, [3 x i8] undef, ...repeat 1M times... }`.
|
||||
let max = if llvm_util::get_version() < (14, 0, 0) {
|
||||
// Generating partially-uninit consts inhibits optimizations in LLVM < 14.
|
||||
// See https://github.com/rust-lang/rust/issues/84565.
|
||||
1
|
||||
} else {
|
||||
cx.sess().opts.unstable_opts.uninit_const_chunk_threshold
|
||||
};
|
||||
let max = cx.sess().opts.unstable_opts.uninit_const_chunk_threshold;
|
||||
let allow_uninit_chunks = chunks.clone().take(max.saturating_add(1)).count() <= max;
|
||||
|
||||
if allow_uninit_chunks {
|
||||
|
|
|
@ -143,17 +143,6 @@ pub unsafe fn create_module<'ll>(
|
|||
|
||||
let mut target_data_layout = sess.target.data_layout.to_string();
|
||||
let llvm_version = llvm_util::get_version();
|
||||
if llvm_version < (14, 0, 0) {
|
||||
if sess.target.llvm_target == "i686-pc-windows-msvc"
|
||||
|| sess.target.llvm_target == "i586-pc-windows-msvc"
|
||||
{
|
||||
target_data_layout =
|
||||
"e-m:x-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:32-n8:16:32-a:0:32-S32"
|
||||
.to_string();
|
||||
} else if sess.target.arch == "wasm32" {
|
||||
target_data_layout = target_data_layout.replace("-p10:8:8-p20:8:8", "");
|
||||
}
|
||||
}
|
||||
if llvm_version < (16, 0, 0) {
|
||||
if sess.target.arch == "s390x" {
|
||||
target_data_layout = target_data_layout.replace("-v128:64", "");
|
||||
|
|
|
@ -152,13 +152,7 @@ pub fn time_trace_profiler_finish(file_name: &Path) {
|
|||
pub fn to_llvm_features<'a>(sess: &Session, s: &'a str) -> SmallVec<[&'a str; 2]> {
|
||||
let arch = if sess.target.arch == "x86_64" { "x86" } else { &*sess.target.arch };
|
||||
match (arch, s) {
|
||||
("x86", "sse4.2") => {
|
||||
if get_version() >= (14, 0, 0) {
|
||||
smallvec!["sse4.2", "crc32"]
|
||||
} else {
|
||||
smallvec!["sse4.2"]
|
||||
}
|
||||
}
|
||||
("x86", "sse4.2") => smallvec!["sse4.2", "crc32"],
|
||||
("x86", "pclmulqdq") => smallvec!["pclmul"],
|
||||
("x86", "rdrand") => smallvec!["rdrnd"],
|
||||
("x86", "bmi1") => smallvec!["bmi"],
|
||||
|
@ -243,7 +237,7 @@ pub fn target_features(sess: &Session, allow_unstable: bool) -> Vec<Symbol> {
|
|||
// (see https://reviews.llvm.org/D110413). This unstable target feature is intended for use
|
||||
// by compiler-builtins, to export the builtins with the expected, LLVM-version-dependent ABI.
|
||||
// The target feature can be dropped once we no longer support older LLVM versions.
|
||||
if sess.is_nightly_build() && get_version() >= (14, 0, 0) {
|
||||
if sess.is_nightly_build() {
|
||||
features.push(Symbol::intern("llvm14-builtins-abi"));
|
||||
}
|
||||
features
|
||||
|
@ -494,11 +488,6 @@ pub(crate) fn global_llvm_features(sess: &Session, diagnostics: bool) -> Vec<Str
|
|||
.flatten();
|
||||
features.extend(feats);
|
||||
|
||||
// FIXME: Move v8a to target definition list when earliest supported LLVM is 14.
|
||||
if get_version() >= (14, 0, 0) && sess.target.arch == "aarch64" {
|
||||
features.push("+v8a".into());
|
||||
}
|
||||
|
||||
if diagnostics && let Some(f) = check_tied_features(sess, &featsmap) {
|
||||
sess.emit_err(TargetFeatureDisableOrEnable {
|
||||
features: f,
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
use crate::common::*;
|
||||
use crate::context::TypeLowering;
|
||||
use crate::llvm_util::get_version;
|
||||
use crate::type_::Type;
|
||||
use rustc_codegen_ssa::traits::*;
|
||||
use rustc_middle::bug;
|
||||
|
@ -43,10 +42,8 @@ fn uncached_llvm_type<'a, 'tcx>(
|
|||
// in problematically distinct types due to HRTB and subtyping (see #47638).
|
||||
// ty::Dynamic(..) |
|
||||
ty::Adt(..) | ty::Closure(..) | ty::Foreign(..) | ty::Generator(..) | ty::Str
|
||||
// For performance reasons we use names only when emitting LLVM IR. Unless we are on
|
||||
// LLVM < 14, where the use of unnamed types resulted in various issues, e.g., #76213,
|
||||
// #79564, and #79246.
|
||||
if get_version() < (14, 0, 0) || !cx.sess().fewer_names() =>
|
||||
// For performance reasons we use names only when emitting LLVM IR.
|
||||
if !cx.sess().fewer_names() =>
|
||||
{
|
||||
let mut name = with_no_visible_paths!(with_no_trimmed_paths!(layout.ty.to_string()));
|
||||
if let (&ty::Adt(def, _), &Variants::Single { index }) =
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include "llvm/IR/AssemblyAnnotationWriter.h"
|
||||
#include "llvm/IR/IntrinsicInst.h"
|
||||
#include "llvm/IR/Verifier.h"
|
||||
#include "llvm/MC/TargetRegistry.h"
|
||||
#include "llvm/Object/ObjectFile.h"
|
||||
#include "llvm/Object/IRObjectFile.h"
|
||||
#include "llvm/Passes/PassBuilder.h"
|
||||
|
@ -25,11 +26,6 @@
|
|||
#include "llvm/Support/VirtualFileSystem.h"
|
||||
#endif
|
||||
#include "llvm/Support/Host.h"
|
||||
#if LLVM_VERSION_LT(14, 0)
|
||||
#include "llvm/Support/TargetRegistry.h"
|
||||
#else
|
||||
#include "llvm/MC/TargetRegistry.h"
|
||||
#endif
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/Transforms/IPO/PassManagerBuilder.h"
|
||||
#include "llvm/Transforms/IPO/AlwaysInliner.h"
|
||||
|
@ -267,10 +263,6 @@ enum class LLVMRustPassBuilderOptLevel {
|
|||
Oz,
|
||||
};
|
||||
|
||||
#if LLVM_VERSION_LT(14,0)
|
||||
using OptimizationLevel = PassBuilder::OptimizationLevel;
|
||||
#endif
|
||||
|
||||
static OptimizationLevel fromRust(LLVMRustPassBuilderOptLevel Level) {
|
||||
switch (Level) {
|
||||
case LLVMRustPassBuilderOptLevel::O0:
|
||||
|
@ -747,27 +739,18 @@ LLVMRustOptimize(
|
|||
|
||||
if (SanitizerOptions) {
|
||||
if (SanitizerOptions->SanitizeMemory) {
|
||||
#if LLVM_VERSION_GE(14, 0)
|
||||
MemorySanitizerOptions Options(
|
||||
SanitizerOptions->SanitizeMemoryTrackOrigins,
|
||||
SanitizerOptions->SanitizeMemoryRecover,
|
||||
/*CompileKernel=*/false,
|
||||
/*EagerChecks=*/true);
|
||||
#else
|
||||
MemorySanitizerOptions Options(
|
||||
SanitizerOptions->SanitizeMemoryTrackOrigins,
|
||||
SanitizerOptions->SanitizeMemoryRecover,
|
||||
/*CompileKernel=*/false);
|
||||
#endif
|
||||
OptimizerLastEPCallbacks.push_back(
|
||||
[Options](ModulePassManager &MPM, OptimizationLevel Level) {
|
||||
#if LLVM_VERSION_GE(14, 0) && LLVM_VERSION_LT(16, 0)
|
||||
#if LLVM_VERSION_LT(16, 0)
|
||||
MPM.addPass(ModuleMemorySanitizerPass(Options));
|
||||
MPM.addPass(createModuleToFunctionPassAdaptor(MemorySanitizerPass(Options)));
|
||||
#else
|
||||
MPM.addPass(MemorySanitizerPass(Options));
|
||||
#endif
|
||||
#if LLVM_VERSION_LT(16, 0)
|
||||
MPM.addPass(createModuleToFunctionPassAdaptor(MemorySanitizerPass(Options)));
|
||||
#endif
|
||||
}
|
||||
);
|
||||
|
@ -776,11 +759,7 @@ LLVMRustOptimize(
|
|||
if (SanitizerOptions->SanitizeThread) {
|
||||
OptimizerLastEPCallbacks.push_back(
|
||||
[](ModulePassManager &MPM, OptimizationLevel Level) {
|
||||
#if LLVM_VERSION_GE(14, 0)
|
||||
MPM.addPass(ModuleThreadSanitizerPass());
|
||||
#else
|
||||
MPM.addPass(ThreadSanitizerPass());
|
||||
#endif
|
||||
MPM.addPass(createModuleToFunctionPassAdaptor(ThreadSanitizerPass()));
|
||||
}
|
||||
);
|
||||
|
@ -792,7 +771,6 @@ LLVMRustOptimize(
|
|||
#if LLVM_VERSION_LT(15, 0)
|
||||
MPM.addPass(RequireAnalysisPass<ASanGlobalsMetadataAnalysis, Module>());
|
||||
#endif
|
||||
#if LLVM_VERSION_GE(14, 0)
|
||||
AddressSanitizerOptions opts = AddressSanitizerOptions{
|
||||
/*CompileKernel=*/false,
|
||||
SanitizerOptions->SanitizeAddressRecover,
|
||||
|
@ -803,13 +781,6 @@ LLVMRustOptimize(
|
|||
MPM.addPass(ModuleAddressSanitizerPass(opts));
|
||||
#else
|
||||
MPM.addPass(AddressSanitizerPass(opts));
|
||||
#endif
|
||||
#else
|
||||
MPM.addPass(ModuleAddressSanitizerPass(
|
||||
/*CompileKernel=*/false, SanitizerOptions->SanitizeAddressRecover));
|
||||
MPM.addPass(createModuleToFunctionPassAdaptor(AddressSanitizerPass(
|
||||
/*CompileKernel=*/false, SanitizerOptions->SanitizeAddressRecover,
|
||||
/*UseAfterScope=*/true)));
|
||||
#endif
|
||||
}
|
||||
);
|
||||
|
@ -817,15 +788,10 @@ LLVMRustOptimize(
|
|||
if (SanitizerOptions->SanitizeHWAddress) {
|
||||
OptimizerLastEPCallbacks.push_back(
|
||||
[SanitizerOptions](ModulePassManager &MPM, OptimizationLevel Level) {
|
||||
#if LLVM_VERSION_GE(14, 0)
|
||||
HWAddressSanitizerOptions opts(
|
||||
/*CompileKernel=*/false, SanitizerOptions->SanitizeHWAddressRecover,
|
||||
/*DisableOptimization=*/false);
|
||||
MPM.addPass(HWAddressSanitizerPass(opts));
|
||||
#else
|
||||
MPM.addPass(HWAddressSanitizerPass(
|
||||
/*CompileKernel=*/false, SanitizerOptions->SanitizeHWAddressRecover));
|
||||
#endif
|
||||
}
|
||||
);
|
||||
}
|
||||
|
@ -1328,11 +1294,7 @@ extern "C" bool
|
|||
LLVMRustPrepareThinLTOResolveWeak(const LLVMRustThinLTOData *Data, LLVMModuleRef M) {
|
||||
Module &Mod = *unwrap(M);
|
||||
const auto &DefinedGlobals = Data->ModuleToDefinedGVSummaries.lookup(Mod.getModuleIdentifier());
|
||||
#if LLVM_VERSION_GE(14, 0)
|
||||
thinLTOFinalizeInModule(Mod, DefinedGlobals, /*PropagateAttrs=*/true);
|
||||
#else
|
||||
thinLTOResolvePrevailingInModule(Mod, DefinedGlobals);
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -63,11 +63,7 @@ static LLVM_THREAD_LOCAL char *LastError;
|
|||
//
|
||||
// Notably it exits the process with code 101, unlike LLVM's default of 1.
|
||||
static void FatalErrorHandler(void *UserData,
|
||||
#if LLVM_VERSION_LT(14, 0)
|
||||
const std::string& Reason,
|
||||
#else
|
||||
const char* Reason,
|
||||
#endif
|
||||
bool GenCrashDiag) {
|
||||
// Do the same thing that the default error handler does.
|
||||
std::cerr << "LLVM ERROR: " << Reason << std::endl;
|
||||
|
@ -249,18 +245,10 @@ static Attribute::AttrKind fromRust(LLVMRustAttribute Kind) {
|
|||
template<typename T> static inline void AddAttributes(T *t, unsigned Index,
|
||||
LLVMAttributeRef *Attrs, size_t AttrsLen) {
|
||||
AttributeList PAL = t->getAttributes();
|
||||
AttributeList PALNew;
|
||||
#if LLVM_VERSION_LT(14, 0)
|
||||
AttrBuilder B;
|
||||
for (LLVMAttributeRef Attr : makeArrayRef(Attrs, AttrsLen))
|
||||
B.addAttribute(unwrap(Attr));
|
||||
PALNew = PAL.addAttributes(t->getContext(), Index, B);
|
||||
#else
|
||||
AttrBuilder B(t->getContext());
|
||||
for (LLVMAttributeRef Attr : ArrayRef<LLVMAttributeRef>(Attrs, AttrsLen))
|
||||
B.addAttribute(unwrap(Attr));
|
||||
PALNew = PAL.addAttributesAtIndex(t->getContext(), Index, B);
|
||||
#endif
|
||||
AttributeList PALNew = PAL.addAttributesAtIndex(t->getContext(), Index, B);
|
||||
t->setAttributes(PALNew);
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ pub fn target() -> Target {
|
|||
data_layout: "E-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
|
||||
arch: "aarch64".into(),
|
||||
options: TargetOptions {
|
||||
features: "+outline-atomics".into(),
|
||||
features: "+v8a,+outline-atomics".into(),
|
||||
max_atomic_width: Some(128),
|
||||
mcount: "\u{1}_mcount".into(),
|
||||
endian: Endian::Big,
|
||||
|
|
|
@ -12,7 +12,7 @@ pub fn target() -> Target {
|
|||
arch: "aarch64".into(),
|
||||
options: TargetOptions {
|
||||
abi: "ilp32".into(),
|
||||
features: "+outline-atomics".into(),
|
||||
features: "+v8a,+outline-atomics".into(),
|
||||
mcount: "\u{1}_mcount".into(),
|
||||
endian: Endian::Big,
|
||||
..base
|
||||
|
|
|
@ -9,7 +9,7 @@ pub fn target() -> Target {
|
|||
arch: "aarch64".into(),
|
||||
options: TargetOptions {
|
||||
linker: Some("aarch64-kmc-elf-gcc".into()),
|
||||
features: "+neon,+fp-armv8".into(),
|
||||
features: "+v8a,+neon,+fp-armv8".into(),
|
||||
relocation_model: RelocModel::Static,
|
||||
disable_redzone: true,
|
||||
max_atomic_width: Some(128),
|
||||
|
|
|
@ -13,7 +13,7 @@ pub fn target() -> Target {
|
|||
max_atomic_width: Some(128),
|
||||
// As documented in https://developer.android.com/ndk/guides/cpu-features.html
|
||||
// the neon (ASIMD) and FP must exist on all android aarch64 targets.
|
||||
features: "+neon,+fp-armv8".into(),
|
||||
features: "+v8a,+neon,+fp-armv8".into(),
|
||||
supported_sanitizers: SanitizerSet::CFI
|
||||
| SanitizerSet::HWADDRESS
|
||||
| SanitizerSet::MEMTAG
|
||||
|
|
|
@ -10,6 +10,7 @@ pub fn target() -> Target {
|
|||
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
|
||||
arch: "aarch64".into(),
|
||||
options: TargetOptions {
|
||||
features: "+v8a".into(),
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||
linker: Some("rust-lld".into()),
|
||||
link_script: Some(LINKER_SCRIPT.into()),
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
pub fn target() -> Target {
|
||||
let mut base = super::windows_gnullvm_base::opts();
|
||||
base.max_atomic_width = Some(128);
|
||||
base.features = "+neon,+fp-armv8".into();
|
||||
base.features = "+v8a,+neon,+fp-armv8".into();
|
||||
base.linker = Some("aarch64-w64-mingw32-clang".into());
|
||||
|
||||
Target {
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
pub fn target() -> Target {
|
||||
let mut base = super::windows_msvc_base::opts();
|
||||
base.max_atomic_width = Some(128);
|
||||
base.features = "+neon,+fp-armv8".into();
|
||||
base.features = "+v8a,+neon,+fp-armv8".into();
|
||||
|
||||
Target {
|
||||
llvm_target: "aarch64-pc-windows-msvc".into(),
|
||||
|
|
|
@ -7,6 +7,7 @@ pub fn target() -> Target {
|
|||
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
|
||||
arch: "aarch64".into(),
|
||||
options: TargetOptions {
|
||||
features: "+v8a".into(),
|
||||
max_atomic_width: Some(128),
|
||||
supported_sanitizers: SanitizerSet::ADDRESS
|
||||
| SanitizerSet::CFI
|
||||
|
|
|
@ -7,6 +7,7 @@ pub fn target() -> Target {
|
|||
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
|
||||
arch: "aarch64".into(),
|
||||
options: TargetOptions {
|
||||
features: "+v8a".into(),
|
||||
max_atomic_width: Some(128),
|
||||
supported_sanitizers: SanitizerSet::ADDRESS
|
||||
| SanitizerSet::CFI
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
pub fn target() -> Target {
|
||||
let mut base = super::hermit_base::opts();
|
||||
base.max_atomic_width = Some(128);
|
||||
base.features = "+strict-align,+neon,+fp-armv8".into();
|
||||
base.features = "+v8a,+strict-align,+neon,+fp-armv8".into();
|
||||
|
||||
Target {
|
||||
llvm_target: "aarch64-unknown-hermit".into(),
|
||||
|
|
|
@ -7,7 +7,7 @@ pub fn target() -> Target {
|
|||
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
|
||||
arch: "aarch64".into(),
|
||||
options: TargetOptions {
|
||||
features: "+outline-atomics".into(),
|
||||
features: "+v8a,+outline-atomics".into(),
|
||||
mcount: "\u{1}_mcount".into(),
|
||||
max_atomic_width: Some(128),
|
||||
supported_sanitizers: SanitizerSet::ADDRESS
|
||||
|
|
|
@ -8,7 +8,7 @@ pub fn target() -> Target {
|
|||
arch: "aarch64".into(),
|
||||
options: TargetOptions {
|
||||
abi: "ilp32".into(),
|
||||
features: "+outline-atomics".into(),
|
||||
features: "+v8a,+outline-atomics".into(),
|
||||
max_atomic_width: Some(128),
|
||||
mcount: "\u{1}_mcount".into(),
|
||||
..super::linux_gnu_base::opts()
|
||||
|
|
|
@ -4,6 +4,7 @@ pub fn target() -> Target {
|
|||
let mut base = super::linux_musl_base::opts();
|
||||
base.max_atomic_width = Some(128);
|
||||
base.supports_xray = true;
|
||||
base.features = "+v8a".into();
|
||||
|
||||
Target {
|
||||
llvm_target: "aarch64-unknown-linux-musl".into(),
|
||||
|
|
|
@ -7,6 +7,7 @@ pub fn target() -> Target {
|
|||
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
|
||||
arch: "aarch64".into(),
|
||||
options: TargetOptions {
|
||||
features: "+v8a".into(),
|
||||
mcount: "__mcount".into(),
|
||||
max_atomic_width: Some(128),
|
||||
..super::netbsd_base::opts()
|
||||
|
|
|
@ -14,7 +14,7 @@ pub fn target() -> Target {
|
|||
let opts = TargetOptions {
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||
linker: Some("rust-lld".into()),
|
||||
features: "+strict-align,+neon,+fp-armv8".into(),
|
||||
features: "+v8a,+strict-align,+neon,+fp-armv8".into(),
|
||||
supported_sanitizers: SanitizerSet::KCFI,
|
||||
relocation_model: RelocModel::Static,
|
||||
disable_redzone: true,
|
||||
|
|
|
@ -13,7 +13,7 @@ pub fn target() -> Target {
|
|||
abi: "softfloat".into(),
|
||||
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
|
||||
linker: Some("rust-lld".into()),
|
||||
features: "+strict-align,-neon,-fp-armv8".into(),
|
||||
features: "+v8a,+strict-align,-neon,-fp-armv8".into(),
|
||||
relocation_model: RelocModel::Static,
|
||||
disable_redzone: true,
|
||||
max_atomic_width: Some(128),
|
||||
|
|
|
@ -17,6 +17,7 @@ pub fn target() -> Target {
|
|||
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
|
||||
arch: "aarch64".into(),
|
||||
options: TargetOptions {
|
||||
features: "+v8a".into(),
|
||||
max_atomic_width: Some(128),
|
||||
pre_link_args: TargetOptions::link_args(
|
||||
LinkerFlavor::Gnu(Cc::Yes, Lld::No),
|
||||
|
|
|
@ -6,6 +6,10 @@ pub fn target() -> Target {
|
|||
pointer_width: 64,
|
||||
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
|
||||
arch: "aarch64".into(),
|
||||
options: TargetOptions { max_atomic_width: Some(128), ..super::openbsd_base::opts() },
|
||||
options: TargetOptions {
|
||||
features: "+v8a".into(),
|
||||
max_atomic_width: Some(128),
|
||||
..super::openbsd_base::opts()
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
pub fn target() -> Target {
|
||||
let mut base = super::redox_base::opts();
|
||||
base.max_atomic_width = Some(128);
|
||||
base.features = "+v8a".into();
|
||||
|
||||
Target {
|
||||
llvm_target: "aarch64-unknown-redox".into(),
|
||||
|
|
|
@ -9,6 +9,7 @@ pub fn target() -> Target {
|
|||
|
||||
base.max_atomic_width = Some(128);
|
||||
base.add_pre_link_args(LinkerFlavor::Msvc(Lld::No), &["/machine:arm64"]);
|
||||
base.features = "+v8a".into();
|
||||
|
||||
Target {
|
||||
llvm_target: "aarch64-unknown-windows".into(),
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
pub fn target() -> Target {
|
||||
let mut base = super::windows_uwp_msvc_base::opts();
|
||||
base.max_atomic_width = Some(128);
|
||||
base.features = "+v8a".into();
|
||||
|
||||
Target {
|
||||
llvm_target: "aarch64-pc-windows-msvc".into(),
|
||||
|
|
|
@ -6,6 +6,10 @@ pub fn target() -> Target {
|
|||
pointer_width: 64,
|
||||
data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".into(),
|
||||
arch: "aarch64".into(),
|
||||
options: TargetOptions { max_atomic_width: Some(128), ..super::vxworks_base::opts() },
|
||||
options: TargetOptions {
|
||||
features: "+v8a".into(),
|
||||
max_atomic_width: Some(128),
|
||||
..super::vxworks_base::opts()
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ pub fn target() -> Target {
|
|||
data_layout: "e-m:o-p:32:32-i64:64-i128:128-n32:64-S128".into(),
|
||||
arch: "aarch64".into(),
|
||||
options: TargetOptions {
|
||||
features: "+neon,+fp-armv8,+apple-a7".into(),
|
||||
features: "+v8a,+neon,+fp-armv8,+apple-a7".into(),
|
||||
max_atomic_width: Some(128),
|
||||
forces_embed_bitcode: true,
|
||||
dynamic_linking: false,
|
||||
|
|
|
@ -561,11 +561,11 @@ fn check_llvm_version(builder: &Builder<'_>, llvm_config: &Path) {
|
|||
let version = output(cmd.arg("--version"));
|
||||
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 major >= 13 {
|
||||
if major >= 14 {
|
||||
return;
|
||||
}
|
||||
}
|
||||
panic!("\n\nbad LLVM version: {}, need >=13.0\n\n", version)
|
||||
panic!("\n\nbad LLVM version: {}, need >=14.0\n\n", version)
|
||||
}
|
||||
|
||||
fn configure_cmake(
|
||||
|
|
|
@ -1,49 +0,0 @@
|
|||
FROM ubuntu:22.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 \
|
||||
python2.7 \
|
||||
git \
|
||||
cmake \
|
||||
sudo \
|
||||
gdb \
|
||||
llvm-13-tools \
|
||||
llvm-13-dev \
|
||||
libedit-dev \
|
||||
libssl-dev \
|
||||
pkg-config \
|
||||
zlib1g-dev \
|
||||
xz-utils \
|
||||
nodejs \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
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
|
||||
|
||||
# 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-13 \
|
||||
--enable-llvm-link-shared \
|
||||
--set rust.thin-lto-import-instr-limit=10
|
||||
|
||||
ENV SCRIPT python2.7 ../x.py --stage 1 test --exclude src/tools/tidy && \
|
||||
# Run the `mir-opt` tests again but this time for a 32-bit target.
|
||||
# This enforces that tests using `// EMIT_MIR_FOR_EACH_BIT_WIDTH` have
|
||||
# both 32-bit and 64-bit outputs updated by the PR author, before
|
||||
# the PR is approved and tested for merging.
|
||||
# It will also detect tests lacking `// EMIT_MIR_FOR_EACH_BIT_WIDTH`,
|
||||
# despite having different output on 32-bit vs 64-bit targets.
|
||||
python2.7 ../x.py --stage 1 test tests/mir-opt \
|
||||
--host='' --target=i686-unknown-linux-gnu
|
|
@ -1,8 +1,6 @@
|
|||
FROM ubuntu:22.04
|
||||
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# NOTE: intentionally installs both python2 and python3 so we can test support for both.
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
g++ \
|
||||
gcc-multilib \
|
||||
|
@ -11,28 +9,20 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|||
file \
|
||||
curl \
|
||||
ca-certificates \
|
||||
python2.7 \
|
||||
python3.9 \
|
||||
python3 \
|
||||
git \
|
||||
cmake \
|
||||
sudo \
|
||||
gdb \
|
||||
llvm-13-tools \
|
||||
llvm-13-dev \
|
||||
llvm-14-tools \
|
||||
llvm-14-dev \
|
||||
libedit-dev \
|
||||
libssl-dev \
|
||||
pkg-config \
|
||||
zlib1g-dev \
|
||||
xz-utils \
|
||||
nodejs \
|
||||
\
|
||||
# Install powershell so we can test x.ps1 on Linux
|
||||
apt-transport-https software-properties-common && \
|
||||
curl -s "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb" > packages-microsoft-prod.deb && \
|
||||
dpkg -i packages-microsoft-prod.deb && \
|
||||
apt-get update && \
|
||||
apt-get install -y powershell \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY scripts/sccache.sh /scripts/
|
||||
RUN sh /scripts/sccache.sh
|
||||
|
@ -44,26 +34,16 @@ ENV NO_DOWNLOAD_CI_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-13 \
|
||||
--llvm-root=/usr/lib/llvm-14 \
|
||||
--enable-llvm-link-shared \
|
||||
--set rust.thin-lto-import-instr-limit=10
|
||||
|
||||
# NOTE: intentionally uses all of `x.py`, `x`, and `x.ps1` to make sure they all work on Linux.
|
||||
ENV SCRIPT ../x.py --stage 2 test --exclude src/tools/tidy && \
|
||||
ENV SCRIPT ../x.py --stage 1 test --exclude src/tools/tidy && \
|
||||
# Run the `mir-opt` tests again but this time for a 32-bit target.
|
||||
# This enforces that tests using `// EMIT_MIR_FOR_EACH_BIT_WIDTH` have
|
||||
# both 32-bit and 64-bit outputs updated by the PR author, before
|
||||
# the PR is approved and tested for merging.
|
||||
# It will also detect tests lacking `// EMIT_MIR_FOR_EACH_BIT_WIDTH`,
|
||||
# despite having different output on 32-bit vs 64-bit targets.
|
||||
../x --stage 2 test tests/mir-opt \
|
||||
--host='' --target=i686-unknown-linux-gnu && \
|
||||
# Run the UI test suite again, but in `--pass=check` mode
|
||||
#
|
||||
# This is intended to make sure that both `--pass=check` continues to
|
||||
# work.
|
||||
#
|
||||
../x.ps1 --stage 2 test tests/ui --pass=check \
|
||||
--host='' --target=i686-unknown-linux-gnu && \
|
||||
# Run tidy at the very end, after all the other tests.
|
||||
python2.7 ../x.py --stage 2 test src/tools/tidy
|
||||
../x.py --stage 1 test tests/mir-opt \
|
||||
--host='' --target=i686-unknown-linux-gnu
|
|
@ -300,7 +300,7 @@ jobs:
|
|||
<<: *job-linux-xl
|
||||
tidy: true
|
||||
|
||||
- name: x86_64-gnu-llvm-13
|
||||
- name: x86_64-gnu-llvm-14
|
||||
<<: *job-linux-xl
|
||||
tidy: false
|
||||
|
||||
|
@ -459,12 +459,7 @@ jobs:
|
|||
RUST_BACKTRACE: 1
|
||||
<<: *job-linux-xl
|
||||
|
||||
- name: x86_64-gnu-llvm-13
|
||||
env:
|
||||
RUST_BACKTRACE: 1
|
||||
<<: *job-linux-xl
|
||||
|
||||
- name: x86_64-gnu-llvm-13-stage1
|
||||
- name: x86_64-gnu-llvm-14-stage1
|
||||
env:
|
||||
RUST_BACKTRACE: 1
|
||||
<<: *job-linux-xl
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// assembly-output: emit-asm
|
||||
// compile-flags: -Copt-level=1
|
||||
// only-x86_64
|
||||
// min-llvm-version: 14.0
|
||||
#![crate_type="rlib"]
|
||||
|
||||
// CHECK-LABEL: align_offset_byte_ptr
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
// compile-flags: -C no-prepopulate-passes
|
||||
// min-llvm-version: 14.0
|
||||
|
||||
#![crate_type = "lib"]
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
// min-llvm-version: 14.0
|
||||
// revisions: O Os
|
||||
//[Os] compile-flags: -Copt-level=s
|
||||
//[O] compile-flags: -O
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
// only-x86_64
|
||||
// min-llvm-version: 14.0
|
||||
// compile-flags: -Copt-level=3
|
||||
|
||||
#![crate_type = "lib"]
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
// compile-flags: -C no-prepopulate-passes
|
||||
// min-llvm-version: 14.0
|
||||
|
||||
// Check that we use undef (and not zero) for uninitialized bytes in constants.
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
// min-llvm-version: 14.0
|
||||
// ignore-debug: the debug assertions get in the way
|
||||
// compile-flags: -O -Z merge-functions=disabled
|
||||
#![crate_type = "lib"]
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
// build-pass
|
||||
// ignore-pass
|
||||
// min-llvm-version: 14.0.0
|
||||
// revisions: all inline merge1 merge2
|
||||
// compile-flags: --crate-type=lib -Cdebuginfo=1 -Copt-level=2
|
||||
//
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
// needs-sanitizer-support
|
||||
// needs-sanitizer-memory
|
||||
// min-llvm-version: 14.0.0
|
||||
//
|
||||
// revisions: unoptimized optimized
|
||||
//
|
||||
|
|
Loading…
Reference in a new issue