Skip to content

Commit 633233c

Browse files
committed
[RISCV] Use MRI from MachineFunction in isVLKnownLE. NFC
TIL that MachineFunction actually stores a reference to MachineRegisterInfo, so use that instead of plumbing it through. This helps avoid the need to plumb MRI through static functions in #151285
1 parent 0d490ae commit 633233c

File tree

4 files changed

+22
-23
lines changed

4 files changed

+22
-23
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfo.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4796,22 +4796,22 @@ unsigned RISCV::getDestLog2EEW(const MCInstrDesc &Desc, unsigned Log2SEW) {
47964796
return Scaled;
47974797
}
47984798

4799-
static std::optional<int64_t> getEffectiveImm(const MachineOperand &MO,
4800-
const MachineRegisterInfo *MRI) {
4799+
static std::optional<int64_t> getEffectiveImm(const MachineOperand &MO) {
48014800
assert(MO.isImm() || MO.getReg().isVirtual());
48024801
if (MO.isImm())
48034802
return MO.getImm();
4804-
const MachineInstr *Def = MRI->getVRegDef(MO.getReg());
4803+
const MachineInstr *Def =
4804+
MO.getParent()->getMF()->getRegInfo().getVRegDef(MO.getReg());
48054805
int64_t Imm;
48064806
if (isLoadImm(Def, Imm))
48074807
return Imm;
48084808
return std::nullopt;
48094809
}
48104810

48114811
/// Given two VL operands, do we know that LHS <= RHS? Must be used in SSA form.
4812-
bool RISCV::isVLKnownLE(const MachineOperand &LHS, const MachineOperand &RHS,
4813-
const MachineRegisterInfo *MRI) {
4814-
assert(MRI->isSSA());
4812+
bool RISCV::isVLKnownLE(const MachineOperand &LHS, const MachineOperand &RHS) {
4813+
assert((LHS.isImm() || LHS.getParent()->getMF()->getRegInfo().isSSA()) &&
4814+
(RHS.isImm() || RHS.getParent()->getMF()->getRegInfo().isSSA()));
48154815
if (LHS.isReg() && RHS.isReg() && LHS.getReg().isVirtual() &&
48164816
LHS.getReg() == RHS.getReg())
48174817
return true;
@@ -4821,8 +4821,8 @@ bool RISCV::isVLKnownLE(const MachineOperand &LHS, const MachineOperand &RHS,
48214821
return true;
48224822
if (LHS.isImm() && LHS.getImm() == RISCV::VLMaxSentinel)
48234823
return false;
4824-
std::optional<int64_t> LHSImm = getEffectiveImm(LHS, MRI),
4825-
RHSImm = getEffectiveImm(RHS, MRI);
4824+
std::optional<int64_t> LHSImm = getEffectiveImm(LHS),
4825+
RHSImm = getEffectiveImm(RHS);
48264826
if (!LHSImm || !RHSImm)
48274827
return false;
48284828
return LHSImm <= RHSImm;

llvm/lib/Target/RISCV/RISCVInstrInfo.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -365,8 +365,7 @@ unsigned getDestLog2EEW(const MCInstrDesc &Desc, unsigned Log2SEW);
365365
static constexpr int64_t VLMaxSentinel = -1LL;
366366

367367
/// Given two VL operands, do we know that LHS <= RHS?
368-
bool isVLKnownLE(const MachineOperand &LHS, const MachineOperand &RHS,
369-
const MachineRegisterInfo *MRI);
368+
bool isVLKnownLE(const MachineOperand &LHS, const MachineOperand &RHS);
370369

371370
// Mask assignments for floating-point
372371
static constexpr unsigned FPMASK_Negative_Infinity = 0x001;

llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1379,7 +1379,7 @@ RISCVVLOptimizer::getMinimumVLForUser(const MachineOperand &UserOp) const {
13791379
assert(UserOp.getOperandNo() == UserMI.getNumExplicitDefs() &&
13801380
RISCVII::isFirstDefTiedToFirstUse(UserMI.getDesc()));
13811381
auto DemandedVL = DemandedVLs.lookup(&UserMI);
1382-
if (!DemandedVL || !RISCV::isVLKnownLE(*DemandedVL, VLOp, MRI)) {
1382+
if (!DemandedVL || !RISCV::isVLKnownLE(*DemandedVL, VLOp)) {
13831383
LLVM_DEBUG(dbgs() << " Abort because user is passthru in "
13841384
"instruction with demanded tail\n");
13851385
return std::nullopt;
@@ -1397,7 +1397,7 @@ RISCVVLOptimizer::getMinimumVLForUser(const MachineOperand &UserOp) const {
13971397
// requires.
13981398
if (auto DemandedVL = DemandedVLs.lookup(&UserMI)) {
13991399
assert(isCandidate(UserMI));
1400-
if (RISCV::isVLKnownLE(*DemandedVL, VLOp, MRI))
1400+
if (RISCV::isVLKnownLE(*DemandedVL, VLOp))
14011401
return DemandedVL;
14021402
}
14031403

@@ -1505,10 +1505,10 @@ RISCVVLOptimizer::checkUsers(const MachineInstr &MI) const {
15051505

15061506
// Use the largest VL among all the users. If we cannot determine this
15071507
// statically, then we cannot optimize the VL.
1508-
if (!CommonVL || RISCV::isVLKnownLE(*CommonVL, *VLOp, MRI)) {
1508+
if (!CommonVL || RISCV::isVLKnownLE(*CommonVL, *VLOp)) {
15091509
CommonVL = *VLOp;
15101510
LLVM_DEBUG(dbgs() << " User VL is: " << VLOp << "\n");
1511-
} else if (!RISCV::isVLKnownLE(*VLOp, *CommonVL, MRI)) {
1511+
} else if (!RISCV::isVLKnownLE(*VLOp, *CommonVL)) {
15121512
LLVM_DEBUG(dbgs() << " Abort because cannot determine a common VL\n");
15131513
return std::nullopt;
15141514
}
@@ -1570,7 +1570,7 @@ bool RISCVVLOptimizer::tryReduceVL(MachineInstr &MI) const {
15701570
CommonVL = VLMI->getOperand(RISCVII::getVLOpNum(VLMI->getDesc()));
15711571
}
15721572

1573-
if (!RISCV::isVLKnownLE(*CommonVL, VLOp, MRI)) {
1573+
if (!RISCV::isVLKnownLE(*CommonVL, VLOp)) {
15741574
LLVM_DEBUG(dbgs() << " Abort due to CommonVL not <= VLOp.\n");
15751575
return false;
15761576
}

llvm/lib/Target/RISCV/RISCVVectorPeephole.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ bool RISCVVectorPeephole::tryToReduceVL(MachineInstr &MI) const {
177177

178178
MachineOperand &SrcVL =
179179
Src->getOperand(RISCVII::getVLOpNum(Src->getDesc()));
180-
if (VL.isIdenticalTo(SrcVL) || !RISCV::isVLKnownLE(VL, SrcVL, MRI))
180+
if (VL.isIdenticalTo(SrcVL) || !RISCV::isVLKnownLE(VL, SrcVL))
181181
continue;
182182

183183
if (!ensureDominates(VL, *Src))
@@ -440,7 +440,7 @@ bool RISCVVectorPeephole::convertSameMaskVMergeToVMv(MachineInstr &MI) {
440440
const MachineOperand &MIVL = MI.getOperand(RISCVII::getVLOpNum(MI.getDesc()));
441441
const MachineOperand &TrueVL =
442442
True->getOperand(RISCVII::getVLOpNum(True->getDesc()));
443-
if (!RISCV::isVLKnownLE(MIVL, TrueVL, MRI))
443+
if (!RISCV::isVLKnownLE(MIVL, TrueVL))
444444
return false;
445445

446446
// True's passthru needs to be equivalent to False
@@ -611,7 +611,7 @@ bool RISCVVectorPeephole::foldUndefPassthruVMV_V_V(MachineInstr &MI) {
611611
MachineOperand &SrcPolicy =
612612
Src->getOperand(RISCVII::getVecPolicyOpNum(Src->getDesc()));
613613

614-
if (RISCV::isVLKnownLE(MIVL, SrcVL, MRI))
614+
if (RISCV::isVLKnownLE(MIVL, SrcVL))
615615
SrcPolicy.setImm(SrcPolicy.getImm() | RISCVVType::TAIL_AGNOSTIC);
616616
}
617617

@@ -663,7 +663,7 @@ bool RISCVVectorPeephole::foldVMV_V_V(MachineInstr &MI) {
663663
// so we don't need to handle a smaller source VL here. However, the
664664
// user's VL may be larger
665665
MachineOperand &SrcVL = Src->getOperand(RISCVII::getVLOpNum(Src->getDesc()));
666-
if (!RISCV::isVLKnownLE(SrcVL, MI.getOperand(3), MRI))
666+
if (!RISCV::isVLKnownLE(SrcVL, MI.getOperand(3)))
667667
return false;
668668

669669
// If the new passthru doesn't dominate Src, try to move Src so it does.
@@ -684,7 +684,7 @@ bool RISCVVectorPeephole::foldVMV_V_V(MachineInstr &MI) {
684684
// If MI was tail agnostic and the VL didn't increase, preserve it.
685685
int64_t Policy = RISCVVType::TAIL_UNDISTURBED_MASK_UNDISTURBED;
686686
if ((MI.getOperand(5).getImm() & RISCVVType::TAIL_AGNOSTIC) &&
687-
RISCV::isVLKnownLE(MI.getOperand(3), SrcVL, MRI))
687+
RISCV::isVLKnownLE(MI.getOperand(3), SrcVL))
688688
Policy |= RISCVVType::TAIL_AGNOSTIC;
689689
Src->getOperand(RISCVII::getVecPolicyOpNum(Src->getDesc())).setImm(Policy);
690690
}
@@ -775,9 +775,9 @@ bool RISCVVectorPeephole::foldVMergeToMask(MachineInstr &MI) const {
775775
True.getOperand(RISCVII::getVLOpNum(True.getDesc()));
776776

777777
MachineOperand MinVL = MachineOperand::CreateImm(0);
778-
if (RISCV::isVLKnownLE(TrueVL, VMergeVL, MRI))
778+
if (RISCV::isVLKnownLE(TrueVL, VMergeVL))
779779
MinVL = TrueVL;
780-
else if (RISCV::isVLKnownLE(VMergeVL, TrueVL, MRI))
780+
else if (RISCV::isVLKnownLE(VMergeVL, TrueVL))
781781
MinVL = VMergeVL;
782782
else
783783
return false;
@@ -797,7 +797,7 @@ bool RISCVVectorPeephole::foldVMergeToMask(MachineInstr &MI) const {
797797
// to the tail. In that case we always need to use tail undisturbed to
798798
// preserve them.
799799
uint64_t Policy = RISCVVType::TAIL_UNDISTURBED_MASK_UNDISTURBED;
800-
if (!PassthruReg && RISCV::isVLKnownLE(VMergeVL, MinVL, MRI))
800+
if (!PassthruReg && RISCV::isVLKnownLE(VMergeVL, MinVL))
801801
Policy |= RISCVVType::TAIL_AGNOSTIC;
802802

803803
assert(RISCVII::hasVecPolicyOp(True.getDesc().TSFlags) &&

0 commit comments

Comments
 (0)