[llvm] [AArch64] Fold BUILD_VECTORs splats into users by using SVE immediates (PR #165559)

Benjamin Maxwell via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 6 02:55:06 PST 2025


================
@@ -385,11 +385,11 @@ define <4 x i32> @amull_v4i16_v4i32(ptr %A, ptr %B) nounwind {
 ;
 ; CHECK-SVE-LABEL: amull_v4i16_v4i32:
 ; CHECK-SVE:       // %bb.0:
-; CHECK-SVE-NEXT:    ldr d1, [x0]
-; CHECK-SVE-NEXT:    ldr d2, [x1]
-; CHECK-SVE-NEXT:    movi v0.2d, #0x00ffff0000ffff
-; CHECK-SVE-NEXT:    smull v1.4s, v1.4h, v2.4h
-; CHECK-SVE-NEXT:    and v0.16b, v1.16b, v0.16b
+; CHECK-SVE-NEXT:    ldr d0, [x0]
+; CHECK-SVE-NEXT:    ldr d1, [x1]
+; CHECK-SVE-NEXT:    smull v0.4s, v0.4h, v1.4h
+; CHECK-SVE-NEXT:    and z0.s, z0.s, #0xffff
+; CHECK-SVE-NEXT:    // kill: def $q0 killed $q0 killed $z0
----------------
MacDue wrote:

It seems like it'd be easier to match before the `ConstantBuildVector` lowering, which can lower the build vector into many different forms. 

https://github.com/llvm/llvm-project/pull/165559


More information about the llvm-commits mailing list