Skip to content

Commit 56f1065

Browse files
[RISCV][VLOPT] Add floating point widening and narrowing convert support
1 parent 5f70fea commit 56f1065

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,8 @@ getOperandLog2EEW(const MachineOperand &MO, const MachineRegisterInfo *MRI) {
550550
case RISCV::VFWCVT_RTZ_X_F_V:
551551
case RISCV::VFWCVT_F_XU_V:
552552
case RISCV::VFWCVT_F_X_V:
553-
case RISCV::VFWCVT_F_F_V: {
553+
case RISCV::VFWCVT_F_F_V:
554+
case RISCV::VFWCVTBF16_F_F_V: {
554555
unsigned Log2EEW = IsMODef ? MILog2SEW + 1 : MILog2SEW;
555556
return Log2EEW;
556557
}
@@ -610,7 +611,8 @@ getOperandLog2EEW(const MachineOperand &MO, const MachineRegisterInfo *MRI) {
610611
case RISCV::VFNCVT_F_XU_W:
611612
case RISCV::VFNCVT_F_X_W:
612613
case RISCV::VFNCVT_F_F_W:
613-
case RISCV::VFNCVT_ROD_F_F_W: {
614+
case RISCV::VFNCVT_ROD_F_F_W:
615+
case RISCV::VFNCVTBF16_F_F_W: {
614616
bool IsOp1 = HasPassthru ? MO.getOperandNo() == 2 : MO.getOperandNo() == 1;
615617
bool TwoTimes = IsOp1;
616618
unsigned Log2EEW = TwoTimes ? MILog2SEW + 1 : MILog2SEW;
@@ -1033,6 +1035,7 @@ static bool isSupportedInstr(const MachineInstr &MI) {
10331035
case RISCV::VFWCVT_F_XU_V:
10341036
case RISCV::VFWCVT_F_X_V:
10351037
case RISCV::VFWCVT_F_F_V:
1038+
case RISCV::VFWCVTBF16_F_F_V:
10361039
// Narrowing Floating-Point/Integer Type-Convert Instructions
10371040
case RISCV::VFNCVT_XU_F_W:
10381041
case RISCV::VFNCVT_X_F_W:
@@ -1042,6 +1045,7 @@ static bool isSupportedInstr(const MachineInstr &MI) {
10421045
case RISCV::VFNCVT_F_X_W:
10431046
case RISCV::VFNCVT_F_F_W:
10441047
case RISCV::VFNCVT_ROD_F_F_W:
1048+
case RISCV::VFNCVTBF16_F_F_W:
10451049
return true;
10461050
}
10471051

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)