|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 | 2 | ; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+v,+zfh,+zvfh \
|
3 |
| -; RUN: -verify-machineinstrs -target-abi=ilp32d | FileCheck %s |
| 3 | +; RUN: -verify-machineinstrs -target-abi=ilp32d | FileCheck %s --check-prefixes=CHECK,RV32 |
4 | 4 | ; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v,+zfh,+zvfh \
|
5 |
| -; RUN: -verify-machineinstrs -target-abi=lp64d | FileCheck %s |
| 5 | +; RUN: -verify-machineinstrs -target-abi=lp64d | FileCheck %s --check-prefixes=CHECK,RV64 |
6 | 6 |
|
7 | 7 | declare <vscale x 1 x half> @llvm.riscv.vfmv.s.f.nxv1f16(<vscale x 1 x half>, half, iXLen)
|
8 | 8 |
|
@@ -363,3 +363,50 @@ entry:
|
363 | 363 | %a = call <vscale x 8 x double> @llvm.riscv.vfmv.s.f.nxv8f64(<vscale x 8 x double> %0, double 0.0, iXLen %1)
|
364 | 364 | ret <vscale x 8 x double> %a
|
365 | 365 | }
|
| 366 | + |
| 367 | +define <vscale x 1 x half> @intrinsic_vfmv.s.f_f_nxv1f16_negzero(<vscale x 1 x half> %0, iXLen %1) nounwind { |
| 368 | +; CHECK-LABEL: intrinsic_vfmv.s.f_f_nxv1f16_negzero: |
| 369 | +; CHECK: # %bb.0: # %entry |
| 370 | +; CHECK-NEXT: lui a1, 1048568 |
| 371 | +; CHECK-NEXT: fmv.h.x fa5, a1 |
| 372 | +; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, ma |
| 373 | +; CHECK-NEXT: vfmv.s.f v8, fa5 |
| 374 | +; CHECK-NEXT: ret |
| 375 | +entry: |
| 376 | + %a = call <vscale x 1 x half> @llvm.riscv.vfmv.s.f.nxv1f16(<vscale x 1 x half> %0, half -0.0, iXLen %1) |
| 377 | + ret <vscale x 1 x half> %a |
| 378 | +} |
| 379 | + |
| 380 | +define <vscale x 1 x float> @intrinsic_vfmv.s.f_f_nxv1f32_negzero(<vscale x 1 x float> %0, iXLen %1) nounwind { |
| 381 | +; CHECK-LABEL: intrinsic_vfmv.s.f_f_nxv1f32_negzero: |
| 382 | +; CHECK: # %bb.0: # %entry |
| 383 | +; CHECK-NEXT: lui a1, 524288 |
| 384 | +; CHECK-NEXT: fmv.w.x fa5, a1 |
| 385 | +; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, ma |
| 386 | +; CHECK-NEXT: vfmv.s.f v8, fa5 |
| 387 | +; CHECK-NEXT: ret |
| 388 | +entry: |
| 389 | + %a = call <vscale x 1 x float> @llvm.riscv.vfmv.s.f.nxv1f32(<vscale x 1 x float> %0, float -0.0, iXLen %1) |
| 390 | + ret <vscale x 1 x float> %a |
| 391 | +} |
| 392 | + |
| 393 | +define <vscale x 1 x double> @intrinsic_vfmv.s.f_f_nxv1f64_negzero(<vscale x 1 x double> %0, iXLen %1) nounwind { |
| 394 | +; RV32-LABEL: intrinsic_vfmv.s.f_f_nxv1f64_negzero: |
| 395 | +; RV32: # %bb.0: # %entry |
| 396 | +; RV32-NEXT: fcvt.d.w fa5, zero |
| 397 | +; RV32-NEXT: fneg.d fa5, fa5 |
| 398 | +; RV32-NEXT: vsetvli zero, a0, e64, m1, tu, ma |
| 399 | +; RV32-NEXT: vfmv.s.f v8, fa5 |
| 400 | +; RV32-NEXT: ret |
| 401 | +; |
| 402 | +; RV64-LABEL: intrinsic_vfmv.s.f_f_nxv1f64_negzero: |
| 403 | +; RV64: # %bb.0: # %entry |
| 404 | +; RV64-NEXT: fmv.d.x fa5, zero |
| 405 | +; RV64-NEXT: fneg.d fa5, fa5 |
| 406 | +; RV64-NEXT: vsetvli zero, a0, e64, m1, tu, ma |
| 407 | +; RV64-NEXT: vfmv.s.f v8, fa5 |
| 408 | +; RV64-NEXT: ret |
| 409 | +entry: |
| 410 | + %a = call <vscale x 1 x double> @llvm.riscv.vfmv.s.f.nxv1f64(<vscale x 1 x double> %0, double -0.0, iXLen %1) |
| 411 | + ret <vscale x 1 x double> %a |
| 412 | +} |
0 commit comments