diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-09-03 19:13:25 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-03 19:13:25 +0200 |
| commit | 2f6e85567af202e5fd9f4e20c194396806fe949f (patch) | |
| tree | c910ab7653022b43dbe4d7689d41e5e7f1ffcfac | |
| parent | 1453cce5e9b1704e9e7a78fad513d233b752d94b (diff) | |
| parent | 5c0dfc61822c5844aaa153c9c772633a583ca2a7 (diff) | |
| download | rust-2f6e85567af202e5fd9f4e20c194396806fe949f.tar.gz rust-2f6e85567af202e5fd9f4e20c194396806fe949f.zip | |
Rollup merge of #129863 - RalfJung:target-spec-features, r=wesleywiser
update comment regarding TargetOptions.features The claim that `-Ctarget-features` cannot disable these features set in the target spec is definitely wrong -- I tried it for `x86_64-pc-windows-gnu`, which enables SSE3 that way. Building with `-Ctarget-feature=-sse3` works fine, and `cfg!(target_feature = "sse3")` is `false` in that build. There are also some indications that these are actually intended to be overwritten: https://github.com/rust-lang/rust/blob/3b14526cead4105f82c398d8d4c7954efa3bab6b/compiler/rustc_target/src/spec/targets/i686_unknown_uefi.rs#L22-L23 https://github.com/rust-lang/rust/blob/84ac80f1921afc243d71fd0caaa4f2838c294102/compiler/rustc_target/src/spec/targets/x86_64h_apple_darwin.rs#L18-L23 So... let's update the comment to match reality, I guess? The claim that they overwrite `-Ctarget-cpu` is based on - for `native`, the comment in the apple target spec quoted above - for other CPU strings, the assumption that `LLVMRustCreateTargetMachine` will apply these features after doing whatever the base CPU model does. I am not sure how to check that, I hope some LLVM backend people can chime in. :)
| -rw-r--r-- | compiler/rustc_target/src/spec/mod.rs | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs index f992ddf8417..e6b00c84254 100644 --- a/compiler/rustc_target/src/spec/mod.rs +++ b/compiler/rustc_target/src/spec/mod.rs @@ -2097,9 +2097,10 @@ pub struct TargetOptions { /// Default CPU to pass to LLVM. Corresponds to `llc -mcpu=$cpu`. Defaults /// to "generic". pub cpu: StaticCow<str>, - /// Default target features to pass to LLVM. These features will *always* be - /// passed, and cannot be disabled even via `-C`. Corresponds to `llc - /// -mattr=$features`. + /// Default target features to pass to LLVM. These features overwrite + /// `-Ctarget-cpu` but can be overwritten with `-Ctarget-features`. + /// Corresponds to `llc -mattr=$features`. + /// Note that these are LLVM feature names, not Rust feature names! pub features: StaticCow<str>, /// Direct or use GOT indirect to reference external data symbols pub direct_access_external_data: Option<bool>, |
