[llvm] [SDAG] Shrink (abd? (?ext x) (?ext y)) (PR #171865)

via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 11 11:27:19 PST 2025


================
@@ -1952,3 +1952,132 @@ define <8 x i16> @pr88784_fixed(<8 x i8> %l0, <8 x i8> %l1, <8 x i16> %l2) {
   ret <8 x i16> %l9
 }
 
+define <16 x i16> @sabd16b_i16(<16 x i8> %a, <16 x i8> %b) {
+; CHECK-SD-LABEL: sabd16b_i16:
+; CHECK-SD:       // %bb.0:
+; CHECK-SD-NEXT:    sabd.16b v0, v0, v1
+; CHECK-SD-NEXT:    ushll2.8h v1, v0, #0
+; CHECK-SD-NEXT:    ushll.8h v0, v0, #0
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: sabd16b_i16:
+; CHECK-GI:       // %bb.0:
+; CHECK-GI-NEXT:    sshll.8h v2, v0, #0
+; CHECK-GI-NEXT:    sshll.8h v3, v1, #0
+; CHECK-GI-NEXT:    sshll2.8h v4, v0, #0
+; CHECK-GI-NEXT:    sshll2.8h v5, v1, #0
+; CHECK-GI-NEXT:    ssubl.8h v6, v0, v1
+; CHECK-GI-NEXT:    ssubl2.8h v7, v0, v1
+; CHECK-GI-NEXT:    cmgt.8h v2, v3, v2
+; CHECK-GI-NEXT:    cmgt.8h v3, v5, v4
+; CHECK-GI-NEXT:    ssubl.8h v4, v1, v0
+; CHECK-GI-NEXT:    ssubl2.8h v1, v1, v0
+; CHECK-GI-NEXT:    mov.16b v0, v2
+; CHECK-GI-NEXT:    bif.16b v1, v7, v3
+; CHECK-GI-NEXT:    bsl.16b v0, v4, v6
+; CHECK-GI-NEXT:    ret
+  %aext = sext <16 x i8> %a to <16 x i16>
+  %bext = sext <16 x i8> %b to <16 x i16>
+  %abdiff = sub nsw <16 x i16> %aext, %bext
+  %abcmp = icmp slt <16 x i16> %aext, %bext
+  %ababs = sub nsw <16 x i16> %bext, %aext
+  %absel = select <16 x i1> %abcmp, <16 x i16> %ababs, <16 x i16> %abdiff
+  %reduced_v = call i16 @llvm.vector.reduce.add.v16i16(<16 x i16> %absel)
----------------
natanelh-mobileye wrote:

```suggestion
```

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


More information about the llvm-commits mailing list