@@ -338,9 +338,8 @@ define i32 @test_eq0_multi_use_sub_i32(i32 %x0, i32 %x1) {
338338define i32 @test_eq_nonconst_sub_add_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
339339; CHECK-LABEL: test_eq_nonconst_sub_add_i32:
340340; CHECK: // %bb.0:
341- ; CHECK-NEXT: add w8, w0, w1
342- ; CHECK-NEXT: cmp w1, w2
343- ; CHECK-NEXT: sub w8, w8, w2
341+ ; CHECK-NEXT: subs w8, w1, w2
342+ ; CHECK-NEXT: add w8, w8, w0
344343; CHECK-NEXT: csel w0, wzr, w8, eq
345344; CHECK-NEXT: ret
346345 %cmp = icmp eq i32 %x1 , %x2
@@ -353,9 +352,8 @@ define i32 @test_eq_nonconst_sub_add_i32(i32 %x0, i32 %x1, i32 %x2) {
353352define i32 @test_ne_nonconst_sub_add_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
354353; CHECK-LABEL: test_ne_nonconst_sub_add_i32:
355354; CHECK: // %bb.0:
356- ; CHECK-NEXT: add w8, w0, w1
357- ; CHECK-NEXT: cmp w1, w2
358- ; CHECK-NEXT: sub w8, w8, w2
355+ ; CHECK-NEXT: subs w8, w1, w2
356+ ; CHECK-NEXT: add w8, w8, w0
359357; CHECK-NEXT: csel w0, wzr, w8, ne
360358; CHECK-NEXT: ret
361359 %cmp = icmp ne i32 %x1 , %x2
@@ -368,9 +366,8 @@ define i32 @test_ne_nonconst_sub_add_i32(i32 %x0, i32 %x1, i32 %x2) {
368366define i32 @test_ult_nonconst_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
369367; CHECK-LABEL: test_ult_nonconst_i32:
370368; CHECK: // %bb.0:
371- ; CHECK-NEXT: add w8, w0, w1
372- ; CHECK-NEXT: cmp w1, w2
373- ; CHECK-NEXT: sub w8, w8, w2
369+ ; CHECK-NEXT: subs w8, w1, w2
370+ ; CHECK-NEXT: add w8, w8, w0
374371; CHECK-NEXT: csel w0, wzr, w8, lo
375372; CHECK-NEXT: ret
376373 %cmp = icmp ult i32 %x1 , %x2
@@ -383,9 +380,8 @@ define i32 @test_ult_nonconst_i32(i32 %x0, i32 %x1, i32 %x2) {
383380define i32 @test_ule_nonconst_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
384381; CHECK-LABEL: test_ule_nonconst_i32:
385382; CHECK: // %bb.0:
386- ; CHECK-NEXT: add w8, w0, w1
387- ; CHECK-NEXT: cmp w1, w2
388- ; CHECK-NEXT: sub w8, w8, w2
383+ ; CHECK-NEXT: subs w8, w1, w2
384+ ; CHECK-NEXT: add w8, w8, w0
389385; CHECK-NEXT: csel w0, wzr, w8, ls
390386; CHECK-NEXT: ret
391387 %cmp = icmp ule i32 %x1 , %x2
@@ -398,9 +394,8 @@ define i32 @test_ule_nonconst_i32(i32 %x0, i32 %x1, i32 %x2) {
398394define i32 @test_ugt_nonconst_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
399395; CHECK-LABEL: test_ugt_nonconst_i32:
400396; CHECK: // %bb.0:
401- ; CHECK-NEXT: add w8, w0, w1
402- ; CHECK-NEXT: cmp w1, w2
403- ; CHECK-NEXT: sub w8, w8, w2
397+ ; CHECK-NEXT: subs w8, w1, w2
398+ ; CHECK-NEXT: add w8, w8, w0
404399; CHECK-NEXT: csel w0, wzr, w8, hi
405400; CHECK-NEXT: ret
406401 %cmp = icmp ugt i32 %x1 , %x2
@@ -413,9 +408,8 @@ define i32 @test_ugt_nonconst_i32(i32 %x0, i32 %x1, i32 %x2) {
413408define i32 @test_uge_nonconst_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
414409; CHECK-LABEL: test_uge_nonconst_i32:
415410; CHECK: // %bb.0:
416- ; CHECK-NEXT: add w8, w0, w1
417- ; CHECK-NEXT: cmp w1, w2
418- ; CHECK-NEXT: sub w8, w8, w2
411+ ; CHECK-NEXT: subs w8, w1, w2
412+ ; CHECK-NEXT: add w8, w8, w0
419413; CHECK-NEXT: csel w0, wzr, w8, hs
420414; CHECK-NEXT: ret
421415 %cmp = icmp uge i32 %x1 , %x2
@@ -428,9 +422,8 @@ define i32 @test_uge_nonconst_i32(i32 %x0, i32 %x1, i32 %x2) {
428422define i32 @test_slt_nonconst_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
429423; CHECK-LABEL: test_slt_nonconst_i32:
430424; CHECK: // %bb.0:
431- ; CHECK-NEXT: add w8, w0, w1
432- ; CHECK-NEXT: cmp w1, w2
433- ; CHECK-NEXT: sub w8, w8, w2
425+ ; CHECK-NEXT: subs w8, w1, w2
426+ ; CHECK-NEXT: add w8, w8, w0
434427; CHECK-NEXT: csel w0, wzr, w8, lt
435428; CHECK-NEXT: ret
436429 %cmp = icmp slt i32 %x1 , %x2
@@ -443,9 +436,8 @@ define i32 @test_slt_nonconst_i32(i32 %x0, i32 %x1, i32 %x2) {
443436define i32 @test_sle_nonconst_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
444437; CHECK-LABEL: test_sle_nonconst_i32:
445438; CHECK: // %bb.0:
446- ; CHECK-NEXT: add w8, w0, w1
447- ; CHECK-NEXT: cmp w1, w2
448- ; CHECK-NEXT: sub w8, w8, w2
439+ ; CHECK-NEXT: subs w8, w1, w2
440+ ; CHECK-NEXT: add w8, w8, w0
449441; CHECK-NEXT: csel w0, wzr, w8, le
450442; CHECK-NEXT: ret
451443 %cmp = icmp sle i32 %x1 , %x2
@@ -458,9 +450,8 @@ define i32 @test_sle_nonconst_i32(i32 %x0, i32 %x1, i32 %x2) {
458450define i32 @test_sgt_nonconst_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
459451; CHECK-LABEL: test_sgt_nonconst_i32:
460452; CHECK: // %bb.0:
461- ; CHECK-NEXT: add w8, w0, w1
462- ; CHECK-NEXT: cmp w1, w2
463- ; CHECK-NEXT: sub w8, w8, w2
453+ ; CHECK-NEXT: subs w8, w1, w2
454+ ; CHECK-NEXT: add w8, w8, w0
464455; CHECK-NEXT: csel w0, wzr, w8, gt
465456; CHECK-NEXT: ret
466457 %cmp = icmp sgt i32 %x1 , %x2
@@ -473,9 +464,8 @@ define i32 @test_sgt_nonconst_i32(i32 %x0, i32 %x1, i32 %x2) {
473464define i32 @test_sge_nonconst_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
474465; CHECK-LABEL: test_sge_nonconst_i32:
475466; CHECK: // %bb.0:
476- ; CHECK-NEXT: add w8, w0, w1
477- ; CHECK-NEXT: cmp w1, w2
478- ; CHECK-NEXT: sub w8, w8, w2
467+ ; CHECK-NEXT: subs w8, w1, w2
468+ ; CHECK-NEXT: add w8, w8, w0
479469; CHECK-NEXT: csel w0, wzr, w8, ge
480470; CHECK-NEXT: ret
481471 %cmp = icmp sge i32 %x1 , %x2
@@ -488,9 +478,8 @@ define i32 @test_sge_nonconst_i32(i32 %x0, i32 %x1, i32 %x2) {
488478define i32 @test_eq_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
489479; CHECK-LABEL: test_eq_nonconst_sub_add_comm_i32:
490480; CHECK: // %bb.0:
491- ; CHECK-NEXT: add w8, w0, w1
492- ; CHECK-NEXT: cmp w2, w1
493- ; CHECK-NEXT: sub w8, w8, w2
481+ ; CHECK-NEXT: subs w8, w1, w2
482+ ; CHECK-NEXT: add w8, w8, w0
494483; CHECK-NEXT: csel w0, wzr, w8, eq
495484; CHECK-NEXT: ret
496485 %cmp = icmp eq i32 %x2 , %x1
@@ -503,9 +492,8 @@ define i32 @test_eq_nonconst_sub_add_comm_i32(i32 %x0, i32 %x1, i32 %x2) {
503492define i32 @test_ne_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
504493; CHECK-LABEL: test_ne_nonconst_sub_add_comm_i32:
505494; CHECK: // %bb.0:
506- ; CHECK-NEXT: add w8, w0, w1
507- ; CHECK-NEXT: cmp w2, w1
508- ; CHECK-NEXT: sub w8, w8, w2
495+ ; CHECK-NEXT: subs w8, w1, w2
496+ ; CHECK-NEXT: add w8, w8, w0
509497; CHECK-NEXT: csel w0, wzr, w8, ne
510498; CHECK-NEXT: ret
511499 %cmp = icmp ne i32 %x2 , %x1
@@ -518,10 +506,9 @@ define i32 @test_ne_nonconst_sub_add_comm_i32(i32 %x0, i32 %x1, i32 %x2) {
518506define i32 @test_ult_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
519507; CHECK-LABEL: test_ult_nonconst_sub_add_comm_i32:
520508; CHECK: // %bb.0:
521- ; CHECK-NEXT: add w8, w0, w1
522- ; CHECK-NEXT: cmp w2, w1
523- ; CHECK-NEXT: sub w8, w8, w2
524- ; CHECK-NEXT: csel w0, wzr, w8, lo
509+ ; CHECK-NEXT: subs w8, w1, w2
510+ ; CHECK-NEXT: add w8, w8, w0
511+ ; CHECK-NEXT: csel w0, wzr, w8, hi
525512; CHECK-NEXT: ret
526513 %cmp = icmp ult i32 %x2 , %x1
527514 %add = add nuw i32 %x0 , %x1
@@ -533,10 +520,9 @@ define i32 @test_ult_nonconst_sub_add_comm_i32(i32 %x0, i32 %x1, i32 %x2) {
533520define i32 @test_ule_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
534521; CHECK-LABEL: test_ule_nonconst_sub_add_comm_i32:
535522; CHECK: // %bb.0:
536- ; CHECK-NEXT: add w8, w0, w1
537- ; CHECK-NEXT: cmp w2, w1
538- ; CHECK-NEXT: sub w8, w8, w2
539- ; CHECK-NEXT: csel w0, wzr, w8, ls
523+ ; CHECK-NEXT: subs w8, w1, w2
524+ ; CHECK-NEXT: add w8, w8, w0
525+ ; CHECK-NEXT: csel w0, wzr, w8, hs
540526; CHECK-NEXT: ret
541527 %cmp = icmp ule i32 %x2 , %x1
542528 %add = add nuw i32 %x0 , %x1
@@ -548,10 +534,9 @@ define i32 @test_ule_nonconst_sub_add_comm_i32(i32 %x0, i32 %x1, i32 %x2) {
548534define i32 @test_ugt_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
549535; CHECK-LABEL: test_ugt_nonconst_sub_add_comm_i32:
550536; CHECK: // %bb.0:
551- ; CHECK-NEXT: add w8, w0, w1
552- ; CHECK-NEXT: cmp w2, w1
553- ; CHECK-NEXT: sub w8, w8, w2
554- ; CHECK-NEXT: csel w0, wzr, w8, hi
537+ ; CHECK-NEXT: subs w8, w1, w2
538+ ; CHECK-NEXT: add w8, w8, w0
539+ ; CHECK-NEXT: csel w0, wzr, w8, lo
555540; CHECK-NEXT: ret
556541 %cmp = icmp ugt i32 %x2 , %x1
557542 %add = add nuw i32 %x0 , %x1
@@ -563,10 +548,9 @@ define i32 @test_ugt_nonconst_sub_add_comm_i32(i32 %x0, i32 %x1, i32 %x2) {
563548define i32 @test_uge_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
564549; CHECK-LABEL: test_uge_nonconst_sub_add_comm_i32:
565550; CHECK: // %bb.0:
566- ; CHECK-NEXT: add w8, w0, w1
567- ; CHECK-NEXT: cmp w2, w1
568- ; CHECK-NEXT: sub w8, w8, w2
569- ; CHECK-NEXT: csel w0, wzr, w8, hs
551+ ; CHECK-NEXT: subs w8, w1, w2
552+ ; CHECK-NEXT: add w8, w8, w0
553+ ; CHECK-NEXT: csel w0, wzr, w8, ls
570554; CHECK-NEXT: ret
571555 %cmp = icmp uge i32 %x2 , %x1
572556 %add = add nuw i32 %x0 , %x1
@@ -578,10 +562,9 @@ define i32 @test_uge_nonconst_sub_add_comm_i32(i32 %x0, i32 %x1, i32 %x2) {
578562define i32 @test_slt_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
579563; CHECK-LABEL: test_slt_nonconst_sub_add_comm_i32:
580564; CHECK: // %bb.0:
581- ; CHECK-NEXT: add w8, w0, w1
582- ; CHECK-NEXT: cmp w2, w1
583- ; CHECK-NEXT: sub w8, w8, w2
584- ; CHECK-NEXT: csel w0, wzr, w8, lt
565+ ; CHECK-NEXT: subs w8, w1, w2
566+ ; CHECK-NEXT: add w8, w8, w0
567+ ; CHECK-NEXT: csel w0, wzr, w8, gt
585568; CHECK-NEXT: ret
586569 %cmp = icmp slt i32 %x2 , %x1
587570 %add = add nuw i32 %x0 , %x1
@@ -593,10 +576,9 @@ define i32 @test_slt_nonconst_sub_add_comm_i32(i32 %x0, i32 %x1, i32 %x2) {
593576define i32 @test_sle_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
594577; CHECK-LABEL: test_sle_nonconst_sub_add_comm_i32:
595578; CHECK: // %bb.0:
596- ; CHECK-NEXT: add w8, w0, w1
597- ; CHECK-NEXT: cmp w2, w1
598- ; CHECK-NEXT: sub w8, w8, w2
599- ; CHECK-NEXT: csel w0, wzr, w8, le
579+ ; CHECK-NEXT: subs w8, w1, w2
580+ ; CHECK-NEXT: add w8, w8, w0
581+ ; CHECK-NEXT: csel w0, wzr, w8, ge
600582; CHECK-NEXT: ret
601583 %cmp = icmp sle i32 %x2 , %x1
602584 %add = add nuw i32 %x0 , %x1
@@ -608,10 +590,9 @@ define i32 @test_sle_nonconst_sub_add_comm_i32(i32 %x0, i32 %x1, i32 %x2) {
608590define i32 @test_sgt_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
609591; CHECK-LABEL: test_sgt_nonconst_sub_add_comm_i32:
610592; CHECK: // %bb.0:
611- ; CHECK-NEXT: add w8, w0, w1
612- ; CHECK-NEXT: cmp w2, w1
613- ; CHECK-NEXT: sub w8, w8, w2
614- ; CHECK-NEXT: csel w0, wzr, w8, gt
593+ ; CHECK-NEXT: subs w8, w1, w2
594+ ; CHECK-NEXT: add w8, w8, w0
595+ ; CHECK-NEXT: csel w0, wzr, w8, lt
615596; CHECK-NEXT: ret
616597 %cmp = icmp sgt i32 %x2 , %x1
617598 %add = add nuw i32 %x0 , %x1
@@ -623,10 +604,9 @@ define i32 @test_sgt_nonconst_sub_add_comm_i32(i32 %x0, i32 %x1, i32 %x2) {
623604define i32 @test_sge_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
624605; CHECK-LABEL: test_sge_nonconst_sub_add_comm_i32:
625606; CHECK: // %bb.0:
626- ; CHECK-NEXT: add w8, w0, w1
627- ; CHECK-NEXT: cmp w2, w1
628- ; CHECK-NEXT: sub w8, w8, w2
629- ; CHECK-NEXT: csel w0, wzr, w8, ge
607+ ; CHECK-NEXT: subs w8, w1, w2
608+ ; CHECK-NEXT: add w8, w8, w0
609+ ; CHECK-NEXT: csel w0, wzr, w8, le
630610; CHECK-NEXT: ret
631611 %cmp = icmp sge i32 %x2 , %x1
632612 %add = add nuw i32 %x0 , %x1
0 commit comments