Skip to content

Commit fda45d9

Browse files
committed
[RISCV] Add FP compare test to condops.ll to show a missed opportunity to remove an xori. NFC
This is a case that D155288 won't get. Reviewed By: asb Differential Revision: https://reviews.llvm.org/D155327
1 parent e8dc9dc commit fda45d9

File tree

1 file changed

+120
-6
lines changed

1 file changed

+120
-6
lines changed

llvm/test/CodeGen/RISCV/condops.ll

Lines changed: 120 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
2-
; RUN: llc -mtriple=riscv32 < %s | FileCheck %s -check-prefix=RV32I
3-
; RUN: llc -mtriple=riscv64 < %s | FileCheck %s -check-prefix=RV64I
4-
; RUN: llc -mtriple=riscv64 -mattr=+xventanacondops < %s | FileCheck %s -check-prefix=RV64XVENTANACONDOPS
5-
; RUN: llc -mtriple=riscv64 -mattr=+xtheadcondmov < %s | FileCheck %s -check-prefix=RV64XTHEADCONDMOV
6-
; RUN: llc -mtriple=riscv32 -mattr=+experimental-zicond < %s | FileCheck %s -check-prefix=RV32ZICOND
7-
; RUN: llc -mtriple=riscv64 -mattr=+experimental-zicond < %s | FileCheck %s -check-prefix=RV64ZICOND
2+
; RUN: llc -mtriple=riscv32 -target-abi=ilp32f -mattr=+f < %s | FileCheck %s -check-prefix=RV32I
3+
; RUN: llc -mtriple=riscv64 -target-abi=lp64f -mattr=+f < %s | FileCheck %s -check-prefix=RV64I
4+
; RUN: llc -mtriple=riscv64 -target-abi=lp64f -mattr=+f,+xventanacondops < %s | FileCheck %s -check-prefix=RV64XVENTANACONDOPS
5+
; RUN: llc -mtriple=riscv64 -target-abi=lp64f -mattr=+f,+xtheadcondmov < %s | FileCheck %s -check-prefix=RV64XTHEADCONDMOV
6+
; RUN: llc -mtriple=riscv32 -target-abi=ilp32f -mattr=+f,+experimental-zicond < %s | FileCheck %s -check-prefix=RV32ZICOND
7+
; RUN: llc -mtriple=riscv64 -target-abi=lp64f -mattr=+f,+experimental-zicond < %s | FileCheck %s -check-prefix=RV64ZICOND
88

99
define i64 @zero1(i64 %rs1, i1 zeroext %rc) {
1010
; RV32I-LABEL: zero1:
@@ -3309,3 +3309,117 @@ bb2: ; preds = %bb2, %bb
33093309
bb7: ; preds = %bb2
33103310
ret void
33113311
}
3312+
3313+
define i32 @setune_32(float %a, float %b, i32 %rs1, i32 %rs2) {
3314+
; RV32I-LABEL: setune_32:
3315+
; RV32I: # %bb.0:
3316+
; RV32I-NEXT: feq.s a2, fa0, fa1
3317+
; RV32I-NEXT: beqz a2, .LBB56_2
3318+
; RV32I-NEXT: # %bb.1:
3319+
; RV32I-NEXT: mv a0, a1
3320+
; RV32I-NEXT: .LBB56_2:
3321+
; RV32I-NEXT: ret
3322+
;
3323+
; RV64I-LABEL: setune_32:
3324+
; RV64I: # %bb.0:
3325+
; RV64I-NEXT: feq.s a2, fa0, fa1
3326+
; RV64I-NEXT: beqz a2, .LBB56_2
3327+
; RV64I-NEXT: # %bb.1:
3328+
; RV64I-NEXT: mv a0, a1
3329+
; RV64I-NEXT: .LBB56_2:
3330+
; RV64I-NEXT: ret
3331+
;
3332+
; RV64XVENTANACONDOPS-LABEL: setune_32:
3333+
; RV64XVENTANACONDOPS: # %bb.0:
3334+
; RV64XVENTANACONDOPS-NEXT: feq.s a2, fa0, fa1
3335+
; RV64XVENTANACONDOPS-NEXT: vt.maskcn a0, a0, a2
3336+
; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2
3337+
; RV64XVENTANACONDOPS-NEXT: or a0, a1, a0
3338+
; RV64XVENTANACONDOPS-NEXT: ret
3339+
;
3340+
; RV64XTHEADCONDMOV-LABEL: setune_32:
3341+
; RV64XTHEADCONDMOV: # %bb.0:
3342+
; RV64XTHEADCONDMOV-NEXT: feq.s a2, fa0, fa1
3343+
; RV64XTHEADCONDMOV-NEXT: th.mvnez a0, a1, a2
3344+
; RV64XTHEADCONDMOV-NEXT: ret
3345+
;
3346+
; RV32ZICOND-LABEL: setune_32:
3347+
; RV32ZICOND: # %bb.0:
3348+
; RV32ZICOND-NEXT: feq.s a2, fa0, fa1
3349+
; RV32ZICOND-NEXT: xori a2, a2, 1
3350+
; RV32ZICOND-NEXT: czero.nez a1, a1, a2
3351+
; RV32ZICOND-NEXT: czero.eqz a0, a0, a2
3352+
; RV32ZICOND-NEXT: or a0, a0, a1
3353+
; RV32ZICOND-NEXT: ret
3354+
;
3355+
; RV64ZICOND-LABEL: setune_32:
3356+
; RV64ZICOND: # %bb.0:
3357+
; RV64ZICOND-NEXT: feq.s a2, fa0, fa1
3358+
; RV64ZICOND-NEXT: xori a2, a2, 1
3359+
; RV64ZICOND-NEXT: czero.nez a1, a1, a2
3360+
; RV64ZICOND-NEXT: czero.eqz a0, a0, a2
3361+
; RV64ZICOND-NEXT: or a0, a0, a1
3362+
; RV64ZICOND-NEXT: ret
3363+
%rc = fcmp une float %a, %b
3364+
%sel = select i1 %rc, i32 %rs1, i32 %rs2
3365+
ret i32 %sel
3366+
}
3367+
3368+
define i64 @setune_64(float %a, float %b, i64 %rs1, i64 %rs2) {
3369+
; RV32I-LABEL: setune_64:
3370+
; RV32I: # %bb.0:
3371+
; RV32I-NEXT: feq.s a4, fa0, fa1
3372+
; RV32I-NEXT: beqz a4, .LBB57_2
3373+
; RV32I-NEXT: # %bb.1:
3374+
; RV32I-NEXT: mv a0, a2
3375+
; RV32I-NEXT: mv a1, a3
3376+
; RV32I-NEXT: .LBB57_2:
3377+
; RV32I-NEXT: ret
3378+
;
3379+
; RV64I-LABEL: setune_64:
3380+
; RV64I: # %bb.0:
3381+
; RV64I-NEXT: feq.s a2, fa0, fa1
3382+
; RV64I-NEXT: beqz a2, .LBB57_2
3383+
; RV64I-NEXT: # %bb.1:
3384+
; RV64I-NEXT: mv a0, a1
3385+
; RV64I-NEXT: .LBB57_2:
3386+
; RV64I-NEXT: ret
3387+
;
3388+
; RV64XVENTANACONDOPS-LABEL: setune_64:
3389+
; RV64XVENTANACONDOPS: # %bb.0:
3390+
; RV64XVENTANACONDOPS-NEXT: feq.s a2, fa0, fa1
3391+
; RV64XVENTANACONDOPS-NEXT: vt.maskcn a0, a0, a2
3392+
; RV64XVENTANACONDOPS-NEXT: vt.maskc a1, a1, a2
3393+
; RV64XVENTANACONDOPS-NEXT: or a0, a1, a0
3394+
; RV64XVENTANACONDOPS-NEXT: ret
3395+
;
3396+
; RV64XTHEADCONDMOV-LABEL: setune_64:
3397+
; RV64XTHEADCONDMOV: # %bb.0:
3398+
; RV64XTHEADCONDMOV-NEXT: feq.s a2, fa0, fa1
3399+
; RV64XTHEADCONDMOV-NEXT: th.mvnez a0, a1, a2
3400+
; RV64XTHEADCONDMOV-NEXT: ret
3401+
;
3402+
; RV32ZICOND-LABEL: setune_64:
3403+
; RV32ZICOND: # %bb.0:
3404+
; RV32ZICOND-NEXT: feq.s a4, fa0, fa1
3405+
; RV32ZICOND-NEXT: xori a4, a4, 1
3406+
; RV32ZICOND-NEXT: czero.nez a2, a2, a4
3407+
; RV32ZICOND-NEXT: czero.eqz a0, a0, a4
3408+
; RV32ZICOND-NEXT: or a0, a0, a2
3409+
; RV32ZICOND-NEXT: czero.nez a2, a3, a4
3410+
; RV32ZICOND-NEXT: czero.eqz a1, a1, a4
3411+
; RV32ZICOND-NEXT: or a1, a1, a2
3412+
; RV32ZICOND-NEXT: ret
3413+
;
3414+
; RV64ZICOND-LABEL: setune_64:
3415+
; RV64ZICOND: # %bb.0:
3416+
; RV64ZICOND-NEXT: feq.s a2, fa0, fa1
3417+
; RV64ZICOND-NEXT: xori a2, a2, 1
3418+
; RV64ZICOND-NEXT: czero.nez a1, a1, a2
3419+
; RV64ZICOND-NEXT: czero.eqz a0, a0, a2
3420+
; RV64ZICOND-NEXT: or a0, a0, a1
3421+
; RV64ZICOND-NEXT: ret
3422+
%rc = fcmp une float %a, %b
3423+
%sel = select i1 %rc, i64 %rs1, i64 %rs2
3424+
ret i64 %sel
3425+
}

0 commit comments

Comments
 (0)