target_features: sse (or at least avx2) is incompatible with soft-float ABI - #160302
target_features: sse (or at least avx2) is incompatible with soft-float ABI#160302RalfJung wants to merge 2 commits into
Conversation
|
r? @khyperia rustbot has assigned @khyperia. Use Why was this reviewer chosen?The reviewer was selected based on:
|
|
r? @workingjubilee or @dianqk |
|
|
|
Hm unfortunately it seems like LLVM does not crash on all functions with #[unsafe(no_mangle)]
#[target_feature(enable = "avx2")]
pub fn foobar(x: __m256i, y: __m256i) -> __m256i {
_mm256_or_si256(x, y)
}So we may have to add an FCW for this after all. @tarcieri do you know which function is causing the trouble in dalek-cryptography/curve25519-dalek#601? All we know is that it's somewhere in poly1305... |
|
Okay I have a reproducer: #![no_std]
use core::arch::x86_64::*;
#[unsafe(no_mangle)]
#[target_feature(enable = "avx2")]
pub fn foobar(ptr: *const __m256i) -> __m256i { unsafe {
let key = _mm256_loadu_si256(ptr);
_mm256_and_si256(
_mm256_permutevar8x32_epi32(key, _mm256_set_epi32(3, 7, 2, 6, 1, 5, 0, 4)),
_mm256_set_epi32(0, -1, 0, -1, 0, -1, 0, -1),
)
}} |
58062d1 to
21a23e9
Compare
|
I don't know these features on x86, but the PR seems reasonable to me. |
|
With Nikita on vacation, who might know which features LLVM supports on x86 in combination with But I guess we can also just warn about all vector features (as this PR does now) and if we get issues saying sse actually works fine we can always adjust. 🤷 |
|
FWIW the s390x target also has a "soft-float" target feature and there we already mark "vector" as incompatible. ARM also has "soft-float" and there we don't mark anything. ARM also has much more explicit ABI control so maybe setting |
This comment has been minimized.
This comment has been minimized.
21a23e9 to
5594310
Compare
This comment has been minimized.
This comment has been minimized.
|
@traviscross has proposed to merge this. The next step is review by the rest of the tagged team members: No concerns currently listed. Once a majority of reviewers approve (and at most 2 approvals are outstanding), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up! cc @rust-lang/lang-advisors: FCP proposed for lang, please feel free to register concerns. |
|
This seems fine, as long as we only reject an explicit request for the combination of these features, but don't reject the use of soft-float on x86-64 targets where the baseline has SSE/SSE2 available. (If that case also causes breakage, that'd be more urgent to fix since it'd prevent all usage of soft-float on x86-64.) @rfcbot reviewed |
|
🔔 This is now entering its final comment period, as per the review above. 🔔 |
I am not sure what you mean by that... but if you mean |
|
@workingjubilee reminder that this is waiting for review (in parallel with FCP). :) |
|
Oh yes. I actually had started taking a look earlier today, just had gotten interrupted. |
This comment has been minimized.
This comment has been minimized.
2448058 to
2c87740
Compare
|
This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. |
|
The final comment period, with a disposition to merge, as per the review above, is now complete. As the automated representative of the governance process, I would like to thank the author for their work and everyone else who contributed. |
|
@bors r=workingjubilee rollup |
…kingjubilee target_features: sse (or at least avx2) is incompatible with soft-float ABI Fixes rust-lang#117938 Enabling both the avx2 and soft-float target features is [not supported by LLVM](rust-lang#117938 (comment)) and can crash the backend. Let's preempt that with rust-level checks. (I still think there's also an LLVM bug here, it shouldn't just SIGILL on unexpected target feature configurations, but that's a different discussion.) What is not clear to me is whether this just affects just avx2 or also avx or even sse (we don't support mmx/3dnow separately). @dianqk do you know more about this? To be safe, let's reject "sse" and therefore by implication also all other x86 vector target features. This PR turns `#[target_feature(enable = "sse")]` on a softfloat target into an FCW similar to what we do on aarch64 (see rust-lang#135160). The FCW only affects people building for soft-float targets which is a fairly small percentage of our overall users (and which means we cannot meaningfully crater this). I hence went for "report in deps" immediately so that the people building the actual binaries see these warnings that their upstreams probably will never see.
…kingjubilee target_features: sse (or at least avx2) is incompatible with soft-float ABI Fixes rust-lang#117938 Enabling both the avx2 and soft-float target features is [not supported by LLVM](rust-lang#117938 (comment)) and can crash the backend. Let's preempt that with rust-level checks. (I still think there's also an LLVM bug here, it shouldn't just SIGILL on unexpected target feature configurations, but that's a different discussion.) What is not clear to me is whether this just affects just avx2 or also avx or even sse (we don't support mmx/3dnow separately). @dianqk do you know more about this? To be safe, let's reject "sse" and therefore by implication also all other x86 vector target features. This PR turns `#[target_feature(enable = "sse")]` on a softfloat target into an FCW similar to what we do on aarch64 (see rust-lang#135160). The FCW only affects people building for soft-float targets which is a fairly small percentage of our overall users (and which means we cannot meaningfully crater this). I hence went for "report in deps" immediately so that the people building the actual binaries see these warnings that their upstreams probably will never see.
View all comments
Fixes #117938
Enabling both the avx2 and soft-float target features is not supported by LLVM and can crash the backend. Let's preempt that with rust-level checks. (I still think there's also an LLVM bug here, it shouldn't just SIGILL on unexpected target feature configurations, but that's a different discussion.)
What is not clear to me is whether this just affects just avx2 or also avx or even sse (we don't support mmx/3dnow separately). @dianqk do you know more about this? To be safe, let's reject "sse" and therefore by implication also all other x86 vector target features.
This PR turns
#[target_feature(enable = "sse")]on a softfloat target into an FCW similar to what we do on aarch64 (see #135160). The FCW only affects people building for soft-float targets which is a fairly small percentage of our overall users (and which means we cannot meaningfully crater this). I hence went for "report in deps" immediately so that the people building the actual binaries see these warnings that their upstreams probably will never see.