Skip to content

Commit 8a65196

Browse files
committed
[RISCV] Move CascadeSelect test into float/half/double-select-fcmp.ll. NFC
We only had a test for the F extension before. This increases coverage to D, Zfh, Zfhmin, Finx, Dinx, Zhinx.
1 parent d83457e commit 8a65196

File tree

4 files changed

+168
-42
lines changed

4 files changed

+168
-42
lines changed

llvm/test/CodeGen/RISCV/double-select-fcmp.ll

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,3 +638,48 @@ define signext i32 @select_fcmp_uge_1_2(double %a, double %b) nounwind {
638638
%2 = select i1 %1, i32 1, i32 2
639639
ret i32 %2
640640
}
641+
642+
define double @CascadedSelect(double noundef %a) {
643+
; CHECKRV32ZDINX-LABEL: CascadedSelect:
644+
; CHECKRV32ZDINX: # %bb.0: # %entry
645+
; CHECKRV32ZDINX-NEXT: lui a3, %hi(.LCPI20_0)
646+
; CHECKRV32ZDINX-NEXT: lw a2, %lo(.LCPI20_0)(a3)
647+
; CHECKRV32ZDINX-NEXT: addi a3, a3, %lo(.LCPI20_0)
648+
; CHECKRV32ZDINX-NEXT: lw a3, 4(a3)
649+
; CHECKRV32ZDINX-NEXT: flt.d a4, a2, a0
650+
; CHECKRV32ZDINX-NEXT: bnez a4, .LBB20_3
651+
; CHECKRV32ZDINX-NEXT: # %bb.1: # %entry
652+
; CHECKRV32ZDINX-NEXT: flt.d a4, a0, zero
653+
; CHECKRV32ZDINX-NEXT: li a2, 0
654+
; CHECKRV32ZDINX-NEXT: li a3, 0
655+
; CHECKRV32ZDINX-NEXT: bnez a4, .LBB20_3
656+
; CHECKRV32ZDINX-NEXT: # %bb.2: # %entry
657+
; CHECKRV32ZDINX-NEXT: mv a2, a0
658+
; CHECKRV32ZDINX-NEXT: mv a3, a1
659+
; CHECKRV32ZDINX-NEXT: .LBB20_3: # %entry
660+
; CHECKRV32ZDINX-NEXT: mv a0, a2
661+
; CHECKRV32ZDINX-NEXT: mv a1, a3
662+
; CHECKRV32ZDINX-NEXT: ret
663+
;
664+
; CHECKRV64ZDINX-LABEL: CascadedSelect:
665+
; CHECKRV64ZDINX: # %bb.0: # %entry
666+
; CHECKRV64ZDINX-NEXT: li a1, 1023
667+
; CHECKRV64ZDINX-NEXT: slli a1, a1, 52
668+
; CHECKRV64ZDINX-NEXT: flt.d a2, a1, a0
669+
; CHECKRV64ZDINX-NEXT: bnez a2, .LBB20_3
670+
; CHECKRV64ZDINX-NEXT: # %bb.1: # %entry
671+
; CHECKRV64ZDINX-NEXT: flt.d a2, a0, zero
672+
; CHECKRV64ZDINX-NEXT: li a1, 0
673+
; CHECKRV64ZDINX-NEXT: bnez a2, .LBB20_3
674+
; CHECKRV64ZDINX-NEXT: # %bb.2: # %entry
675+
; CHECKRV64ZDINX-NEXT: mv a1, a0
676+
; CHECKRV64ZDINX-NEXT: .LBB20_3: # %entry
677+
; CHECKRV64ZDINX-NEXT: mv a0, a1
678+
; CHECKRV64ZDINX-NEXT: ret
679+
entry:
680+
%cmp = fcmp ogt double %a, 1.000000e+00
681+
%cmp1 = fcmp olt double %a, 0.000000e+00
682+
%.a = select i1 %cmp1, double 0.000000e+00, double %a
683+
%retval.0 = select i1 %cmp, double 1.000000e+00, double %.a
684+
ret double %retval.0
685+
}

llvm/test/CodeGen/RISCV/float-select-fcmp.ll

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,3 +451,42 @@ define signext i32 @select_fcmp_uge_1_2(float %a, float %b) nounwind {
451451
%2 = select i1 %1, i32 1, i32 2
452452
ret i32 %2
453453
}
454+
455+
define float @CascadedSelect(float noundef %a) {
456+
; CHECK-LABEL: CascadedSelect:
457+
; CHECK: # %bb.0: # %entry
458+
; CHECK-NEXT: lui a0, 260096
459+
; CHECK-NEXT: fmv.w.x fa5, a0
460+
; CHECK-NEXT: flt.s a0, fa5, fa0
461+
; CHECK-NEXT: bnez a0, .LBB20_3
462+
; CHECK-NEXT: # %bb.1: # %entry
463+
; CHECK-NEXT: fmv.w.x fa5, zero
464+
; CHECK-NEXT: flt.s a0, fa0, fa5
465+
; CHECK-NEXT: bnez a0, .LBB20_3
466+
; CHECK-NEXT: # %bb.2: # %entry
467+
; CHECK-NEXT: fmv.s fa5, fa0
468+
; CHECK-NEXT: .LBB20_3: # %entry
469+
; CHECK-NEXT: fmv.s fa0, fa5
470+
; CHECK-NEXT: ret
471+
;
472+
; CHECKZFINX-LABEL: CascadedSelect:
473+
; CHECKZFINX: # %bb.0: # %entry
474+
; CHECKZFINX-NEXT: lui a1, 260096
475+
; CHECKZFINX-NEXT: flt.s a2, a1, a0
476+
; CHECKZFINX-NEXT: bnez a2, .LBB20_3
477+
; CHECKZFINX-NEXT: # %bb.1: # %entry
478+
; CHECKZFINX-NEXT: flt.s a2, a0, zero
479+
; CHECKZFINX-NEXT: li a1, 0
480+
; CHECKZFINX-NEXT: bnez a2, .LBB20_3
481+
; CHECKZFINX-NEXT: # %bb.2: # %entry
482+
; CHECKZFINX-NEXT: mv a1, a0
483+
; CHECKZFINX-NEXT: .LBB20_3: # %entry
484+
; CHECKZFINX-NEXT: mv a0, a1
485+
; CHECKZFINX-NEXT: ret
486+
entry:
487+
%cmp = fcmp ogt float %a, 1.000000e+00
488+
%cmp1 = fcmp olt float %a, 0.000000e+00
489+
%.a = select i1 %cmp1, float 0.000000e+00, float %a
490+
%retval.0 = select i1 %cmp, float 1.000000e+00, float %.a
491+
ret float %retval.0
492+
}

llvm/test/CodeGen/RISCV/half-select-fcmp.ll

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -874,3 +874,87 @@ define signext i32 @select_fcmp_uge_1_2(half %a, half %b) nounwind {
874874
%2 = select i1 %1, i32 1, i32 2
875875
ret i32 %2
876876
}
877+
878+
define half @CascadedSelect(half noundef %a) {
879+
; CHECK-LABEL: CascadedSelect:
880+
; CHECK: # %bb.0: # %entry
881+
; CHECK-NEXT: lui a0, %hi(.LCPI20_0)
882+
; CHECK-NEXT: flh fa5, %lo(.LCPI20_0)(a0)
883+
; CHECK-NEXT: flt.h a0, fa5, fa0
884+
; CHECK-NEXT: bnez a0, .LBB20_3
885+
; CHECK-NEXT: # %bb.1: # %entry
886+
; CHECK-NEXT: fmv.h.x fa5, zero
887+
; CHECK-NEXT: flt.h a0, fa0, fa5
888+
; CHECK-NEXT: bnez a0, .LBB20_3
889+
; CHECK-NEXT: # %bb.2: # %entry
890+
; CHECK-NEXT: fmv.h fa5, fa0
891+
; CHECK-NEXT: .LBB20_3: # %entry
892+
; CHECK-NEXT: fmv.h fa0, fa5
893+
; CHECK-NEXT: ret
894+
;
895+
; CHECKIZHINX-LABEL: CascadedSelect:
896+
; CHECKIZHINX: # %bb.0: # %entry
897+
; CHECKIZHINX-NEXT: li a1, 15
898+
; CHECKIZHINX-NEXT: slli a1, a1, 10
899+
; CHECKIZHINX-NEXT: flt.h a2, a1, a0
900+
; CHECKIZHINX-NEXT: bnez a2, .LBB20_3
901+
; CHECKIZHINX-NEXT: # %bb.1: # %entry
902+
; CHECKIZHINX-NEXT: flt.h a2, a0, zero
903+
; CHECKIZHINX-NEXT: li a1, 0
904+
; CHECKIZHINX-NEXT: bnez a2, .LBB20_3
905+
; CHECKIZHINX-NEXT: # %bb.2: # %entry
906+
; CHECKIZHINX-NEXT: mv a1, a0
907+
; CHECKIZHINX-NEXT: .LBB20_3: # %entry
908+
; CHECKIZHINX-NEXT: mv a0, a1
909+
; CHECKIZHINX-NEXT: ret
910+
;
911+
; CHECKIZFHMIN-LABEL: CascadedSelect:
912+
; CHECKIZFHMIN: # %bb.0: # %entry
913+
; CHECKIZFHMIN-NEXT: lui a0, %hi(.LCPI20_0)
914+
; CHECKIZFHMIN-NEXT: flh fa5, %lo(.LCPI20_0)(a0)
915+
; CHECKIZFHMIN-NEXT: fcvt.s.h fa3, fa5
916+
; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa0
917+
; CHECKIZFHMIN-NEXT: flt.s a0, fa3, fa4
918+
; CHECKIZFHMIN-NEXT: bnez a0, .LBB20_3
919+
; CHECKIZFHMIN-NEXT: # %bb.1: # %entry
920+
; CHECKIZFHMIN-NEXT: fmv.w.x fa5, zero
921+
; CHECKIZFHMIN-NEXT: flt.s a0, fa4, fa5
922+
; CHECKIZFHMIN-NEXT: bnez a0, .LBB20_4
923+
; CHECKIZFHMIN-NEXT: # %bb.2: # %entry
924+
; CHECKIZFHMIN-NEXT: fmv.s fa5, fa0
925+
; CHECKIZFHMIN-NEXT: .LBB20_3: # %entry
926+
; CHECKIZFHMIN-NEXT: fmv.s fa0, fa5
927+
; CHECKIZFHMIN-NEXT: ret
928+
; CHECKIZFHMIN-NEXT: .LBB20_4:
929+
; CHECKIZFHMIN-NEXT: fmv.h.x fa0, zero
930+
; CHECKIZFHMIN-NEXT: ret
931+
;
932+
; CHECKIZHINXMIN-LABEL: CascadedSelect:
933+
; CHECKIZHINXMIN: # %bb.0: # %entry
934+
; CHECKIZHINXMIN-NEXT: mv a1, a0
935+
; CHECKIZHINXMIN-NEXT: li a0, 0
936+
; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a1
937+
; CHECKIZHINXMIN-NEXT: lui a3, 260096
938+
; CHECKIZHINXMIN-NEXT: flt.s a4, a2, zero
939+
; CHECKIZHINXMIN-NEXT: flt.s a2, a3, a2
940+
; CHECKIZHINXMIN-NEXT: beqz a4, .LBB20_3
941+
; CHECKIZHINXMIN-NEXT: # %bb.1: # %entry
942+
; CHECKIZHINXMIN-NEXT: bnez a2, .LBB20_4
943+
; CHECKIZHINXMIN-NEXT: .LBB20_2: # %entry
944+
; CHECKIZHINXMIN-NEXT: # kill: def $x10_h killed $x10_h killed $x10
945+
; CHECKIZHINXMIN-NEXT: ret
946+
; CHECKIZHINXMIN-NEXT: .LBB20_3: # %entry
947+
; CHECKIZHINXMIN-NEXT: mv a0, a1
948+
; CHECKIZHINXMIN-NEXT: beqz a2, .LBB20_2
949+
; CHECKIZHINXMIN-NEXT: .LBB20_4:
950+
; CHECKIZHINXMIN-NEXT: li a0, 15
951+
; CHECKIZHINXMIN-NEXT: slli a0, a0, 10
952+
; CHECKIZHINXMIN-NEXT: # kill: def $x10_h killed $x10_h killed $x10
953+
; CHECKIZHINXMIN-NEXT: ret
954+
entry:
955+
%cmp = fcmp ogt half %a, 1.000000e+00
956+
%cmp1 = fcmp olt half %a, 0.000000e+00
957+
%.a = select i1 %cmp1, half 0.000000e+00, half %a
958+
%retval.0 = select i1 %cmp, half 1.000000e+00, half %.a
959+
ret half %retval.0
960+
}

llvm/test/CodeGen/RISCV/select-optimize-multiple.ll

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -338,45 +338,3 @@ entry:
338338
%ret = add i32 %cond1, %cond2
339339
ret i32 %ret
340340
}
341-
342-
define float @CascadedSelect(float noundef %a) {
343-
; RV32I-LABEL: CascadedSelect:
344-
; RV32I: # %bb.0: # %entry
345-
; RV32I-NEXT: fmv.w.x fa5, a0
346-
; RV32I-NEXT: lui a0, 260096
347-
; RV32I-NEXT: fmv.w.x fa4, a0
348-
; RV32I-NEXT: flt.s a0, fa4, fa5
349-
; RV32I-NEXT: bnez a0, .LBB8_3
350-
; RV32I-NEXT: # %bb.1: # %entry
351-
; RV32I-NEXT: fmv.w.x fa4, zero
352-
; RV32I-NEXT: flt.s a0, fa5, fa4
353-
; RV32I-NEXT: bnez a0, .LBB8_3
354-
; RV32I-NEXT: # %bb.2: # %entry
355-
; RV32I-NEXT: fmv.s fa4, fa5
356-
; RV32I-NEXT: .LBB8_3: # %entry
357-
; RV32I-NEXT: fmv.x.w a0, fa4
358-
; RV32I-NEXT: ret
359-
;
360-
; RV64I-LABEL: CascadedSelect:
361-
; RV64I: # %bb.0: # %entry
362-
; RV64I-NEXT: fmv.w.x fa5, a0
363-
; RV64I-NEXT: lui a0, 260096
364-
; RV64I-NEXT: fmv.w.x fa4, a0
365-
; RV64I-NEXT: flt.s a0, fa4, fa5
366-
; RV64I-NEXT: bnez a0, .LBB8_3
367-
; RV64I-NEXT: # %bb.1: # %entry
368-
; RV64I-NEXT: fmv.w.x fa4, zero
369-
; RV64I-NEXT: flt.s a0, fa5, fa4
370-
; RV64I-NEXT: bnez a0, .LBB8_3
371-
; RV64I-NEXT: # %bb.2: # %entry
372-
; RV64I-NEXT: fmv.s fa4, fa5
373-
; RV64I-NEXT: .LBB8_3: # %entry
374-
; RV64I-NEXT: fmv.x.w a0, fa4
375-
; RV64I-NEXT: ret
376-
entry:
377-
%cmp = fcmp ogt float %a, 1.000000e+00
378-
%cmp1 = fcmp olt float %a, 0.000000e+00
379-
%.a = select i1 %cmp1, float 0.000000e+00, float %a
380-
%retval.0 = select i1 %cmp, float 1.000000e+00, float %.a
381-
ret float %retval.0
382-
}

0 commit comments

Comments
 (0)