Skip to content

Commit

Permalink
Always include global target features in function attributes
Browse files Browse the repository at this point in the history
This ensures that information about target features configured with
`-C target-feature=...` or detected with `-C target-cpu=native` is
retained for subsequent consumers of LLVM bitcode.

This is crucial for linker plugin LTO, since this information is not
conveyed to the plugin otherwise.
  • Loading branch information
tmiasko committed Mar 4, 2022
1 parent b6f845f commit 095d818
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 10 deletions.
13 changes: 6 additions & 7 deletions compiler/rustc_codegen_llvm/src/attributes.rs
Expand Up @@ -378,13 +378,12 @@ pub fn from_fn_attrs<'ll, 'tcx>(
}
}

if !function_features.is_empty() {
let global_features = cx.tcx.global_backend_features(()).iter().map(|s| &s[..]);
let val = global_features
.chain(function_features.iter().map(|s| &s[..]))
.intersperse(",")
.collect::<SmallStr<1024>>();
to_add.push(llvm::CreateAttrStringValue(cx.llcx, "target-features", &val));
let global_features = cx.tcx.global_backend_features(()).iter().map(|s| s.as_str());
let function_features = function_features.iter().map(|s| s.as_str());
let target_features =
global_features.chain(function_features).intersperse(",").collect::<SmallStr<1024>>();
if !target_features.is_empty() {
to_add.push(llvm::CreateAttrStringValue(cx.llcx, "target-features", &target_features));
}

attributes::apply_to_llfn(llfn, Function, &to_add);
Expand Down
6 changes: 3 additions & 3 deletions src/test/codegen/target-feature-overrides.rs
Expand Up @@ -29,7 +29,7 @@ pub unsafe fn apple() -> u32 {
peach()
}

// target features same as global (not reflected or overriden in IR)
// target features same as global
#[no_mangle]
pub unsafe fn banana() -> u32 {
// CHECK-LABEL: @banana()
Expand All @@ -43,5 +43,5 @@ pub unsafe fn banana() -> u32 {
// COMPAT-SAME: "target-features"="+avx2,+avx,+avx"
// INCOMPAT-SAME: "target-features"="-avx2,-avx,+avx"
// CHECK: attributes [[BANANAATTRS]]
// CHECK-NOT: target-features
// CHECK-SAME: }
// COMPAT-SAME: "target-features"="+avx2,+avx"
// INCOMPAT-SAME: "target-features"="-avx2,-avx"

0 comments on commit 095d818

Please sign in to comment.