@@ -338,9 +338,8 @@ define i32 @test_eq0_multi_use_sub_i32(i32 %x0, i32 %x1) {
338
338
define i32 @test_eq_nonconst_sub_add_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
339
339
; CHECK-LABEL: test_eq_nonconst_sub_add_i32:
340
340
; 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
344
343
; CHECK-NEXT: csel w0, wzr, w8, eq
345
344
; CHECK-NEXT: ret
346
345
%cmp = icmp eq i32 %x1 , %x2
@@ -353,9 +352,8 @@ define i32 @test_eq_nonconst_sub_add_i32(i32 %x0, i32 %x1, i32 %x2) {
353
352
define i32 @test_ne_nonconst_sub_add_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
354
353
; CHECK-LABEL: test_ne_nonconst_sub_add_i32:
355
354
; 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
359
357
; CHECK-NEXT: csel w0, wzr, w8, ne
360
358
; CHECK-NEXT: ret
361
359
%cmp = icmp ne i32 %x1 , %x2
@@ -368,9 +366,8 @@ define i32 @test_ne_nonconst_sub_add_i32(i32 %x0, i32 %x1, i32 %x2) {
368
366
define i32 @test_ult_nonconst_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
369
367
; CHECK-LABEL: test_ult_nonconst_i32:
370
368
; 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
374
371
; CHECK-NEXT: csel w0, wzr, w8, lo
375
372
; CHECK-NEXT: ret
376
373
%cmp = icmp ult i32 %x1 , %x2
@@ -383,9 +380,8 @@ define i32 @test_ult_nonconst_i32(i32 %x0, i32 %x1, i32 %x2) {
383
380
define i32 @test_ule_nonconst_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
384
381
; CHECK-LABEL: test_ule_nonconst_i32:
385
382
; 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
389
385
; CHECK-NEXT: csel w0, wzr, w8, ls
390
386
; CHECK-NEXT: ret
391
387
%cmp = icmp ule i32 %x1 , %x2
@@ -398,9 +394,8 @@ define i32 @test_ule_nonconst_i32(i32 %x0, i32 %x1, i32 %x2) {
398
394
define i32 @test_ugt_nonconst_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
399
395
; CHECK-LABEL: test_ugt_nonconst_i32:
400
396
; 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
404
399
; CHECK-NEXT: csel w0, wzr, w8, hi
405
400
; CHECK-NEXT: ret
406
401
%cmp = icmp ugt i32 %x1 , %x2
@@ -413,9 +408,8 @@ define i32 @test_ugt_nonconst_i32(i32 %x0, i32 %x1, i32 %x2) {
413
408
define i32 @test_uge_nonconst_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
414
409
; CHECK-LABEL: test_uge_nonconst_i32:
415
410
; 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
419
413
; CHECK-NEXT: csel w0, wzr, w8, hs
420
414
; CHECK-NEXT: ret
421
415
%cmp = icmp uge i32 %x1 , %x2
@@ -428,9 +422,8 @@ define i32 @test_uge_nonconst_i32(i32 %x0, i32 %x1, i32 %x2) {
428
422
define i32 @test_slt_nonconst_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
429
423
; CHECK-LABEL: test_slt_nonconst_i32:
430
424
; 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
434
427
; CHECK-NEXT: csel w0, wzr, w8, lt
435
428
; CHECK-NEXT: ret
436
429
%cmp = icmp slt i32 %x1 , %x2
@@ -443,9 +436,8 @@ define i32 @test_slt_nonconst_i32(i32 %x0, i32 %x1, i32 %x2) {
443
436
define i32 @test_sle_nonconst_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
444
437
; CHECK-LABEL: test_sle_nonconst_i32:
445
438
; 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
449
441
; CHECK-NEXT: csel w0, wzr, w8, le
450
442
; CHECK-NEXT: ret
451
443
%cmp = icmp sle i32 %x1 , %x2
@@ -458,9 +450,8 @@ define i32 @test_sle_nonconst_i32(i32 %x0, i32 %x1, i32 %x2) {
458
450
define i32 @test_sgt_nonconst_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
459
451
; CHECK-LABEL: test_sgt_nonconst_i32:
460
452
; 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
464
455
; CHECK-NEXT: csel w0, wzr, w8, gt
465
456
; CHECK-NEXT: ret
466
457
%cmp = icmp sgt i32 %x1 , %x2
@@ -473,9 +464,8 @@ define i32 @test_sgt_nonconst_i32(i32 %x0, i32 %x1, i32 %x2) {
473
464
define i32 @test_sge_nonconst_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
474
465
; CHECK-LABEL: test_sge_nonconst_i32:
475
466
; 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
479
469
; CHECK-NEXT: csel w0, wzr, w8, ge
480
470
; CHECK-NEXT: ret
481
471
%cmp = icmp sge i32 %x1 , %x2
@@ -488,9 +478,8 @@ define i32 @test_sge_nonconst_i32(i32 %x0, i32 %x1, i32 %x2) {
488
478
define i32 @test_eq_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
489
479
; CHECK-LABEL: test_eq_nonconst_sub_add_comm_i32:
490
480
; 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
494
483
; CHECK-NEXT: csel w0, wzr, w8, eq
495
484
; CHECK-NEXT: ret
496
485
%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) {
503
492
define i32 @test_ne_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
504
493
; CHECK-LABEL: test_ne_nonconst_sub_add_comm_i32:
505
494
; 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
509
497
; CHECK-NEXT: csel w0, wzr, w8, ne
510
498
; CHECK-NEXT: ret
511
499
%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) {
518
506
define i32 @test_ult_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
519
507
; CHECK-LABEL: test_ult_nonconst_sub_add_comm_i32:
520
508
; 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
525
512
; CHECK-NEXT: ret
526
513
%cmp = icmp ult i32 %x2 , %x1
527
514
%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) {
533
520
define i32 @test_ule_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
534
521
; CHECK-LABEL: test_ule_nonconst_sub_add_comm_i32:
535
522
; 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
540
526
; CHECK-NEXT: ret
541
527
%cmp = icmp ule i32 %x2 , %x1
542
528
%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) {
548
534
define i32 @test_ugt_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
549
535
; CHECK-LABEL: test_ugt_nonconst_sub_add_comm_i32:
550
536
; 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
555
540
; CHECK-NEXT: ret
556
541
%cmp = icmp ugt i32 %x2 , %x1
557
542
%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) {
563
548
define i32 @test_uge_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
564
549
; CHECK-LABEL: test_uge_nonconst_sub_add_comm_i32:
565
550
; 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
570
554
; CHECK-NEXT: ret
571
555
%cmp = icmp uge i32 %x2 , %x1
572
556
%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) {
578
562
define i32 @test_slt_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
579
563
; CHECK-LABEL: test_slt_nonconst_sub_add_comm_i32:
580
564
; 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
585
568
; CHECK-NEXT: ret
586
569
%cmp = icmp slt i32 %x2 , %x1
587
570
%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) {
593
576
define i32 @test_sle_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
594
577
; CHECK-LABEL: test_sle_nonconst_sub_add_comm_i32:
595
578
; 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
600
582
; CHECK-NEXT: ret
601
583
%cmp = icmp sle i32 %x2 , %x1
602
584
%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) {
608
590
define i32 @test_sgt_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
609
591
; CHECK-LABEL: test_sgt_nonconst_sub_add_comm_i32:
610
592
; 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
615
596
; CHECK-NEXT: ret
616
597
%cmp = icmp sgt i32 %x2 , %x1
617
598
%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) {
623
604
define i32 @test_sge_nonconst_sub_add_comm_i32 (i32 %x0 , i32 %x1 , i32 %x2 ) {
624
605
; CHECK-LABEL: test_sge_nonconst_sub_add_comm_i32:
625
606
; 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
630
610
; CHECK-NEXT: ret
631
611
%cmp = icmp sge i32 %x2 , %x1
632
612
%add = add nuw i32 %x0 , %x1
0 commit comments