Skip to content

Commit 0bb4f31

Browse files
fixup! respond to luke's review
1 parent 49f8f5c commit 0bb4f31

File tree

1 file changed

+18
-24
lines changed

1 file changed

+18
-24
lines changed

llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,7 @@ class RISCVVLOptimizer : public MachineFunctionPass {
5151
StringRef getPassName() const override { return PASS_NAME; }
5252

5353
private:
54-
bool checkUsers(std::optional<const MachineOperand *> &CommonVL,
55-
MachineInstr &MI);
54+
bool checkUsers(const MachineOperand *&CommonVL, MachineInstr &MI);
5655
bool tryReduceVL(MachineInstr &MI);
5756
bool isCandidate(const MachineInstr &MI) const;
5857
};
@@ -669,7 +668,7 @@ bool RISCVVLOptimizer::isCandidate(const MachineInstr &MI) const {
669668
unsigned PolicyOpNum = RISCVII::getVecPolicyOpNum(Desc);
670669
const MachineOperand &PolicyOp = MI.getOperand(PolicyOpNum);
671670
uint64_t Policy = PolicyOp.getImm();
672-
UseTAPolicy = (Policy & RISCVII::TAIL_AGNOSTIC) == RISCVII::TAIL_AGNOSTIC;
671+
UseTAPolicy = Policy & RISCVII::TAIL_AGNOSTIC;
673672
if (HasPassthru) {
674673
unsigned PassthruOpIdx = MI.getNumExplicitDefs();
675674
UseTAPolicy = UseTAPolicy || (MI.getOperand(PassthruOpIdx).getReg() ==
@@ -711,8 +710,8 @@ bool RISCVVLOptimizer::isCandidate(const MachineInstr &MI) const {
711710
return true;
712711
}
713712

714-
bool RISCVVLOptimizer::checkUsers(
715-
std::optional<const MachineOperand *> &CommonVL, MachineInstr &MI) {
713+
bool RISCVVLOptimizer::checkUsers(const MachineOperand *&CommonVL,
714+
MachineInstr &MI) {
716715
// FIXME: Avoid visiting each user for each time we visit something on the
717716
// worklist, combined with an extra visit from the outer loop. Restructure
718717
// along lines of an instcombine style worklist which integrates the outer
@@ -757,17 +756,15 @@ bool RISCVVLOptimizer::checkUsers(
757756

758757
unsigned VLOpNum = RISCVII::getVLOpNum(Desc);
759758
const MachineOperand &VLOp = UserMI.getOperand(VLOpNum);
759+
760760
// Looking for an immediate or a register VL that isn't X0.
761-
if (VLOp.isReg() && VLOp.getReg() == RISCV::X0) {
762-
LLVM_DEBUG(dbgs() << " Abort due to user uses X0 as VL.\n");
763-
CanReduceVL = false;
764-
break;
765-
}
761+
assert(!VLOp.isReg() ||
762+
VLOp.getReg() != RISCV::X0 && "Did not expect X0 VL");
766763

767764
if (!CommonVL) {
768765
CommonVL = &VLOp;
769766
LLVM_DEBUG(dbgs() << " User VL is: " << VLOp << "\n");
770-
} else if (!(*CommonVL)->isIdenticalTo(VLOp)) {
767+
} else if (!CommonVL->isIdenticalTo(VLOp)) {
771768
LLVM_DEBUG(dbgs() << " Abort because users have different VL\n");
772769
CanReduceVL = false;
773770
break;
@@ -804,43 +801,40 @@ bool RISCVVLOptimizer::tryReduceVL(MachineInstr &OrigMI) {
804801
MachineInstr &MI = *Worklist.pop_back_val();
805802
LLVM_DEBUG(dbgs() << "Trying to reduce VL for " << MI << "\n");
806803

807-
std::optional<const MachineOperand *> CommonVL;
804+
const MachineOperand *CommonVL = nullptr;
808805
bool CanReduceVL = true;
809806
if (isVectorRegClass(MI.getOperand(0).getReg(), MRI))
810807
CanReduceVL = checkUsers(CommonVL, MI);
811808

812809
if (!CanReduceVL || !CommonVL)
813810
continue;
814811

815-
const MachineOperand *CommonVLMO = *CommonVL;
816-
if (!CommonVLMO->isImm() && !CommonVLMO->getReg().isVirtual()) {
817-
LLVM_DEBUG(dbgs() << " Abort because common VL is not valid.\n");
818-
continue;
819-
}
812+
assert((CommonVL->isImm() || CommonVL->getReg().isVirtual()) &&
813+
"Expected VL to be an Imm or virtual Reg");
820814

821815
unsigned VLOpNum = RISCVII::getVLOpNum(MI.getDesc());
822816
MachineOperand &VLOp = MI.getOperand(VLOpNum);
823817

824-
if (!RISCV::isVLKnownLE(*CommonVLMO, VLOp)) {
818+
if (!RISCV::isVLKnownLE(*CommonVL, VLOp)) {
825819
LLVM_DEBUG(dbgs() << " Abort due to no benefit.\n");
826820
continue;
827821
}
828822

829-
if (CommonVLMO->isImm()) {
823+
if (CommonVL->isImm()) {
830824
LLVM_DEBUG(dbgs() << " Reduce VL from " << VLOp << " to "
831-
<< CommonVLMO->getImm() << " for " << MI << "\n");
832-
VLOp.ChangeToImmediate(CommonVLMO->getImm());
825+
<< CommonVL->getImm() << " for " << MI << "\n");
826+
VLOp.ChangeToImmediate(CommonVL->getImm());
833827
} else {
834-
const MachineInstr *VLMI = MRI->getVRegDef(CommonVLMO->getReg());
828+
const MachineInstr *VLMI = MRI->getVRegDef(CommonVL->getReg());
835829
if (!MDT->dominates(VLMI, &MI))
836830
continue;
837831
LLVM_DEBUG(
838832
dbgs() << " Reduce VL from " << VLOp << " to "
839-
<< printReg(CommonVLMO->getReg(), MRI->getTargetRegisterInfo())
833+
<< printReg(CommonVL->getReg(), MRI->getTargetRegisterInfo())
840834
<< " for " << MI << "\n");
841835

842836
// All our checks passed. We can reduce VL.
843-
VLOp.ChangeToRegister(CommonVLMO->getReg(), false);
837+
VLOp.ChangeToRegister(CommonVL->getReg(), false);
844838
}
845839

846840
MadeChange = true;

0 commit comments

Comments
 (0)