diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td @@ -2896,7 +2896,7 @@ foreach m = MxList.m in { let VLMul = m.value in { let HasSEWOp = 1, BaseInstr = VFMV_F_S in - def PseudoVFMV_F_S # "_" # m.MX : Pseudo<(outs FPR32:$rd), + def PseudoVFMV_F_S # "_" # m.MX : Pseudo<(outs FPR64:$rd), (ins m.vrclass:$rs2, ixlenimm:$sew), []>, RISCVVPseudo; @@ -3561,9 +3561,8 @@ // subregister generated by the instruction to the FPR64 base // register expected by the type in the pattern !cond(!eq(!cast(fvti.ScalarRegClass), - !cast(FPR64)): - (SUBREG_TO_REG (i32 -1), - (instr $rs2, fvti.SEW), sub_32), + !cast(FPR32)): + (EXTRACT_SUBREG (instr $rs2, fvti.SEW), sub_32), !eq(!cast(fvti.ScalarRegClass), !cast(FPR16)): (EXTRACT_SUBREG (instr $rs2, fvti.SEW), sub_16), diff --git a/llvm/test/CodeGen/RISCV/rvv/vfmv.f.s.ll b/llvm/test/CodeGen/RISCV/rvv/vfmv.f.s.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfmv.f.s.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfmv.f.s.ll @@ -9,7 +9,7 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, zero, e16,mf4,ta,mu ; CHECK-NEXT: vfmv.f.s fa0, v16 -; CHECK-NEXT: # kill: def $f10_h killed $f10_h killed $f10_f +; CHECK-NEXT: # kill: def $f10_h killed $f10_h killed $f10_d ; CHECK-NEXT: ret entry: %a = call half @llvm.riscv.vfmv.f.s.nxv1f16( %0) @@ -23,7 +23,7 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, zero, e16,mf2,ta,mu ; CHECK-NEXT: vfmv.f.s fa0, v16 -; CHECK-NEXT: # kill: def $f10_h killed $f10_h killed $f10_f +; CHECK-NEXT: # kill: def $f10_h killed $f10_h killed $f10_d ; CHECK-NEXT: ret entry: %a = call half @llvm.riscv.vfmv.f.s.nxv2f16( %0) @@ -37,7 +37,7 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, zero, e16,m1,ta,mu ; CHECK-NEXT: vfmv.f.s fa0, v16 -; CHECK-NEXT: # kill: def $f10_h killed $f10_h killed $f10_f +; CHECK-NEXT: # kill: def $f10_h killed $f10_h killed $f10_d ; CHECK-NEXT: ret entry: %a = call half @llvm.riscv.vfmv.f.s.nxv4f16( %0) @@ -51,7 +51,7 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, zero, e16,m2,ta,mu ; CHECK-NEXT: vfmv.f.s fa0, v16 -; CHECK-NEXT: # kill: def $f10_h killed $f10_h killed $f10_f +; CHECK-NEXT: # kill: def $f10_h killed $f10_h killed $f10_d ; CHECK-NEXT: ret entry: %a = call half @llvm.riscv.vfmv.f.s.nxv8f16( %0) @@ -65,7 +65,7 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, zero, e16,m4,ta,mu ; CHECK-NEXT: vfmv.f.s fa0, v16 -; CHECK-NEXT: # kill: def $f10_h killed $f10_h killed $f10_f +; CHECK-NEXT: # kill: def $f10_h killed $f10_h killed $f10_d ; CHECK-NEXT: ret entry: %a = call half @llvm.riscv.vfmv.f.s.nxv16f16( %0) @@ -79,7 +79,7 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, zero, e16,m8,ta,mu ; CHECK-NEXT: vfmv.f.s fa0, v16 -; CHECK-NEXT: # kill: def $f10_h killed $f10_h killed $f10_f +; CHECK-NEXT: # kill: def $f10_h killed $f10_h killed $f10_d ; CHECK-NEXT: ret entry: %a = call half @llvm.riscv.vfmv.f.s.nxv32f16( %0) @@ -93,6 +93,7 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, zero, e32,mf2,ta,mu ; CHECK-NEXT: vfmv.f.s fa0, v16 +; CHECK-NEXT: # kill: def $f10_f killed $f10_f killed $f10_d ; CHECK-NEXT: ret entry: %a = call float @llvm.riscv.vfmv.f.s.nxv1f32( %0) @@ -106,6 +107,7 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, zero, e32,m1,ta,mu ; CHECK-NEXT: vfmv.f.s fa0, v16 +; CHECK-NEXT: # kill: def $f10_f killed $f10_f killed $f10_d ; CHECK-NEXT: ret entry: %a = call float @llvm.riscv.vfmv.f.s.nxv2f32( %0) @@ -119,6 +121,7 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, zero, e32,m2,ta,mu ; CHECK-NEXT: vfmv.f.s fa0, v16 +; CHECK-NEXT: # kill: def $f10_f killed $f10_f killed $f10_d ; CHECK-NEXT: ret entry: %a = call float @llvm.riscv.vfmv.f.s.nxv4f32( %0) @@ -132,6 +135,7 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, zero, e32,m4,ta,mu ; CHECK-NEXT: vfmv.f.s fa0, v16 +; CHECK-NEXT: # kill: def $f10_f killed $f10_f killed $f10_d ; CHECK-NEXT: ret entry: %a = call float @llvm.riscv.vfmv.f.s.nxv8f32( %0) @@ -145,6 +149,7 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, zero, e32,m8,ta,mu ; CHECK-NEXT: vfmv.f.s fa0, v16 +; CHECK-NEXT: # kill: def $f10_f killed $f10_f killed $f10_d ; CHECK-NEXT: ret entry: %a = call float @llvm.riscv.vfmv.f.s.nxv16f32( %0)