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 @@ -1102,6 +1102,7 @@ let HasVLOp = 1; let HasSEWOp = 1; let HasVecPolicyOp = 1; + let HasRoundModeOp = 1; let usesCustomInserter = 1; } @@ -1120,6 +1121,7 @@ let HasSEWOp = 1; let HasVecPolicyOp = 1; let UsesMaskPolicy = 1; + let HasRoundModeOp = 1; let usesCustomInserter = 1; } diff --git a/llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-masked-vops.ll b/llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-masked-vops.ll --- a/llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-masked-vops.ll +++ b/llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-masked-vops.ll @@ -240,3 +240,21 @@ %b = call @llvm.riscv.vmerge.nxv2i32.nxv2i32( %passthru, %passthru, %a, %mask, i64 3) ret %b } + +; Test VFCVT_RM +declare @llvm.floor.nxv2f32() +declare @llvm.vp.merge.nxv2i32(, , , i32) +define @vmerge_vfcvt_rm( %passthru, %a, %m, i32 zeroext %evl) { +; CHECK-LABEL: vmerge_vfcvt_rm: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: fsrmi a1, 2 +; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu +; CHECK-NEXT: vfcvt.x.f.v v8, v9, v0.t +; CHECK-NEXT: fsrm a1 +; CHECK-NEXT: ret +entry: + %floor = call @llvm.floor.nxv2f32( %a) + %i = fptosi %floor to + %res = call @llvm.vp.merge.nxv2i32( %m, %i, %passthru, i32 %evl) + ret %res +}