-
Notifications
You must be signed in to change notification settings - Fork 13k
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
vector miscompile from AArch64 backend #125989
Labels
Milestone
Comments
@llvm/issue-subscribers-backend-aarch64 Author: John Regehr (regehr)
please bear with me here, this is the best I could get out of llvm-reduce:
```llvm
define i16 @f(<8 x i16> %0) {
%2 = shufflevector <8 x i16> %0, <8 x i16> zeroinitializer, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 9, i32 7, i32 5, i32 3>
%3 = zext <8 x i16> %2 to <8 x i64>
%new0 = add <8 x i64> %3, %3
%last = trunc <8 x i64> %new0 to <8 x i16>
%4 = extractelement <8 x i16> %last, i32 0
ret i16 %4
}
```
Alive thinks (and I agree) that when this is called like this:
```
call i16 @f(<8 x i16> <i16 0, i16 3, i16 3, i16 3, i16 1, i16 3, i16 3, i16 3>)
```
the result should be 2.
but when I compile to AArch64 using current llc I get:
and this -- for that same input -- computes 0 cc @hatsunespica @nunoplopes |
Thanks for the report. I think performZExtDeinterleaveShuffleCombine might be missing an extra check for undef elements. |
davemgreen
added a commit
to davemgreen/llvm-project
that referenced
this issue
Feb 6, 2025
Given a zext from an extract vector, with a shuffle mask like <4, 0, 0, 4> we would previously recognize the top half as a deinterleave. In order to convert into a uzp we should have been checking that the bottom half is also undef. Fixes llvm#125989
davemgreen
added a commit
to davemgreen/llvm-project
that referenced
this issue
Feb 6, 2025
Given a zext from an extract vector, with a shuffle mask like <4, 0, 0, 4> we would previously recognize the top half as a deinterleave. In order to convert into a uzp we should have been checking that the bottom half is also undef. Fixes llvm#125989
/cherry-pick 2c43479 |
/pull-request #126263 |
swift-ci
pushed a commit
to swiftlang/llvm-project
that referenced
this issue
Feb 10, 2025
…ine (llvm#126054) Given a zext from an extract vector, with a shuffle mask like <4, 0, 0, 4> we would previously recognize the top half as a deinterleave. In order to convert into a uzp we should have been checking that the bottom half is also poison. Fixes llvm#125989 (cherry picked from commit 2c43479)
Icohedron
pushed a commit
to Icohedron/llvm-project
that referenced
this issue
Feb 11, 2025
…ine (llvm#126054) Given a zext from an extract vector, with a shuffle mask like <4, 0, 0, 4> we would previously recognize the top half as a deinterleave. In order to convert into a uzp we should have been checking that the bottom half is also poison. Fixes llvm#125989
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
please bear with me here, this is the best I could get out of llvm-reduce:
Alive thinks (and I agree) that when this is called like this:
the result should be 2.
but when I compile to AArch64 using current llc I get:
and this -- for that same input -- computes 0
cc @Hatsunespica @nunoplopes
The text was updated successfully, but these errors were encountered: