[llvm] [SLP]Model gathers of extracted integer sub-fields as bitcast+permute+ext (PR #224919)
Alexey Bataev via llvm-commits
llvm-commits at lists.llvm.org
Sun Sep 27 12:36:17 PDT 2026
alexey-bataev wrote:
> AI flagged a miscompile introduced by this change (https://alive2.llvm.org/ce/z/XkhM6F):
>
> ```llvm
> define i32 @src(i32 %x) {
> %t0 = trunc i32 %x to i8
> %s1 = lshr i32 %x, 8
> %t1 = trunc i32 %s1 to i8
> %s2 = lshr i32 %x, 16
> %t2 = trunc i32 %s2 to i8
> %s3 = lshr i32 %x, 24
> %t3 = trunc i32 %s3 to i8
> %f0 = zext i8 %t0 to i32
> %f1 = zext i8 %t1 to i32
> %f2 = zext i8 %t2 to i32
> %f3 = zext i8 %t3 to i32
> %a = add i32 %f2, %f0
> %b = add i32 %a, %f3
> %c = add i32 %b, %f1
> %d = add i32 %c, %f3
> %e = add i32 %d, %f3
> ret i32 %e
> }
>
> define i32 @tgt(i32 %x) {
> %1 = bitcast i32 %x to <4 x i8>
> %2 = zext <4 x i8> %1 to <4 x i16>
> %3 = zext <4 x i16> %2 to <4 x i32>
> %4 = mul <4 x i32> %3, <i32 3, i32 1, i32 1, i32 1>
> %5 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %4)
> ret i32 %5
> }
> ```
>
> Mul constant is in the wrong order.
Fixed in eea552937b1e30c8b74bf3748cccab1357dd0d57
https://github.com/llvm/llvm-project/pull/224919
More information about the llvm-commits
mailing list