-
Notifications
You must be signed in to change notification settings - Fork 13.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Bad codegen for widen followed by ARM vdupq_n_*
#137407
Comments
This comment has been minimized.
This comment has been minimized.
@jieyouxu Rust 1.82 would be the LLVM 19 upgrade. |
Yeah sorry somehow I didn't notice the 1.82 |
@rustbot label +A-SIMD +O-aarch64 |
Upstream issue: llvm/llvm-project#128349 |
WG-prioritization assigning priority (Zulip discussion). @rustbot label -I-prioritize +P-medium |
Looks like Rust is using a non-canonical pattern for vector splat generation: https://github.com/rust-lang/stdarch/blob/1c6113f37b44baeb3364867f52bd67a3f70e7a6f/crates/core_arch/src/simd.rs#L25-L34 We shouldn't go through a 1-element vector here. We probably need to add a simd_splat intrinsic to generate the correct form. |
bisects to #128866 , and more specifically rust-lang/stdarch@7365074 cc @scottmcm FYI, although I'm not sure this is actionable by you. @rustbot label: -E-needs-bisection +S-has-bisection |
Code
I tried this code:
I expected to see this happen: The compiled output would use the
dup
instructionInstead, this happened: The compiled output uses a bunch of
mov
s insteadGodbolt
Version it worked on
It most recently worked on: Rust 1.81.0
Version with regression
rustc --version --verbose
:and
The text was updated successfully, but these errors were encountered: