• Home
  • Raw
  • Download

Lines Matching refs:SU

43 bool VLIWResourceModel::isResourceAvailable(SUnit *SU) {  in isResourceAvailable()  argument
44 if (!SU || !SU->getInstr()) in isResourceAvailable()
49 switch (SU->getInstr()->getOpcode()) { in isResourceAvailable()
51 if (!ResourcesModel->canReserveResources(*SU->getInstr())) in isResourceAvailable()
75 if (I->getSUnit() == SU) in isResourceAvailable()
83 bool VLIWResourceModel::reserveResources(SUnit *SU) { in reserveResources() argument
86 if (!SU) { in reserveResources()
94 if (!isResourceAvailable(SU)) { in reserveResources()
101 switch (SU->getInstr()->getOpcode()) { in reserveResources()
103 ResourcesModel->reserveResources(*SU->getInstr()); in reserveResources()
117 Packet.push_back(SU); in reserveResources()
184 SUnit *SU = SchedImpl->pickNode(IsTopNode); in schedule() local
185 if (!SU) break; in schedule()
190 scheduleMI(SU, IsTopNode); in schedule()
192 updateQueues(SU, IsTopNode); in schedule()
195 SchedImpl->schedNode(SU, IsTopNode); in schedule()
228 void ConvergingVLIWScheduler::releaseTopNode(SUnit *SU) { in releaseTopNode() argument
229 if (SU->isScheduled) in releaseTopNode()
232 for (SUnit::succ_iterator I = SU->Preds.begin(), E = SU->Preds.end(); in releaseTopNode()
239 if (SU->TopReadyCycle < PredReadyCycle + MinLatency) in releaseTopNode()
240 SU->TopReadyCycle = PredReadyCycle + MinLatency; in releaseTopNode()
242 Top.releaseNode(SU, SU->TopReadyCycle); in releaseTopNode()
245 void ConvergingVLIWScheduler::releaseBottomNode(SUnit *SU) { in releaseBottomNode() argument
246 if (SU->isScheduled) in releaseBottomNode()
249 assert(SU->getInstr() && "Scheduled SUnit must have instr"); in releaseBottomNode()
251 for (SUnit::succ_iterator I = SU->Succs.begin(), E = SU->Succs.end(); in releaseBottomNode()
258 if (SU->BotReadyCycle < SuccReadyCycle + MinLatency) in releaseBottomNode()
259 SU->BotReadyCycle = SuccReadyCycle + MinLatency; in releaseBottomNode()
261 Bot.releaseNode(SU, SU->BotReadyCycle); in releaseBottomNode()
277 bool ConvergingVLIWScheduler::VLIWSchedBoundary::checkHazard(SUnit *SU) { in checkHazard() argument
279 return HazardRec->getHazardType(SU) != ScheduleHazardRecognizer::NoHazard; in checkHazard()
281 unsigned uops = SchedModel->getNumMicroOps(SU->getInstr()); in checkHazard()
288 void ConvergingVLIWScheduler::VLIWSchedBoundary::releaseNode(SUnit *SU, in releaseNode() argument
295 if (ReadyCycle > CurrCycle || checkHazard(SU)) in releaseNode()
297 Pending.push(SU); in releaseNode()
299 Available.push(SU); in releaseNode()
329 void ConvergingVLIWScheduler::VLIWSchedBoundary::bumpNode(SUnit *SU) { in bumpNode() argument
334 if (!isTop() && SU->isCall) { in bumpNode()
339 HazardRec->EmitInstruction(SU); in bumpNode()
343 startNewCycle = ResourceModel->reserveResources(SU); in bumpNode()
347 IssueCount += SchedModel->getNumMicroOps(SU->getInstr()); in bumpNode()
367 SUnit *SU = *(Pending.begin()+i); in releasePending() local
368 unsigned ReadyCycle = isTop() ? SU->TopReadyCycle : SU->BotReadyCycle; in releasePending()
376 if (checkHazard(SU)) in releasePending()
379 Available.push(SU); in releasePending()
387 void ConvergingVLIWScheduler::VLIWSchedBoundary::removeReady(SUnit *SU) { in removeReady() argument
388 if (Available.isInQueue(SU)) in removeReady()
389 Available.remove(Available.find(SU)); in removeReady()
391 assert(Pending.isInQueue(SU) && "bad ready count"); in removeReady()
392 Pending.remove(Pending.find(SU)); in removeReady()
418 SUnit *SU, PressureChange P) { in traceCandidate() argument
425 SU->dump(DAG); in traceCandidate()
431 static SUnit *getSingleUnscheduledPred(SUnit *SU) { in getSingleUnscheduledPred() argument
433 for (SUnit::const_pred_iterator I = SU->Preds.begin(), E = SU->Preds.end(); in getSingleUnscheduledPred()
449 static SUnit *getSingleUnscheduledSucc(SUnit *SU) { in getSingleUnscheduledSucc() argument
451 for (SUnit::const_succ_iterator I = SU->Succs.begin(), E = SU->Succs.end(); in getSingleUnscheduledSucc()
474 int ConvergingVLIWScheduler::SchedulingCost(ReadyQueue &Q, SUnit *SU, in SchedulingCost() argument
482 if (!SU || SU->isScheduled) in SchedulingCost()
486 if (SU->isScheduleHigh) in SchedulingCost()
491 ResCount += (SU->getHeight() * ScaleTwo); in SchedulingCost()
495 if (Top.ResourceModel->isResourceAvailable(SU)) in SchedulingCost()
498 ResCount += (SU->getDepth() * ScaleTwo); in SchedulingCost()
502 if (Bot.ResourceModel->isResourceAvailable(SU)) in SchedulingCost()
512 for (SUnit::const_succ_iterator I = SU->Succs.begin(), E = SU->Succs.end(); in SchedulingCost()
514 if (getSingleUnscheduledPred(I->getSUnit()) == SU) in SchedulingCost()
518 for (SUnit::const_pred_iterator I = SU->Preds.begin(), E = SU->Preds.end(); in SchedulingCost()
520 if (getSingleUnscheduledSucc(I->getSUnit()) == SU) in SchedulingCost()
558 if (!Candidate.SU) { in pickNodeFromQueue()
559 Candidate.SU = *I; in pickNodeFromQueue()
569 Candidate.SU = *I; in pickNodeFromQueue()
588 if (SUnit *SU = Bot.pickOnlyChoice()) { in pickNodeBidrectional() local
590 return SU; in pickNodeBidrectional()
592 if (SUnit *SU = Top.pickOnlyChoice()) { in pickNodeBidrectional() local
594 return SU; in pickNodeBidrectional()
611 return BotCand.SU; in pickNodeBidrectional()
621 return TopCand.SU; in pickNodeBidrectional()
627 return BotCand.SU; in pickNodeBidrectional()
631 return TopCand.SU; in pickNodeBidrectional()
635 return TopCand.SU; in pickNodeBidrectional()
639 return BotCand.SU; in pickNodeBidrectional()
649 SUnit *SU; in pickNode() local
651 SU = Top.pickOnlyChoice(); in pickNode()
652 if (!SU) { in pickNode()
658 SU = TopCand.SU; in pickNode()
662 SU = Bot.pickOnlyChoice(); in pickNode()
663 if (!SU) { in pickNode()
669 SU = BotCand.SU; in pickNode()
673 SU = pickNodeBidrectional(IsTopNode); in pickNode()
675 if (SU->isTopReady()) in pickNode()
676 Top.removeReady(SU); in pickNode()
677 if (SU->isBottomReady()) in pickNode()
678 Bot.removeReady(SU); in pickNode()
683 SU->dump(DAG)); in pickNode()
684 return SU; in pickNode()
691 void ConvergingVLIWScheduler::schedNode(SUnit *SU, bool IsTopNode) { in schedNode() argument
693 SU->TopReadyCycle = Top.CurrCycle; in schedNode()
694 Top.bumpNode(SU); in schedNode()
696 SU->BotReadyCycle = Bot.CurrCycle; in schedNode()
697 Bot.bumpNode(SU); in schedNode()