Skip to content

Commit d514571

Browse files
[RISCV][VLOPT] Add vfirst and vcpop to getOperandInfo (#122295)
1 parent cbcb7ad commit d514571

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed

llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,10 @@ getOperandLog2EEW(const MachineOperand &MO, const MachineRegisterInfo *MRI) {
488488
case RISCV::VFCVT_F_X_V:
489489
// Vector Floating-Point Merge Instruction
490490
case RISCV::VFMERGE_VFM:
491+
// Vector count population in mask vcpop.m
492+
// vfirst find-first-set mask bit
493+
case RISCV::VCPOP_M:
494+
case RISCV::VFIRST_M:
491495
return MILog2SEW;
492496

493497
// Vector Widening Integer Add/Subtract

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

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1438,3 +1438,63 @@ body: |
14381438
%x:vr = nofpexcept PseudoVFCVT_X_F_V_M1 $noreg, $noreg, 0, -1, 5 /* e32 */, 0
14391439
%y:vr = PseudoVFREDMAX_VS_MF2_E32 $noreg, %x, %x, 1, 5 /* e32 */, 0
14401440
...
1441+
---
1442+
name: vfirst_v
1443+
body: |
1444+
bb.0:
1445+
; CHECK-LABEL: name: vfirst_v
1446+
; CHECK: %x:vr = PseudoVMAND_MM_B8 $noreg, $noreg, 1, 0 /* e8 */
1447+
; CHECK-NEXT: %y:gpr = PseudoVFIRST_M_B8 %x, 1, 0 /* e8 */
1448+
%x:vr = PseudoVMAND_MM_B8 $noreg, $noreg, -1, 0
1449+
%y:gpr = PseudoVFIRST_M_B8 %x, 1, 0
1450+
...
1451+
---
1452+
name: vfirst_v_incompatible_eew
1453+
body: |
1454+
bb.0:
1455+
; CHECK-LABEL: name: vfirst_v_incompatible_eew
1456+
; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
1457+
; CHECK-NEXT: %y:gpr = PseudoVFIRST_M_B8 %x, 1, 0 /* e8 */
1458+
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
1459+
%y:gpr = PseudoVFIRST_M_B8 %x, 1, 0
1460+
...
1461+
---
1462+
name: vfirst_v_incompatible_emul
1463+
body: |
1464+
bb.0:
1465+
; CHECK-LABEL: name: vfirst_v_incompatible_emul
1466+
; CHECK: %x:vr = PseudoVMAND_MM_B8 $noreg, $noreg, -1, 0 /* e8 */
1467+
; CHECK-NEXT: %y:gpr = PseudoVFIRST_M_B16 %x, 1, 0 /* e8 */
1468+
%x:vr = PseudoVMAND_MM_B8 $noreg, $noreg, -1, 0
1469+
%y:gpr = PseudoVFIRST_M_B16 %x, 1, 0
1470+
...
1471+
---
1472+
name: vcpop_v
1473+
body: |
1474+
bb.0:
1475+
; CHECK-LABEL: name: vcpop_v
1476+
; CHECK: %x:vr = PseudoVMAND_MM_B8 $noreg, $noreg, 1, 0 /* e8 */
1477+
; CHECK-NEXT: %y:gpr = PseudoVCPOP_M_B8 %x, 1, 0 /* e8 */
1478+
%x:vr = PseudoVMAND_MM_B8 $noreg, $noreg, -1, 0
1479+
%y:gpr = PseudoVCPOP_M_B8 %x, 1, 0
1480+
...
1481+
---
1482+
name: vcopop_v_incompatible_eew
1483+
body: |
1484+
bb.0:
1485+
; CHECK-LABEL: name: vcopop_v_incompatible_eew
1486+
; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
1487+
; CHECK-NEXT: %y:gpr = PseudoVCPOP_M_B8 %x, 1, 0 /* e8 */
1488+
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
1489+
%y:gpr = PseudoVCPOP_M_B8 %x, 1, 0
1490+
...
1491+
---
1492+
name: vcpop_v_incompaitble_emul
1493+
body: |
1494+
bb.0:
1495+
; CHECK-LABEL: name: vcpop_v_incompaitble_emul
1496+
; CHECK: %x:vr = PseudoVMAND_MM_B8 $noreg, $noreg, -1, 0 /* e8 */
1497+
; CHECK-NEXT: %y:gpr = PseudoVCPOP_M_B16 %x, 1, 0 /* e8 */
1498+
%x:vr = PseudoVMAND_MM_B8 $noreg, $noreg, -1, 0
1499+
%y:gpr = PseudoVCPOP_M_B16 %x, 1, 0
1500+
...

0 commit comments

Comments
 (0)