Skip to content

Commit 7dd2510

Browse files
[RISCV][VLOPT] Add floating point widening and narrowing convert support
1 parent 7c165f7 commit 7dd2510

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,7 @@ getOperandLog2EEW(const MachineOperand &MO, const MachineRegisterInfo *MRI) {
551551
case RISCV::VFWCVT_F_XU_V:
552552
case RISCV::VFWCVT_F_X_V:
553553
case RISCV::VFWCVT_F_F_V:
554+
case RISCV::VFWCVTBF16_F_F_V:
554555
return IsMODef ? MILog2SEW + 1 : MILog2SEW;
555556

556557
// Def and Op1 uses EEW=2*SEW. Op2 uses EEW=SEW.
@@ -607,7 +608,8 @@ getOperandLog2EEW(const MachineOperand &MO, const MachineRegisterInfo *MRI) {
607608
case RISCV::VFNCVT_F_XU_W:
608609
case RISCV::VFNCVT_F_X_W:
609610
case RISCV::VFNCVT_F_F_W:
610-
case RISCV::VFNCVT_ROD_F_F_W: {
611+
case RISCV::VFNCVT_ROD_F_F_W:
612+
case RISCV::VFNCVTBF16_F_F_W: {
611613
bool IsOp1 = HasPassthru ? MO.getOperandNo() == 2 : MO.getOperandNo() == 1;
612614
bool TwoTimes = IsOp1;
613615
return TwoTimes ? MILog2SEW + 1 : MILog2SEW;
@@ -1045,6 +1047,7 @@ static bool isSupportedInstr(const MachineInstr &MI) {
10451047
case RISCV::VFWCVT_F_XU_V:
10461048
case RISCV::VFWCVT_F_X_V:
10471049
case RISCV::VFWCVT_F_F_V:
1050+
case RISCV::VFWCVTBF16_F_F_V:
10481051
// Narrowing Floating-Point/Integer Type-Convert Instructions
10491052
case RISCV::VFNCVT_XU_F_W:
10501053
case RISCV::VFNCVT_X_F_W:
@@ -1054,6 +1057,7 @@ static bool isSupportedInstr(const MachineInstr &MI) {
10541057
case RISCV::VFNCVT_F_X_W:
10551058
case RISCV::VFNCVT_F_F_W:
10561059
case RISCV::VFNCVT_ROD_F_F_W:
1060+
case RISCV::VFNCVTBF16_F_F_W:
10571061
return true;
10581062
}
10591063

llvm/test/CodeGen/RISCV/rvv/vl-opt.mir

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,4 +130,14 @@ body: |
130130
%x:vr = PseudoVFCVT_X_F_V_M1 $noreg, $noreg, 0, -1, 3 /* e32 */, 0
131131
%y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0
132132
...
133+
---
134+
name: vfcvtbf16_x_f_v_nofpexcept
135+
body: |
136+
bb.0:
137+
; CHECK-LABEL: name: vfcvt_x_f_v_nofpexcept
138+
; CHECK: %x:vr = nofpexcept PseudoVFCVT_X_F_V_M1 $noreg, $noreg, 0, 1, 3 /* e8 */, 0 /* tu, mu */
139+
; CHECK-NEXT: %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */
140+
%x:vr = nofpexcept PseudoVFCVT_X_F_V_M1 $noreg, $noreg, 0, -1, 4 /* e16 */, 0
141+
%y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 4 /* e16 */, 0
142+
...
133143

0 commit comments

Comments
 (0)