@@ -481,3 +481,131 @@ define i32 @select_sgt_negative_one_constant1_constant2(i32 signext %x) {
481
481
%cond = select i1 %cmp , i32 7 , i32 -3
482
482
ret i32 %cond
483
483
}
484
+
485
+ define i32 @select_nonnegative_lui_addi (i32 signext %x ) {
486
+ ; RV32I-LABEL: select_nonnegative_lui_addi:
487
+ ; RV32I: # %bb.0:
488
+ ; RV32I-NEXT: mv a1, a0
489
+ ; RV32I-NEXT: lui a0, 4
490
+ ; RV32I-NEXT: bgez a1, .LBB21_2
491
+ ; RV32I-NEXT: # %bb.1:
492
+ ; RV32I-NEXT: li a0, 25
493
+ ; RV32I-NEXT: .LBB21_2:
494
+ ; RV32I-NEXT: ret
495
+ ;
496
+ ; RV32IF-LABEL: select_nonnegative_lui_addi:
497
+ ; RV32IF: # %bb.0:
498
+ ; RV32IF-NEXT: mv a1, a0
499
+ ; RV32IF-NEXT: lui a0, 4
500
+ ; RV32IF-NEXT: bgez a1, .LBB21_2
501
+ ; RV32IF-NEXT: # %bb.1:
502
+ ; RV32IF-NEXT: li a0, 25
503
+ ; RV32IF-NEXT: .LBB21_2:
504
+ ; RV32IF-NEXT: ret
505
+ ;
506
+ ; RV32ZICOND-LABEL: select_nonnegative_lui_addi:
507
+ ; RV32ZICOND: # %bb.0:
508
+ ; RV32ZICOND-NEXT: slti a0, a0, 0
509
+ ; RV32ZICOND-NEXT: lui a1, 1048572
510
+ ; RV32ZICOND-NEXT: addi a1, a1, 25
511
+ ; RV32ZICOND-NEXT: czero.eqz a0, a1, a0
512
+ ; RV32ZICOND-NEXT: lui a1, 4
513
+ ; RV32ZICOND-NEXT: add a0, a0, a1
514
+ ; RV32ZICOND-NEXT: ret
515
+ ;
516
+ ; RV64I-LABEL: select_nonnegative_lui_addi:
517
+ ; RV64I: # %bb.0:
518
+ ; RV64I-NEXT: mv a1, a0
519
+ ; RV64I-NEXT: lui a0, 4
520
+ ; RV64I-NEXT: bgez a1, .LBB21_2
521
+ ; RV64I-NEXT: # %bb.1:
522
+ ; RV64I-NEXT: li a0, 25
523
+ ; RV64I-NEXT: .LBB21_2:
524
+ ; RV64I-NEXT: ret
525
+ ;
526
+ ; RV64IFD-LABEL: select_nonnegative_lui_addi:
527
+ ; RV64IFD: # %bb.0:
528
+ ; RV64IFD-NEXT: mv a1, a0
529
+ ; RV64IFD-NEXT: lui a0, 4
530
+ ; RV64IFD-NEXT: bgez a1, .LBB21_2
531
+ ; RV64IFD-NEXT: # %bb.1:
532
+ ; RV64IFD-NEXT: li a0, 25
533
+ ; RV64IFD-NEXT: .LBB21_2:
534
+ ; RV64IFD-NEXT: ret
535
+ ;
536
+ ; RV64ZICOND-LABEL: select_nonnegative_lui_addi:
537
+ ; RV64ZICOND: # %bb.0:
538
+ ; RV64ZICOND-NEXT: slti a0, a0, 0
539
+ ; RV64ZICOND-NEXT: lui a1, 1048572
540
+ ; RV64ZICOND-NEXT: addi a1, a1, 25
541
+ ; RV64ZICOND-NEXT: czero.eqz a0, a1, a0
542
+ ; RV64ZICOND-NEXT: lui a1, 4
543
+ ; RV64ZICOND-NEXT: add a0, a0, a1
544
+ ; RV64ZICOND-NEXT: ret
545
+ %cmp = icmp sgt i32 %x , -1
546
+ %cond = select i1 %cmp , i32 16384 , i32 25
547
+ ret i32 %cond
548
+ }
549
+
550
+ define i32 @select_nonnegative_lui_addi_swapped (i32 signext %x ) {
551
+ ; RV32I-LABEL: select_nonnegative_lui_addi_swapped:
552
+ ; RV32I: # %bb.0:
553
+ ; RV32I-NEXT: bgez a0, .LBB22_2
554
+ ; RV32I-NEXT: # %bb.1:
555
+ ; RV32I-NEXT: lui a0, 4
556
+ ; RV32I-NEXT: ret
557
+ ; RV32I-NEXT: .LBB22_2:
558
+ ; RV32I-NEXT: li a0, 25
559
+ ; RV32I-NEXT: ret
560
+ ;
561
+ ; RV32IF-LABEL: select_nonnegative_lui_addi_swapped:
562
+ ; RV32IF: # %bb.0:
563
+ ; RV32IF-NEXT: bgez a0, .LBB22_2
564
+ ; RV32IF-NEXT: # %bb.1:
565
+ ; RV32IF-NEXT: lui a0, 4
566
+ ; RV32IF-NEXT: ret
567
+ ; RV32IF-NEXT: .LBB22_2:
568
+ ; RV32IF-NEXT: li a0, 25
569
+ ; RV32IF-NEXT: ret
570
+ ;
571
+ ; RV32ZICOND-LABEL: select_nonnegative_lui_addi_swapped:
572
+ ; RV32ZICOND: # %bb.0:
573
+ ; RV32ZICOND-NEXT: slti a0, a0, 0
574
+ ; RV32ZICOND-NEXT: lui a1, 4
575
+ ; RV32ZICOND-NEXT: addi a1, a1, -25
576
+ ; RV32ZICOND-NEXT: czero.eqz a0, a1, a0
577
+ ; RV32ZICOND-NEXT: addi a0, a0, 25
578
+ ; RV32ZICOND-NEXT: ret
579
+ ;
580
+ ; RV64I-LABEL: select_nonnegative_lui_addi_swapped:
581
+ ; RV64I: # %bb.0:
582
+ ; RV64I-NEXT: bgez a0, .LBB22_2
583
+ ; RV64I-NEXT: # %bb.1:
584
+ ; RV64I-NEXT: lui a0, 4
585
+ ; RV64I-NEXT: ret
586
+ ; RV64I-NEXT: .LBB22_2:
587
+ ; RV64I-NEXT: li a0, 25
588
+ ; RV64I-NEXT: ret
589
+ ;
590
+ ; RV64IFD-LABEL: select_nonnegative_lui_addi_swapped:
591
+ ; RV64IFD: # %bb.0:
592
+ ; RV64IFD-NEXT: bgez a0, .LBB22_2
593
+ ; RV64IFD-NEXT: # %bb.1:
594
+ ; RV64IFD-NEXT: lui a0, 4
595
+ ; RV64IFD-NEXT: ret
596
+ ; RV64IFD-NEXT: .LBB22_2:
597
+ ; RV64IFD-NEXT: li a0, 25
598
+ ; RV64IFD-NEXT: ret
599
+ ;
600
+ ; RV64ZICOND-LABEL: select_nonnegative_lui_addi_swapped:
601
+ ; RV64ZICOND: # %bb.0:
602
+ ; RV64ZICOND-NEXT: slti a0, a0, 0
603
+ ; RV64ZICOND-NEXT: lui a1, 4
604
+ ; RV64ZICOND-NEXT: addi a1, a1, -25
605
+ ; RV64ZICOND-NEXT: czero.eqz a0, a1, a0
606
+ ; RV64ZICOND-NEXT: addi a0, a0, 25
607
+ ; RV64ZICOND-NEXT: ret
608
+ %cmp = icmp sgt i32 %x , -1
609
+ %cond = select i1 %cmp , i32 25 , i32 16384
610
+ ret i32 %cond
611
+ }
0 commit comments