[llvm] [AArch64] Prefer SVE2 for fixed-length i64 [S|U][MIN|MAX] reductions (PR #181161)

Paul Walker via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 16 08:50:30 PST 2026


================
@@ -708,21 +633,36 @@ entry:
 }
 
 define i64 @sminv_v3i64(<3 x i64> %a) {
-; CHECK-SD-LABEL: sminv_v3i64:
-; CHECK-SD:       // %bb.0: // %entry
-; CHECK-SD-NEXT:    // kill: def $d2 killed $d2 def $q2
-; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0
-; CHECK-SD-NEXT:    mov x8, #9223372036854775807 // =0x7fffffffffffffff
-; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 def $q1
-; CHECK-SD-NEXT:    mov v0.d[1], v1.d[0]
-; CHECK-SD-NEXT:    mov v2.d[1], x8
-; CHECK-SD-NEXT:    cmgt v1.2d, v2.2d, v0.2d
-; CHECK-SD-NEXT:    bif v0.16b, v2.16b, v1.16b
-; CHECK-SD-NEXT:    ext v1.16b, v0.16b, v0.16b, #8
-; CHECK-SD-NEXT:    cmgt d2, d1, d0
-; CHECK-SD-NEXT:    bif v0.8b, v1.8b, v2.8b
-; CHECK-SD-NEXT:    fmov x0, d0
-; CHECK-SD-NEXT:    ret
+; CHECK-SD-NOSVE-LABEL: sminv_v3i64:
+; CHECK-SD-NOSVE:       // %bb.0: // %entry
+; CHECK-SD-NOSVE-NEXT:    // kill: def $d2 killed $d2 def $q2
+; CHECK-SD-NOSVE-NEXT:    // kill: def $d0 killed $d0 def $q0
+; CHECK-SD-NOSVE-NEXT:    mov x8, #9223372036854775807 // =0x7fffffffffffffff
+; CHECK-SD-NOSVE-NEXT:    // kill: def $d1 killed $d1 def $q1
+; CHECK-SD-NOSVE-NEXT:    mov v0.d[1], v1.d[0]
+; CHECK-SD-NOSVE-NEXT:    mov v2.d[1], x8
+; CHECK-SD-NOSVE-NEXT:    cmgt v1.2d, v2.2d, v0.2d
+; CHECK-SD-NOSVE-NEXT:    bif v0.16b, v2.16b, v1.16b
+; CHECK-SD-NOSVE-NEXT:    ext v1.16b, v0.16b, v0.16b, #8
+; CHECK-SD-NOSVE-NEXT:    cmgt d2, d1, d0
+; CHECK-SD-NOSVE-NEXT:    bif v0.8b, v1.8b, v2.8b
+; CHECK-SD-NOSVE-NEXT:    fmov x0, d0
+; CHECK-SD-NOSVE-NEXT:    ret
+;
+; CHECK-SD-SVE2-LABEL: sminv_v3i64:
+; CHECK-SD-SVE2:       // %bb.0: // %entry
+; CHECK-SD-SVE2-NEXT:    // kill: def $d2 killed $d2 def $z2
+; CHECK-SD-SVE2-NEXT:    // kill: def $d0 killed $d0 def $z0
+; CHECK-SD-SVE2-NEXT:    mov x8, #9223372036854775807 // =0x7fffffffffffffff
+; CHECK-SD-SVE2-NEXT:    // kill: def $d1 killed $d1 def $q1
+; CHECK-SD-SVE2-NEXT:    ptrue p0.d, vl2
+; CHECK-SD-SVE2-NEXT:    mov v0.d[1], v1.d[0]
+; CHECK-SD-SVE2-NEXT:    mov v2.d[1], x8
+; CHECK-SD-SVE2-NEXT:    smin z0.d, p0/m, z0.d, z2.d
+; CHECK-SD-SVE2-NEXT:    ptrue p0.d, vl1
----------------
paulwalker-arm wrote:

Wasn't expecting to see it here but this is an example of what I mentioned above.  For sequences of v2i64 lowered nodes it would be nicer to use a single predicate throughout if possible.

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


More information about the llvm-commits mailing list