[llvm] [SelectionDAG][AArch64][X86] Don't scalarize vector smul.fix.sat/umul.fix.sat (PR #209351)

David Green via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 14 05:30:12 PDT 2026


================
@@ -107,29 +106,32 @@ define <2 x i32> @vec(<2 x i32> %x, <2 x i32> %y) nounwind {
 define <4 x i32> @vec2(<4 x i32> %x, <4 x i32> %y) nounwind {
 ; CHECK-LABEL: vec2:
 ; CHECK:       // %bb.0:
-; CHECK-NEXT:    mov w8, v1.s[1]
-; CHECK-NEXT:    mov w9, v0.s[1]
-; CHECK-NEXT:    fmov w10, s0
-; CHECK-NEXT:    mov w11, v0.s[2]
-; CHECK-NEXT:    mov w13, v0.s[3]
-; CHECK-NEXT:    mov w12, v1.s[3]
-; CHECK-NEXT:    umull x8, w9, w8
-; CHECK-NEXT:    fmov w9, s1
-; CHECK-NEXT:    umull x9, w10, w9
-; CHECK-NEXT:    tst x8, #0xffffffff00000000
-; CHECK-NEXT:    mov w10, v1.s[2]
-; CHECK-NEXT:    csinv w8, w8, wzr, eq
-; CHECK-NEXT:    tst x9, #0xffffffff00000000
+; CHECK-NEXT:    umull2 v2.2d, v0.4s, v1.4s
+; CHECK-NEXT:    umull v3.2d, v0.2s, v1.2s
+; CHECK-NEXT:    mul v0.4s, v0.4s, v1.4s
+; CHECK-NEXT:    uzp2 v2.4s, v3.4s, v2.4s
+; CHECK-NEXT:    add v3.4s, v2.4s, v2.4s
+; CHECK-NEXT:    mov w8, v2.s[1]
+; CHECK-NEXT:    shl v1.4s, v3.4s, #31
+; CHECK-NEXT:    cmp w8, #0
+; CHECK-NEXT:    fmov w8, s2
+; CHECK-NEXT:    orr v1.16b, v1.16b, v0.16b
+; CHECK-NEXT:    mov w9, v1.s[1]
+; CHECK-NEXT:    fmov w10, s1
+; CHECK-NEXT:    mov w11, v1.s[2]
 ; CHECK-NEXT:    csinv w9, w9, wzr, eq
-; CHECK-NEXT:    fmov s0, w9
-; CHECK-NEXT:    umull x9, w11, w10
-; CHECK-NEXT:    mov v0.s[1], w8
-; CHECK-NEXT:    tst x9, #0xffffffff00000000
-; CHECK-NEXT:    csinv w8, w9, wzr, eq
-; CHECK-NEXT:    umull x9, w13, w12
-; CHECK-NEXT:    mov v0.s[2], w8
-; CHECK-NEXT:    tst x9, #0xffffffff00000000
-; CHECK-NEXT:    csinv w8, w9, wzr, eq
+; CHECK-NEXT:    cmp w8, #0
+; CHECK-NEXT:    mov w8, v2.s[2]
+; CHECK-NEXT:    csinv w10, w10, wzr, eq
+; CHECK-NEXT:    fmov s0, w10
+; CHECK-NEXT:    cmp w8, #0
+; CHECK-NEXT:    mov w8, v1.s[3]
+; CHECK-NEXT:    mov v0.s[1], w9
+; CHECK-NEXT:    mov w9, v2.s[3]
+; CHECK-NEXT:    csinv w10, w11, wzr, eq
+; CHECK-NEXT:    mov v0.s[2], w10
+; CHECK-NEXT:    cmp w9, #0
+; CHECK-NEXT:    csinv w8, w8, wzr, eq
----------------
davemgreen wrote:

It looks like this is still expanding the select_cc?

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


More information about the llvm-commits mailing list