Skip to content

Commit 76cd79c

Browse files
[RISCV][VLOPT] Add fp-reductions to getOperandInfo
1 parent f77a7dd commit 76cd79c

File tree

2 files changed

+56
-1
lines changed

2 files changed

+56
-1
lines changed

llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -706,7 +706,12 @@ getOperandLog2EEW(const MachineOperand &MO, const MachineRegisterInfo *MRI) {
706706
case RISCV::VREDMINU_VS:
707707
case RISCV::VREDOR_VS:
708708
case RISCV::VREDSUM_VS:
709-
case RISCV::VREDXOR_VS: {
709+
case RISCV::VREDXOR_VS:
710+
// Vector Single-Width Floating-Point Reduction Instructions
711+
case RISCV::VFREDMAX_VS:
712+
case RISCV::VFREDMIN_VS:
713+
case RISCV::VFREDOSUM_VS:
714+
case RISCV::VFREDUSUM_VS: {
710715
return MILog2SEW;
711716
}
712717

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

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1388,3 +1388,53 @@ body: |
13881388
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
13891389
%y:vr = PseudoVWREDSUM_VS_MF2_E8 $noreg, %x, $noreg, 1, 3 /* e8 */, 0
13901390
...
1391+
---
1392+
name: vfred_vs2
1393+
body: |
1394+
bb.0:
1395+
; CHECK-LABEL: name: vfred_vs2
1396+
; CHECK: %x:vr = nofpexcept PseudoVFCVT_X_F_V_M1 $noreg, $noreg, 0, 1, 5 /* e32 */, 0 /* tu, mu */
1397+
; CHECK-NEXT: %y:vr = PseudoVFREDMAX_VS_M1_E32 $noreg, %x, $noreg, 1, 5 /* e32 */, 0 /* tu, mu */
1398+
%x:vr = nofpexcept PseudoVFCVT_X_F_V_M1 $noreg, $noreg, 0, -1, 5 /* e32 */, 0
1399+
%y:vr = PseudoVFREDMAX_VS_M1_E32 $noreg, %x, $noreg, 1, 5 /* e32 */, 0
1400+
...
1401+
---
1402+
name: vfred_vs1
1403+
body: |
1404+
bb.0:
1405+
; CHECK-LABEL: name: vfred_vs1
1406+
; CHECK: %x:vr = nofpexcept PseudoVFCVT_X_F_V_M1 $noreg, $noreg, 0, 1, 5 /* e32 */, 0 /* tu, mu */
1407+
; CHECK-NEXT: %y:vr = PseudoVFREDMAX_VS_M1_E32 $noreg, $noreg, %x, 1, 5 /* e32 */, 0 /* tu, mu */
1408+
%x:vr = nofpexcept PseudoVFCVT_X_F_V_M1 $noreg, $noreg, 0, -1, 5 /* e32 */, 0
1409+
%y:vr = PseudoVFREDMAX_VS_M1_E32 $noreg, $noreg, %x, 1, 5 /* e32 */, 0
1410+
...
1411+
---
1412+
name: vfred_vs1_vs2
1413+
body: |
1414+
bb.0:
1415+
; CHECK-LABEL: name: vfred_vs1_vs2
1416+
; CHECK: %x:vr = nofpexcept PseudoVFCVT_X_F_V_M1 $noreg, $noreg, 0, 1, 5 /* e32 */, 0 /* tu, mu */
1417+
; CHECK-NEXT: %y:vr = PseudoVFREDMAX_VS_M1_E32 $noreg, %x, %x, 1, 5 /* e32 */, 0 /* tu, mu */
1418+
%x:vr = nofpexcept PseudoVFCVT_X_F_V_M1 $noreg, $noreg, 0, -1, 5 /* e32 */, 0
1419+
%y:vr = PseudoVFREDMAX_VS_M1_E32 $noreg, %x, %x, 1, 5 /* e32 */, 0
1420+
...
1421+
---
1422+
name: vfred_vs1_vs2_incompatible_eew
1423+
body: |
1424+
bb.0:
1425+
; CHECK-LABEL: name: vfred_vs1_vs2_incompatible_eew
1426+
; CHECK: %x:vr = nofpexcept PseudoVFCVT_X_F_V_M1 $noreg, $noreg, 0, -1, 3 /* e8 */, 0 /* tu, mu */
1427+
; CHECK-NEXT: %y:vr = PseudoVFREDMAX_VS_M1_E32 $noreg, %x, %x, 1, 5 /* e32 */, 0 /* tu, mu */
1428+
%x:vr = nofpexcept PseudoVFCVT_X_F_V_M1 $noreg, $noreg, 0, -1, 3 /* e8 */, 0
1429+
%y:vr = PseudoVFREDMAX_VS_M1_E32 $noreg, %x, %x, 1, 5 /* e32 */, 0
1430+
...
1431+
---
1432+
name: vfred_vs1_vs2_incompatible_emul
1433+
body: |
1434+
bb.0:
1435+
; CHECK-LABEL: name: vfred_vs1_vs2_incompatible_emul
1436+
; CHECK: %x:vr = nofpexcept PseudoVFCVT_X_F_V_M1 $noreg, $noreg, 0, -1, 5 /* e32 */, 0 /* tu, mu */
1437+
; CHECK-NEXT: %y:vr = PseudoVFREDMAX_VS_MF2_E32 $noreg, %x, %x, 1, 5 /* e32 */, 0 /* tu, mu */
1438+
%x:vr = nofpexcept PseudoVFCVT_X_F_V_M1 $noreg, $noreg, 0, -1, 5 /* e32 */, 0
1439+
%y:vr = PseudoVFREDMAX_VS_MF2_E32 $noreg, %x, %x, 1, 5 /* e32 */, 0
1440+
...

0 commit comments

Comments
 (0)