Skip to content

Commit 2b0da9b

Browse files
committed
Auto merge of #148516 - bjorn3:target_feature_parsing_improvements, r=WaffleLapkin
Move warning reporting from flag_to_backend_features to cfg_target_feature This way warnings are emitted even in a check build.
2 parents 44b269d + a6ca4f5 commit 2b0da9b

File tree

2 files changed

+34
-39
lines changed

2 files changed

+34
-39
lines changed

src/gcc_util.rs

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ fn gcc_features_by_flags(sess: &Session, features: &mut Vec<String>) {
1212

1313
/// The list of GCC features computed from CLI flags (`-Ctarget-cpu`, `-Ctarget-feature`,
1414
/// `--target` and similar).
15-
pub(crate) fn global_gcc_features(sess: &Session, diagnostics: bool) -> Vec<String> {
15+
pub(crate) fn global_gcc_features(sess: &Session) -> Vec<String> {
1616
// Features that come earlier are overridden by conflicting features later in the string.
1717
// Typically we'll want more explicit settings to override the implicit ones, so:
1818
//
@@ -37,27 +37,18 @@ pub(crate) fn global_gcc_features(sess: &Session, diagnostics: bool) -> Vec<Stri
3737
features.extend(sess.target.features.split(',').filter(|v| !v.is_empty()).map(String::from));
3838

3939
// -Ctarget-features
40-
target_features::flag_to_backend_features(
41-
sess,
42-
diagnostics,
43-
|feature| to_gcc_features(sess, feature),
44-
|feature, enable| {
45-
// We run through `to_gcc_features` when
46-
// passing requests down to GCC. This means that all in-language
47-
// features also work on the command line instead of having two
48-
// different names when the GCC name and the Rust name differ.
49-
features.extend(
50-
to_gcc_features(sess, feature)
51-
.iter()
52-
.flat_map(|feat| to_gcc_features(sess, feat).into_iter())
53-
.map(
54-
|feature| {
55-
if !enable { format!("-{}", feature) } else { feature.to_string() }
56-
},
57-
),
58-
);
59-
},
60-
);
40+
target_features::flag_to_backend_features(sess, |feature, enable| {
41+
// We run through `to_gcc_features` when
42+
// passing requests down to GCC. This means that all in-language
43+
// features also work on the command line instead of having two
44+
// different names when the GCC name and the Rust name differ.
45+
features.extend(
46+
to_gcc_features(sess, feature)
47+
.iter()
48+
.flat_map(|feat| to_gcc_features(sess, feat).into_iter())
49+
.map(|feature| if !enable { format!("-{}", feature) } else { feature.to_string() }),
50+
);
51+
});
6152

6253
gcc_features_by_flags(sess, &mut features);
6354

src/lib.rs

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ use rustc_target::spec::{Arch, RelocModel};
107107
use tempfile::TempDir;
108108

109109
use crate::back::lto::ModuleBuffer;
110-
use crate::gcc_util::target_cpu;
110+
use crate::gcc_util::{target_cpu, to_gcc_features};
111111

112112
rustc_fluent_macro::fluent_messages! { "../messages.ftl" }
113113

@@ -220,7 +220,7 @@ impl CodegenBackend for GccCodegenBackend {
220220
}
221221

222222
fn provide(&self, providers: &mut Providers) {
223-
providers.global_backend_features = |tcx, ()| gcc_util::global_gcc_features(tcx.sess, true)
223+
providers.global_backend_features = |tcx, ()| gcc_util::global_gcc_features(tcx.sess)
224224
}
225225

226226
fn codegen_crate(&self, tcx: TyCtxt<'_>) -> Box<dyn Any> {
@@ -446,21 +446,25 @@ fn to_gcc_opt_level(optlevel: Option<OptLevel>) -> OptimizationLevel {
446446

447447
/// Returns the features that should be set in `cfg(target_feature)`.
448448
fn target_config(sess: &Session, target_info: &LockedTargetInfo) -> TargetConfig {
449-
let (unstable_target_features, target_features) = cfg_target_feature(sess, |feature| {
450-
// TODO: we disable Neon for now since we don't support the LLVM intrinsics for it.
451-
if feature == "neon" {
452-
return false;
453-
}
454-
target_info.cpu_supports(feature)
455-
// cSpell:disable
456-
/*
457-
adx, aes, avx, avx2, avx512bf16, avx512bitalg, avx512bw, avx512cd, avx512dq, avx512er, avx512f, avx512fp16, avx512ifma,
458-
avx512pf, avx512vbmi, avx512vbmi2, avx512vl, avx512vnni, avx512vp2intersect, avx512vpopcntdq,
459-
bmi1, bmi2, cmpxchg16b, ermsb, f16c, fma, fxsr, gfni, lzcnt, movbe, pclmulqdq, popcnt, rdrand, rdseed, rtm,
460-
sha, sse, sse2, sse3, sse4.1, sse4.2, sse4a, ssse3, tbm, vaes, vpclmulqdq, xsave, xsavec, xsaveopt, xsaves
461-
*/
462-
// cSpell:enable
463-
});
449+
let (unstable_target_features, target_features) = cfg_target_feature(
450+
sess,
451+
|feature| to_gcc_features(sess, feature),
452+
|feature| {
453+
// TODO: we disable Neon for now since we don't support the LLVM intrinsics for it.
454+
if feature == "neon" {
455+
return false;
456+
}
457+
target_info.cpu_supports(feature)
458+
// cSpell:disable
459+
/*
460+
adx, aes, avx, avx2, avx512bf16, avx512bitalg, avx512bw, avx512cd, avx512dq, avx512er, avx512f, avx512fp16, avx512ifma,
461+
avx512pf, avx512vbmi, avx512vbmi2, avx512vl, avx512vnni, avx512vp2intersect, avx512vpopcntdq,
462+
bmi1, bmi2, cmpxchg16b, ermsb, f16c, fma, fxsr, gfni, lzcnt, movbe, pclmulqdq, popcnt, rdrand, rdseed, rtm,
463+
sha, sse, sse2, sse3, sse4.1, sse4.2, sse4a, ssse3, tbm, vaes, vpclmulqdq, xsave, xsavec, xsaveopt, xsaves
464+
*/
465+
// cSpell:enable
466+
},
467+
);
464468

465469
let has_reliable_f16 = target_info.supports_target_dependent_type(CType::Float16);
466470
let has_reliable_f128 = target_info.supports_target_dependent_type(CType::Float128);

0 commit comments

Comments
 (0)