|
1 | 1 | ; 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 |
8 | 8 |
|
9 | 9 | define i64 @zero1(i64 %rs1, i1 zeroext %rc) {
|
10 | 10 | ; RV32I-LABEL: zero1:
|
@@ -3309,3 +3309,117 @@ bb2: ; preds = %bb2, %bb
|
3309 | 3309 | bb7: ; preds = %bb2
|
3310 | 3310 | ret void
|
3311 | 3311 | }
|
| 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