[llvm] [SandboxVec][Scheduler] Enforce scheduling SchedBundle instrs back-to-back (PR #128092)
Sriraman Tallam via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 27 10:20:10 PST 2025
================
@@ -125,36 +125,72 @@ SchedBundle *Scheduler::createBundle(ArrayRef<Instruction *> Instrs) {
void Scheduler::eraseBundle(SchedBundle *SB) { Bndls.erase(SB); }
bool Scheduler::tryScheduleUntil(ArrayRef<Instruction *> Instrs) {
- // Use a set of instructions, instead of `Instrs` for fast lookups.
- DenseSet<Instruction *> InstrsToDefer(Instrs.begin(), Instrs.end());
- // This collects the nodes that correspond to instructions found in `Instrs`
- // that have just become ready. These nodes won't be scheduled right away.
- SmallVector<DGNode *, 8> DeferredNodes;
-
+ // Create a bundle for Instrs. If it turns out the schedule is infeasible we
+ // will dismantle it.
+ auto *InstrsSB = createBundle(Instrs);
// Keep scheduling ready nodes until we either run out of ready nodes (i.e.,
// ReadyList is empty), or all nodes that correspond to `Instrs` (the nodes of
// which are collected in DeferredNodes) are all ready to schedule.
- while (!ReadyList.empty()) {
- auto *ReadyN = ReadyList.pop();
- if (InstrsToDefer.contains(ReadyN->getInstruction())) {
- // If the ready instruction is one of those in `Instrs`, then we don't
- // schedule it right away. Instead we defer it until we can schedule it
- // along with the rest of the instructions in `Instrs`, at the same
- // time in a single scheduling bundle.
- DeferredNodes.push_back(ReadyN);
- bool ReadyToScheduleDeferred = DeferredNodes.size() == Instrs.size();
- if (ReadyToScheduleDeferred) {
- scheduleAndUpdateReadyList(*createBundle(Instrs));
+ SmallVector<DGNode *> Retry;
+ bool KeepScheduling = true;
+ while (KeepScheduling) {
+ enum class TryScheduleRes {
+ Success, ///> We successfully scheduled the node.
+ Failure, ///> We failed to schedule the node.
+ Done, ///> We scheduled the `Instrs` bundle.
----------------
tmsri wrote:
What is the difference between Success and Done here?
https://github.com/llvm/llvm-project/pull/128092
More information about the llvm-commits
mailing list