Skip to content

Commit 3850801

Browse files
authored
[RISCV] Add vcpop.m/vfirst.m to RISCVMaskedPseudosTable
We seem to forget these two instructions. Reviewers: preames, frasercrmck, lukel97, topperc Reviewed By: lukel97 Pull Request: #115162
1 parent adb0d8d commit 3850801

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3708,6 +3708,15 @@ static bool isImplicitDef(SDValue V) {
37083708
return V.getMachineOpcode() == TargetOpcode::IMPLICIT_DEF;
37093709
}
37103710

3711+
static bool hasGPROut(unsigned Opc) {
3712+
switch (RISCV::getRVVMCOpcode(Opc)) {
3713+
case RISCV::VCPOP_M:
3714+
case RISCV::VFIRST_M:
3715+
return true;
3716+
}
3717+
return false;
3718+
}
3719+
37113720
// Optimize masked RVV pseudo instructions with a known all-ones mask to their
37123721
// corresponding "unmasked" pseudo versions. The mask we're interested in will
37133722
// take the form of a V0 physical register operand, with a glued
@@ -3737,8 +3746,9 @@ bool RISCVDAGToDAGISel::doPeepholeMaskedRVV(MachineSDNode *N) {
37373746
#endif
37383747

37393748
SmallVector<SDValue, 8> Ops;
3740-
// Skip the passthru operand at index 0 if !UseTUPseudo.
3741-
for (unsigned I = !UseTUPseudo, E = N->getNumOperands(); I != E; I++) {
3749+
// Skip the passthru operand at index 0 if !UseTUPseudo and no GPR out.
3750+
bool ShouldSkip = !UseTUPseudo && !hasGPROut(Opc);
3751+
for (unsigned I = ShouldSkip, E = N->getNumOperands(); I != E; I++) {
37423752
// Skip the mask, and the Glue.
37433753
SDValue Op = N->getOperand(I);
37443754
if (I == MaskOpIdx || Op.getValueType() == MVT::Glue)

llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1983,6 +1983,7 @@ multiclass VPseudoVPOP_M {
19831983
def "_M_" # mti.BX : VPseudoUnaryNoMaskGPROut,
19841984
SchedBinary<"WriteVMPopV", "ReadVMPopV", "ReadVMPopV", mx>;
19851985
def "_M_" # mti.BX # "_MASK" : VPseudoUnaryMaskGPROut,
1986+
RISCVMaskedPseudo<MaskIdx=1>,
19861987
SchedBinary<"WriteVMPopV", "ReadVMPopV", "ReadVMPopV", mx>;
19871988
}
19881989
}
@@ -1995,6 +1996,7 @@ multiclass VPseudoV1ST_M {
19951996
def "_M_" #mti.BX : VPseudoUnaryNoMaskGPROut,
19961997
SchedBinary<"WriteVMFFSV", "ReadVMFFSV", "ReadVMFFSV", mx>;
19971998
def "_M_" # mti.BX # "_MASK" : VPseudoUnaryMaskGPROut,
1999+
RISCVMaskedPseudo<MaskIdx=1>,
19982000
SchedBinary<"WriteVMFFSV", "ReadVMFFSV", "ReadVMFFSV", mx>;
19992001
}
20002002
}

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-reduction-fp.ll

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1797,11 +1797,8 @@ define float @vreduce_fminimum_v7f32(ptr %x) {
17971797
; CHECK: # %bb.0:
17981798
; CHECK-NEXT: vsetivli zero, 7, e32, m2, ta, ma
17991799
; CHECK-NEXT: vle32.v v8, (a0)
1800-
; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
1801-
; CHECK-NEXT: vmset.m v0
1802-
; CHECK-NEXT: vsetivli zero, 7, e32, m2, ta, ma
18031800
; CHECK-NEXT: vmfne.vv v10, v8, v8
1804-
; CHECK-NEXT: vcpop.m a0, v10, v0.t
1801+
; CHECK-NEXT: vcpop.m a0, v10
18051802
; CHECK-NEXT: beqz a0, .LBB111_2
18061803
; CHECK-NEXT: # %bb.1:
18071804
; CHECK-NEXT: lui a0, 523264
@@ -2558,11 +2555,8 @@ define float @vreduce_fmaximum_v7f32(ptr %x) {
25582555
; CHECK: # %bb.0:
25592556
; CHECK-NEXT: vsetivli zero, 7, e32, m2, ta, ma
25602557
; CHECK-NEXT: vle32.v v8, (a0)
2561-
; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
2562-
; CHECK-NEXT: vmset.m v0
2563-
; CHECK-NEXT: vsetivli zero, 7, e32, m2, ta, ma
25642558
; CHECK-NEXT: vmfne.vv v10, v8, v8
2565-
; CHECK-NEXT: vcpop.m a0, v10, v0.t
2559+
; CHECK-NEXT: vcpop.m a0, v10
25662560
; CHECK-NEXT: beqz a0, .LBB139_2
25672561
; CHECK-NEXT: # %bb.1:
25682562
; CHECK-NEXT: lui a0, 523264

0 commit comments

Comments
 (0)