[llvm] [AArch64][SelectionDAG][SVE] Fold following extend(icmp) patterns (PR #192052)

Ricardo Jesus via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 15 04:56:17 PDT 2026


================
@@ -1086,17 +2044,66 @@ define void @icmp_sge_v16i16(ptr %a) {
 }
 
 define void @icmp_sgt_v8i32(ptr %a) {
-; CHECK-LABEL: icmp_sgt_v8i32:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    ldp q0, q1, [x0]
-; CHECK-NEXT:    ptrue p0.s, vl4
-; CHECK-NEXT:    cmpgt p1.s, p0/z, z0.s, #-8
-; CHECK-NEXT:    cmpgt p2.s, p0/z, z1.s, #-8
-; CHECK-NEXT:    mov z0.s, p1/z, #-1 // =0xffffffffffffffff
-; CHECK-NEXT:    mov z1.s, p2/z, #-1 // =0xffffffffffffffff
-; CHECK-NEXT:    stp q0, q1, [x0]
-; CHECK-NEXT:    ret
+; CHECK-SVE-LABEL: icmp_sgt_v8i32:
+; CHECK-SVE:       // %bb.0:
+; CHECK-SVE-NEXT:    ldp q0, q1, [x0]
+; CHECK-SVE-NEXT:    ptrue p0.s, vl4
+; CHECK-SVE-NEXT:    cmpgt p1.s, p0/z, z0.s, #-8
+; CHECK-SVE-NEXT:    cmpgt p2.s, p0/z, z1.s, #-8
+; CHECK-SVE-NEXT:    mov z0.s, p1/z, #-1 // =0xffffffffffffffff
+; CHECK-SVE-NEXT:    mov z1.s, p2/z, #-1 // =0xffffffffffffffff
+; CHECK-SVE-NEXT:    stp q0, q1, [x0]
+; CHECK-SVE-NEXT:    ret
 ;
+; CHECK-SME-LABEL: icmp_sgt_v8i32:
+; CHECK-SME:       // %bb.0:
+; CHECK-SME-NEXT:    mov z0.s, #-8 // =0xfffffffffffffff8
----------------
rj-jesus wrote:

When one of the operands is a splat, the CMP<cc> (immediate) form might be preferable.

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


More information about the llvm-commits mailing list