[llvm] [RISCV][VLOPT] Compute demanded VLs up front (PR #124530)
Philip Reames via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 28 10:44:19 PST 2025
================
@@ -1336,29 +1342,20 @@ bool RISCVVLOptimizer::runOnMachineFunction(MachineFunction &MF) {
if (!ST.hasVInstructions())
return false;
- SetVector<MachineInstr *> Worklist;
- auto PushOperands = [this, &Worklist](MachineInstr &MI,
- bool IgnoreSameBlock) {
- for (auto &Op : MI.operands()) {
- if (!Op.isReg() || !Op.isUse() || !Op.getReg().isVirtual() ||
- !isVectorRegClass(Op.getReg(), MRI))
- continue;
-
- MachineInstr *DefMI = MRI->getVRegDef(Op.getReg());
- if (!isCandidate(*DefMI))
- continue;
-
- if (IgnoreSameBlock && DefMI->getParent() == MI.getParent())
+ // For each instruction that defines a vector, compute what VL its
+ // downstream users demand.
+ for (MachineBasicBlock *MBB : post_order(&MF)) {
+ assert(MDT->isReachableFromEntry(MBB));
+ for (MachineInstr &MI : reverse(*MBB)) {
+ if (!isCandidate(MI))
continue;
-
- Worklist.insert(DefMI);
+ if (auto DemandedVL = checkUsers(MI))
----------------
preames wrote:
This can become an unconditional call to insert now that the value in the map is an optional.
https://github.com/llvm/llvm-project/pull/124530
More information about the llvm-commits
mailing list