@@ -9,7 +9,8 @@ define i8 @abd_ext_i8(i8 %a, i8 %b) nounwind {
99; CHECK-LABEL: abd_ext_i8:
1010; CHECK: // %bb.0:
1111; CHECK-NEXT: and w8, w0, #0xff
12- ; CHECK-NEXT: subs w8, w8, w1, uxtb
12+ ; CHECK-NEXT: sub w8, w8, w1, uxtb
13+ ; CHECK-NEXT: cmp w8, #0
1314; CHECK-NEXT: cneg w0, w8, mi
1415; CHECK-NEXT: ret
1516 %aext = zext i8 %a to i64
@@ -24,7 +25,8 @@ define i8 @abd_ext_i8_i16(i8 %a, i16 %b) nounwind {
2425; CHECK-LABEL: abd_ext_i8_i16:
2526; CHECK: // %bb.0:
2627; CHECK-NEXT: and w8, w0, #0xff
27- ; CHECK-NEXT: subs w8, w8, w1, uxth
28+ ; CHECK-NEXT: sub w8, w8, w1, uxth
29+ ; CHECK-NEXT: cmp w8, #0
2830; CHECK-NEXT: cneg w0, w8, mi
2931; CHECK-NEXT: ret
3032 %aext = zext i8 %a to i64
@@ -39,7 +41,8 @@ define i8 @abd_ext_i8_undef(i8 %a, i8 %b) nounwind {
3941; CHECK-LABEL: abd_ext_i8_undef:
4042; CHECK: // %bb.0:
4143; CHECK-NEXT: and w8, w0, #0xff
42- ; CHECK-NEXT: subs w8, w8, w1, uxtb
44+ ; CHECK-NEXT: sub w8, w8, w1, uxtb
45+ ; CHECK-NEXT: cmp w8, #0
4346; CHECK-NEXT: cneg w0, w8, mi
4447; CHECK-NEXT: ret
4548 %aext = zext i8 %a to i64
@@ -54,7 +57,8 @@ define i16 @abd_ext_i16(i16 %a, i16 %b) nounwind {
5457; CHECK-LABEL: abd_ext_i16:
5558; CHECK: // %bb.0:
5659; CHECK-NEXT: and w8, w0, #0xffff
57- ; CHECK-NEXT: subs w8, w8, w1, uxth
60+ ; CHECK-NEXT: sub w8, w8, w1, uxth
61+ ; CHECK-NEXT: cmp w8, #0
5862; CHECK-NEXT: cneg w0, w8, mi
5963; CHECK-NEXT: ret
6064 %aext = zext i16 %a to i64
@@ -84,7 +88,8 @@ define i16 @abd_ext_i16_undef(i16 %a, i16 %b) nounwind {
8488; CHECK-LABEL: abd_ext_i16_undef:
8589; CHECK: // %bb.0:
8690; CHECK-NEXT: and w8, w0, #0xffff
87- ; CHECK-NEXT: subs w8, w8, w1, uxth
91+ ; CHECK-NEXT: sub w8, w8, w1, uxth
92+ ; CHECK-NEXT: cmp w8, #0
8893; CHECK-NEXT: cneg w0, w8, mi
8994; CHECK-NEXT: ret
9095 %aext = zext i16 %a to i64
@@ -213,7 +218,8 @@ define i8 @abd_minmax_i8(i8 %a, i8 %b) nounwind {
213218; CHECK-LABEL: abd_minmax_i8:
214219; CHECK: // %bb.0:
215220; CHECK-NEXT: and w8, w0, #0xff
216- ; CHECK-NEXT: subs w8, w8, w1, uxtb
221+ ; CHECK-NEXT: sub w8, w8, w1, uxtb
222+ ; CHECK-NEXT: cmp w8, #0
217223; CHECK-NEXT: cneg w0, w8, mi
218224; CHECK-NEXT: ret
219225 %min = call i8 @llvm.umin.i8 (i8 %a , i8 %b )
@@ -226,7 +232,8 @@ define i16 @abd_minmax_i16(i16 %a, i16 %b) nounwind {
226232; CHECK-LABEL: abd_minmax_i16:
227233; CHECK: // %bb.0:
228234; CHECK-NEXT: and w8, w0, #0xffff
229- ; CHECK-NEXT: subs w8, w8, w1, uxth
235+ ; CHECK-NEXT: sub w8, w8, w1, uxth
236+ ; CHECK-NEXT: cmp w8, #0
230237; CHECK-NEXT: cneg w0, w8, mi
231238; CHECK-NEXT: ret
232239 %min = call i16 @llvm.umin.i16 (i16 %a , i16 %b )
@@ -285,7 +292,8 @@ define i8 @abd_cmp_i8(i8 %a, i8 %b) nounwind {
285292; CHECK-LABEL: abd_cmp_i8:
286293; CHECK: // %bb.0:
287294; CHECK-NEXT: and w8, w0, #0xff
288- ; CHECK-NEXT: subs w8, w8, w1, uxtb
295+ ; CHECK-NEXT: sub w8, w8, w1, uxtb
296+ ; CHECK-NEXT: cmp w8, #0
289297; CHECK-NEXT: cneg w0, w8, mi
290298; CHECK-NEXT: ret
291299 %cmp = icmp ugt i8 %a , %b
@@ -299,7 +307,8 @@ define i16 @abd_cmp_i16(i16 %a, i16 %b) nounwind {
299307; CHECK-LABEL: abd_cmp_i16:
300308; CHECK: // %bb.0:
301309; CHECK-NEXT: and w8, w0, #0xffff
302- ; CHECK-NEXT: subs w8, w8, w1, uxth
310+ ; CHECK-NEXT: sub w8, w8, w1, uxth
311+ ; CHECK-NEXT: cmp w8, #0
303312; CHECK-NEXT: cneg w0, w8, mi
304313; CHECK-NEXT: ret
305314 %cmp = icmp uge i16 %a , %b
@@ -362,8 +371,12 @@ define i64 @vector_legalized(i16 %a, i16 %b) {
362371; CHECK-LABEL: vector_legalized:
363372; CHECK: // %bb.0:
364373; CHECK-NEXT: and w8, w0, #0xffff
365- ; CHECK-NEXT: subs w8, w8, w1, uxth
366- ; CHECK-NEXT: cneg w0, w8, mi
374+ ; CHECK-NEXT: sub w8, w8, w1, uxth
375+ ; CHECK-NEXT: cmp w8, #0
376+ ; CHECK-NEXT: addp d0, v0.2d
377+ ; CHECK-NEXT: cneg w8, w8, mi
378+ ; CHECK-NEXT: fmov x9, d0
379+ ; CHECK-NEXT: add x0, x9, x8
367380; CHECK-NEXT: ret
368381 %ea = zext i16 %a to i32
369382 %eb = zext i16 %b to i32
@@ -383,7 +396,8 @@ define i8 @abd_select_i8(i8 %a, i8 %b) nounwind {
383396; CHECK-LABEL: abd_select_i8:
384397; CHECK: // %bb.0:
385398; CHECK-NEXT: and w8, w0, #0xff
386- ; CHECK-NEXT: subs w8, w8, w1, uxtb
399+ ; CHECK-NEXT: sub w8, w8, w1, uxtb
400+ ; CHECK-NEXT: cmp w8, #0
387401; CHECK-NEXT: cneg w0, w8, mi
388402; CHECK-NEXT: ret
389403 %cmp = icmp ult i8 %a , %b
@@ -397,7 +411,8 @@ define i16 @abd_select_i16(i16 %a, i16 %b) nounwind {
397411; CHECK-LABEL: abd_select_i16:
398412; CHECK: // %bb.0:
399413; CHECK-NEXT: and w8, w0, #0xffff
400- ; CHECK-NEXT: subs w8, w8, w1, uxth
414+ ; CHECK-NEXT: sub w8, w8, w1, uxth
415+ ; CHECK-NEXT: cmp w8, #0
401416; CHECK-NEXT: cneg w0, w8, mi
402417; CHECK-NEXT: ret
403418 %cmp = icmp ule i16 %a , %b
0 commit comments