Skip to content

Commit bac6e7b

Browse files
authored
[RISCV][VLOpt] Put vmclr/vmset back in the RISCVVPseudo table. (#128293)
This allows them to be supported by the VLOptimizer.
1 parent a7d578d commit bac6e7b

File tree

3 files changed

+64
-11
lines changed

3 files changed

+64
-11
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -554,13 +554,11 @@ class RISCVVPseudo {
554554
Instruction BaseInstr = !cast<Instruction>(PseudoToVInst<NAME>.VInst);
555555
// SEW = 0 is used to denote that the Pseudo is not SEW specific (or unknown).
556556
bits<8> SEW = 0;
557-
bit NeedBeInPseudoTable = 1;
558557
}
559558

560559
// The actual table.
561560
def RISCVVPseudosTable : GenericTable {
562561
let FilterClass = "RISCVVPseudo";
563-
let FilterClassField = "NeedBeInPseudoTable";
564562
let CppTypeName = "PseudoInfo";
565563
let Fields = [ "Pseudo", "BaseInstr" ];
566564
let PrimaryKey = [ "Pseudo" ];
@@ -1023,11 +1021,7 @@ class VPseudoNullaryPseudoM<string BaseInst> :
10231021
let hasSideEffects = 0;
10241022
let HasVLOp = 1;
10251023
let HasSEWOp = 1;
1026-
// BaseInstr is not used in RISCVExpandPseudoInsts pass.
1027-
// Just fill a corresponding real v-inst to pass tablegen check.
10281024
let BaseInstr = !cast<Instruction>(BaseInst);
1029-
// We exclude them from RISCVVPseudoTable.
1030-
let NeedBeInPseudoTable = 0;
10311025
}
10321026

10331027
class VPseudoUnaryNoMask<DAGOperand RetClass,

llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-vops.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -892,9 +892,8 @@ define <vscale x 2 x i32> @vpselect_trunc(<vscale x 2 x i32> %passthru, <vscale
892892
define void @test_dag_loop() {
893893
; CHECK-LABEL: test_dag_loop:
894894
; CHECK: # %bb.0: # %entry
895-
; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, ma
896-
; CHECK-NEXT: vmclr.m v0
897895
; CHECK-NEXT: vsetivli zero, 0, e8, m4, ta, ma
896+
; CHECK-NEXT: vmclr.m v0
898897
; CHECK-NEXT: vmv.v.i v8, 0
899898
; CHECK-NEXT: vmv.v.i v12, 0
900899
; CHECK-NEXT: vsetvli zero, zero, e8, m4, tu, mu

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

Lines changed: 63 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,7 +1116,7 @@ body: |
11161116
bb.0:
11171117
; CHECK-LABEL: name: vmop_vv_passthru_use
11181118
; CHECK: %x:vrnov0 = PseudoVMAND_MM_B8 $noreg, $noreg, 1, 0 /* e8 */
1119-
; CHECK-NEXT: %y:vrnov0 = PseudoVMSEQ_VV_M1_MASK %x, $noreg, $noreg, $noreg, 1, 3 /* e8 */, 1
1119+
; CHECK-NEXT: %y:vrnov0 = PseudoVMSEQ_VV_M1_MASK %x, $noreg, $noreg, $noreg, 1, 3 /* e8 */, 1 /* ta, mu */
11201120
; CHECK-NEXT: %z:vr = PseudoVMAND_MM_B8 %y, $noreg, 1, 0 /* e8 */
11211121
%x:vrnov0 = PseudoVMAND_MM_B8 $noreg, $noreg, -1, 0 /* e1 */
11221122
%y:vrnov0 = PseudoVMSEQ_VV_M1_MASK %x, $noreg, $noreg, $noreg, 1, 3 /* e8 */, 1
@@ -1128,7 +1128,7 @@ body: |
11281128
bb.0:
11291129
; CHECK-LABEL: name: vmop_vv_passthru_use_incompatible_eew
11301130
; CHECK: %x:vrnov0 = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
1131-
; CHECK-NEXT: %y:vrnov0 = PseudoVMSEQ_VV_M1_MASK %x, $noreg, $noreg, $noreg, 1, 3 /* e8 */, 1
1131+
; CHECK-NEXT: %y:vrnov0 = PseudoVMSEQ_VV_M1_MASK %x, $noreg, $noreg, $noreg, 1, 3 /* e8 */, 1 /* ta, mu */
11321132
; CHECK-NEXT: %z:vr = PseudoVMAND_MM_B8 %y, $noreg, 1, 0 /* e8 */
11331133
%x:vrnov0 = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
11341134
%y:vrnov0 = PseudoVMSEQ_VV_M1_MASK %x, $noreg, $noreg, $noreg, 1, 3 /* e8 */, 1
@@ -1140,7 +1140,7 @@ body: |
11401140
bb.0:
11411141
; CHECK-LABEL: name: vmop_vv_passthru_use_incompatible_emul
11421142
; CHECK: %x:vrnov0 = PseudoVMAND_MM_B16 $noreg, $noreg, -1, 0 /* e8 */
1143-
; CHECK-NEXT: %y:vrnov0 = PseudoVMSEQ_VV_M1_MASK %x, $noreg, $noreg, $noreg, 1, 3 /* e8 */, 1
1143+
; CHECK-NEXT: %y:vrnov0 = PseudoVMSEQ_VV_M1_MASK %x, $noreg, $noreg, $noreg, 1, 3 /* e8 */, 1 /* ta, mu */
11441144
; CHECK-NEXT: %z:vr = PseudoVMAND_MM_B8 %y, $noreg, 1, 0 /* e8 */
11451145
%x:vrnov0 = PseudoVMAND_MM_B16 $noreg, $noreg, -1, 0 /* e1 */
11461146
%y:vrnov0 = PseudoVMSEQ_VV_M1_MASK %x, $noreg, $noreg, $noreg, 1, 3 /* e8 */, 1
@@ -1742,3 +1742,63 @@ body: |
17421742
%x:vr = PseudoVMAND_MM_B8 $noreg, $noreg, -1, 0
17431743
%y:gpr = PseudoVCPOP_M_B16 %x, 1, 0
17441744
...
1745+
---
1746+
name: vmclr_m
1747+
body: |
1748+
bb.0:
1749+
; CHECK-LABEL: name: vmclr_m
1750+
; CHECK: %x:vr = PseudoVMCLR_M_B8 1, 0 /* e8 */
1751+
; CHECK-NEXT: %y:vr = PseudoVMAND_MM_B8 $noreg, %x, 1, 0 /* e8 */
1752+
%x:vr = PseudoVMCLR_M_B8 -1, 0
1753+
%y:vr = PseudoVMAND_MM_B8 $noreg, %x, 1, 0
1754+
...
1755+
---
1756+
name: vmclr_m_incompatible_eew
1757+
body: |
1758+
bb.0:
1759+
; CHECK-LABEL: name: vmclr_m_incompatible_eew
1760+
; CHECK: %x:vr = PseudoVMCLR_M_B8 -1, 0 /* e8 */
1761+
; CHECK-NEXT: %y:vr = PseudoVADD_VV_M1 $noreg, $noreg, %x, 1, 3 /* e8 */, 0 /* tu, mu */
1762+
%x:vr = PseudoVMCLR_M_B8 -1, 0
1763+
%y:vr = PseudoVADD_VV_M1 $noreg, $noreg, %x, 1, 3 /* e8 */, 0
1764+
...
1765+
---
1766+
name: vmclr_m_incompatible_emul
1767+
body: |
1768+
bb.0:
1769+
; CHECK-LABEL: name: vmclr_m_incompatible_emul
1770+
; CHECK: %x:vr = PseudoVMCLR_M_B8 -1, 0 /* e8 */
1771+
; CHECK-NEXT: %y:vr = PseudoVMAND_MM_B16 $noreg, %x, 1, 0 /* e8 */
1772+
%x:vr = PseudoVMCLR_M_B8 -1, 0
1773+
%y:vr = PseudoVMAND_MM_B16 $noreg, %x, 1, 0
1774+
...
1775+
---
1776+
name: vmset_m
1777+
body: |
1778+
bb.0:
1779+
; CHECK-LABEL: name: vmset_m
1780+
; CHECK: %x:vr = PseudoVMSET_M_B8 1, 0 /* e8 */
1781+
; CHECK-NEXT: %y:vr = PseudoVMAND_MM_B8 $noreg, %x, 1, 0 /* e8 */
1782+
%x:vr = PseudoVMSET_M_B8 -1, 0
1783+
%y:vr = PseudoVMAND_MM_B8 $noreg, %x, 1, 0
1784+
...
1785+
---
1786+
name: vmset_m_incompatible_eew
1787+
body: |
1788+
bb.0:
1789+
; CHECK-LABEL: name: vmset_m_incompatible_eew
1790+
; CHECK: %x:vr = PseudoVMSET_M_B8 -1, 0 /* e8 */
1791+
; CHECK-NEXT: %y:vr = PseudoVADD_VV_M1 $noreg, $noreg, %x, 1, 3 /* e8 */, 0 /* tu, mu */
1792+
%x:vr = PseudoVMSET_M_B8 -1, 0
1793+
%y:vr = PseudoVADD_VV_M1 $noreg, $noreg, %x, 1, 3 /* e8 */, 0
1794+
...
1795+
---
1796+
name: vmset_m_incompatible_emul
1797+
body: |
1798+
bb.0:
1799+
; CHECK-LABEL: name: vmset_m_incompatible_emul
1800+
; CHECK: %x:vr = PseudoVMSET_M_B8 -1, 0 /* e8 */
1801+
; CHECK-NEXT: %y:vr = PseudoVMAND_MM_B16 $noreg, %x, 1, 0 /* e8 */
1802+
%x:vr = PseudoVMSET_M_B8 -1, 0
1803+
%y:vr = PseudoVMAND_MM_B16 $noreg, %x, 1, 0
1804+
---

0 commit comments

Comments
 (0)