Skip to content

Commit 0c28482

Browse files
committed
[RISCV] Add test coverage for upcoming change to zicond select lowering
1 parent ea8994b commit 0c28482

File tree

1 file changed

+128
-0
lines changed

1 file changed

+128
-0
lines changed

llvm/test/CodeGen/RISCV/select-const.ll

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,3 +481,131 @@ define i32 @select_sgt_negative_one_constant1_constant2(i32 signext %x) {
481481
%cond = select i1 %cmp, i32 7, i32 -3
482482
ret i32 %cond
483483
}
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

Comments
 (0)