[llvm] ec5d17b - [RISCV] Explicitly check for passthru in doPeepholeMaskedRVV. NFC
Luke Lau via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 15 19:28:18 PST 2025
Author: Luke Lau
Date: 2025-01-16T11:28:05+08:00
New Revision: ec5d17b58779e2fb08a7c9c706b2842586f71f78
URL: https://github.com/llvm/llvm-project/commit/ec5d17b58779e2fb08a7c9c706b2842586f71f78
DIFF: https://github.com/llvm/llvm-project/commit/ec5d17b58779e2fb08a7c9c706b2842586f71f78.diff
LOG: [RISCV] Explicitly check for passthru in doPeepholeMaskedRVV. NFC
We were previously checking a combination of the vector policy op and
the opcode to determine if we needed to skip copying the passthru from
a masked pseudo to an unmasked pseudo.
However we can just do this by checking
RISCVII::isFirstDefTiedToFirstUse, which is a proxy for whether or not
a pseudo has a passthru operand.
This should hopefully remove the need for the changes in #123106
Added:
Modified:
llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
index 9ccf95970e5b53..36292e3d572cb2 100644
--- a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
+++ b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
@@ -3791,15 +3791,6 @@ static bool isImplicitDef(SDValue V) {
return V.getMachineOpcode() == TargetOpcode::IMPLICIT_DEF;
}
-static bool hasGPROut(unsigned Opc) {
- switch (RISCV::getRVVMCOpcode(Opc)) {
- case RISCV::VCPOP_M:
- case RISCV::VFIRST_M:
- return true;
- }
- return false;
-}
-
// Optimize masked RVV pseudo instructions with a known all-ones mask to their
// corresponding "unmasked" pseudo versions. The mask we're interested in will
// take the form of a V0 physical register operand, with a glued
@@ -3818,19 +3809,22 @@ bool RISCVDAGToDAGISel::doPeepholeMaskedRVV(MachineSDNode *N) {
// everything else. See the comment on RISCVMaskedPseudo for details.
const unsigned Opc = I->UnmaskedPseudo;
const MCInstrDesc &MCID = TII->get(Opc);
- const bool UseTUPseudo = RISCVII::hasVecPolicyOp(MCID.TSFlags);
-#ifndef NDEBUG
+ const bool HasPassthru = RISCVII::isFirstDefTiedToFirstUse(MCID);
+
const MCInstrDesc &MaskedMCID = TII->get(N->getMachineOpcode());
+ const bool MaskedHasPassthru = RISCVII::isFirstDefTiedToFirstUse(MaskedMCID);
+
assert(RISCVII::hasVecPolicyOp(MaskedMCID.TSFlags) ==
RISCVII::hasVecPolicyOp(MCID.TSFlags) &&
"Masked and unmasked pseudos are inconsistent");
- const bool HasTiedDest = RISCVII::isFirstDefTiedToFirstUse(MCID);
- assert(UseTUPseudo == HasTiedDest && "Unexpected pseudo structure");
-#endif
+ assert(RISCVII::hasVecPolicyOp(MCID.TSFlags) == HasPassthru &&
+ "Unexpected pseudo structure");
+ assert(!(HasPassthru && !MaskedHasPassthru) &&
+ "Unmasked pseudo has passthru but masked pseudo doesn't?");
SmallVector<SDValue, 8> Ops;
- // Skip the passthru operand at index 0 if !UseTUPseudo and no GPR out.
- bool ShouldSkip = !UseTUPseudo && !hasGPROut(Opc);
+ // Skip the passthru operand at index 0 if the unmasked don't have one.
+ bool ShouldSkip = !HasPassthru && MaskedHasPassthru;
for (unsigned I = ShouldSkip, E = N->getNumOperands(); I != E; I++) {
// Skip the mask, and the Glue.
SDValue Op = N->getOperand(I);
More information about the llvm-commits
mailing list