Skip to content

Commit 05f82dc

Browse files
committed
[RISCV] Fix incorrect cases of vmv.s.f in the VSETVLI insert pass.
Fix incorrect cases of vmv.s.f and add test cases for it. Differential Revision: https://reviews.llvm.org/D116432
1 parent 5cd0b81 commit 05f82dc

File tree

2 files changed

+84
-21
lines changed

2 files changed

+84
-21
lines changed

llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -467,27 +467,27 @@ static bool isScalarMoveInstr(const MachineInstr &MI) {
467467
case RISCV::PseudoVMV_S_X_MF2:
468468
case RISCV::PseudoVMV_S_X_MF4:
469469
case RISCV::PseudoVMV_S_X_MF8:
470-
case RISCV::PseudoVFMV_F16_S_M1:
471-
case RISCV::PseudoVFMV_F16_S_M2:
472-
case RISCV::PseudoVFMV_F16_S_M4:
473-
case RISCV::PseudoVFMV_F16_S_M8:
474-
case RISCV::PseudoVFMV_F16_S_MF2:
475-
case RISCV::PseudoVFMV_F16_S_MF4:
476-
case RISCV::PseudoVFMV_F16_S_MF8:
477-
case RISCV::PseudoVFMV_F32_S_M1:
478-
case RISCV::PseudoVFMV_F32_S_M2:
479-
case RISCV::PseudoVFMV_F32_S_M4:
480-
case RISCV::PseudoVFMV_F32_S_M8:
481-
case RISCV::PseudoVFMV_F32_S_MF2:
482-
case RISCV::PseudoVFMV_F32_S_MF4:
483-
case RISCV::PseudoVFMV_F32_S_MF8:
484-
case RISCV::PseudoVFMV_F64_S_M1:
485-
case RISCV::PseudoVFMV_F64_S_M2:
486-
case RISCV::PseudoVFMV_F64_S_M4:
487-
case RISCV::PseudoVFMV_F64_S_M8:
488-
case RISCV::PseudoVFMV_F64_S_MF2:
489-
case RISCV::PseudoVFMV_F64_S_MF4:
490-
case RISCV::PseudoVFMV_F64_S_MF8:
470+
case RISCV::PseudoVFMV_S_F16_M1:
471+
case RISCV::PseudoVFMV_S_F16_M2:
472+
case RISCV::PseudoVFMV_S_F16_M4:
473+
case RISCV::PseudoVFMV_S_F16_M8:
474+
case RISCV::PseudoVFMV_S_F16_MF2:
475+
case RISCV::PseudoVFMV_S_F16_MF4:
476+
case RISCV::PseudoVFMV_S_F16_MF8:
477+
case RISCV::PseudoVFMV_S_F32_M1:
478+
case RISCV::PseudoVFMV_S_F32_M2:
479+
case RISCV::PseudoVFMV_S_F32_M4:
480+
case RISCV::PseudoVFMV_S_F32_M8:
481+
case RISCV::PseudoVFMV_S_F32_MF2:
482+
case RISCV::PseudoVFMV_S_F32_MF4:
483+
case RISCV::PseudoVFMV_S_F32_MF8:
484+
case RISCV::PseudoVFMV_S_F64_M1:
485+
case RISCV::PseudoVFMV_S_F64_M2:
486+
case RISCV::PseudoVFMV_S_F64_M4:
487+
case RISCV::PseudoVFMV_S_F64_M8:
488+
case RISCV::PseudoVFMV_S_F64_MF2:
489+
case RISCV::PseudoVFMV_S_F64_MF4:
490+
case RISCV::PseudoVFMV_S_F64_MF8:
491491
return true;
492492
}
493493
}

llvm/test/CodeGen/RISCV/rvv/vsetvli-insert.ll

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,55 @@ entry:
190190
ret <vscale x 1 x i64> %y
191191
}
192192

193+
define <vscale x 1 x double> @test10(<vscale x 1 x double> %a, double %b) nounwind {
194+
; CHECK-LABEL: test10:
195+
; CHECK: # %bb.0: # %entry
196+
; CHECK-NEXT: fmv.d.x ft0, a0
197+
; CHECK-NEXT: vsetvli a0, zero, e64, m1, tu, mu
198+
; CHECK-NEXT: vfmv.s.f v8, ft0
199+
; CHECK-NEXT: ret
200+
entry:
201+
%x = tail call i64 @llvm.riscv.vsetvlimax(i64 3, i64 0)
202+
%y = call <vscale x 1 x double> @llvm.riscv.vfmv.s.f.nxv1f64(
203+
<vscale x 1 x double> %a, double %b, i64 1)
204+
ret <vscale x 1 x double> %y
205+
}
206+
207+
define <vscale x 1 x double> @test11(<vscale x 1 x double> %a, double %b) nounwind {
208+
; CHECK-LABEL: test11:
209+
; CHECK: # %bb.0: # %entry
210+
; CHECK-NEXT: fmv.d.x ft0, a0
211+
; CHECK-NEXT: vsetivli a0, 6, e64, m1, tu, mu
212+
; CHECK-NEXT: vfmv.s.f v8, ft0
213+
; CHECK-NEXT: ret
214+
entry:
215+
%x = tail call i64 @llvm.riscv.vsetvli(i64 6, i64 3, i64 0)
216+
%y = call <vscale x 1 x double> @llvm.riscv.vfmv.s.f.nxv1f64(
217+
<vscale x 1 x double> %a, double %b, i64 2)
218+
ret <vscale x 1 x double> %y
219+
}
220+
221+
define <vscale x 1 x double> @test12(<vscale x 1 x double> %a, double %b, <vscale x 1 x i1> %mask) nounwind {
222+
; CHECK-LABEL: test12:
223+
; CHECK: # %bb.0: # %entry
224+
; CHECK-NEXT: fmv.d.x ft0, a0
225+
; CHECK-NEXT: vsetivli zero, 9, e64, m1, tu, mu
226+
; CHECK-NEXT: vfadd.vv v8, v8, v8, v0.t
227+
; CHECK-NEXT: vfmv.s.f v8, ft0
228+
; CHECK-NEXT: ret
229+
entry:
230+
%x = call <vscale x 1 x double> @llvm.riscv.vfadd.mask.nxv1f64.f64(
231+
<vscale x 1 x double> %a,
232+
<vscale x 1 x double> %a,
233+
<vscale x 1 x double> %a,
234+
<vscale x 1 x i1> %mask,
235+
i64 9,
236+
i64 0)
237+
%y = call <vscale x 1 x double> @llvm.riscv.vfmv.s.f.nxv1f64(
238+
<vscale x 1 x double> %x, double %b, i64 2)
239+
ret <vscale x 1 x double> %y
240+
}
241+
193242
declare <vscale x 1 x i64> @llvm.riscv.vadd.mask.nxv1i64.nxv1i64(
194243
<vscale x 1 x i64>,
195244
<vscale x 1 x i64>,
@@ -198,10 +247,24 @@ declare <vscale x 1 x i64> @llvm.riscv.vadd.mask.nxv1i64.nxv1i64(
198247
i64,
199248
i64);
200249

250+
declare <vscale x 1 x double> @llvm.riscv.vfadd.mask.nxv1f64.f64(
251+
<vscale x 1 x double>,
252+
<vscale x 1 x double>,
253+
<vscale x 1 x double>,
254+
<vscale x 1 x i1>,
255+
i64,
256+
i64);
257+
201258
declare <vscale x 1 x i64> @llvm.riscv.vmv.s.x.nxv1i64(
202259
<vscale x 1 x i64>,
203260
i64,
204261
i64);
262+
263+
declare <vscale x 1 x double> @llvm.riscv.vfmv.s.f.nxv1f64
264+
(<vscale x 1 x double>,
265+
double,
266+
i64)
267+
205268
declare i64 @llvm.riscv.vsetvli.i64(i64, i64 immarg, i64 immarg)
206269
declare <vscale x 2 x i32> @llvm.riscv.vle.nxv2i32.i64(<vscale x 2 x i32>* nocapture, i64)
207270
declare <vscale x 2 x i1> @llvm.riscv.vmslt.nxv2i32.i32.i64(<vscale x 2 x i32>, i32, i64)

0 commit comments

Comments
 (0)