Lines Matching full:sunit
533 bool ScheduleDAGMI::canAddEdge(SUnit *SuccSU, SUnit *PredSU) {
537 bool ScheduleDAGMI::addEdge(SUnit *SuccSU, const SDep &PredDep) {
554 void ScheduleDAGMI::releaseSucc(SUnit *SU, SDep *SuccEdge) {
555 SUnit *SuccSU = SuccEdge->getSUnit();
582 void ScheduleDAGMI::releaseSuccessors(SUnit *SU) {
583 for (SUnit::succ_iterator I = SU->Succs.begin(), E = SU->Succs.end();
593 void ScheduleDAGMI::releasePred(SUnit *SU, SDep *PredEdge) {
594 SUnit *PredSU = PredEdge->getSUnit();
621 void ScheduleDAGMI::releasePredecessors(SUnit *SU) {
622 for (SUnit::pred_iterator I = SU->Preds.begin(), E = SU->Preds.end();
688 SmallVector<SUnit*, 8> TopRoots, BotRoots;
705 SUnit *SU = SchedImpl->pickNode(IsTopNode);
760 findRootsAndBiasEdges(SmallVectorImpl<SUnit*> &TopRoots,
761 SmallVectorImpl<SUnit*> &BotRoots) {
762 for (std::vector<SUnit>::iterator
764 SUnit *SU = &(*I);
770 // A SUnit is ready to top schedule if it has no predecessors.
773 // A SUnit is ready to bottom schedule if it has no successors.
781 void ScheduleDAGMI::initQueues(ArrayRef<SUnit*> TopRoots,
782 ArrayRef<SUnit*> BotRoots) {
790 for (SmallVectorImpl<SUnit*>::const_iterator
796 for (SmallVectorImpl<SUnit*>::const_reverse_iterator
812 void ScheduleDAGMI::updateQueues(SUnit *SU, bool IsTopNode) {
848 if (SUnit *SU = getSUnit(&(*MI)))
851 dbgs() << "Missing SUnit\n";
961 updateScheduledPressure(const SUnit *SU,
1006 SUnit &SU = *V2SU.SU;
1041 SUnit *SU = V2SU.SU;
1082 SmallVector<SUnit*, 8> TopRoots, BotRoots;
1090 for (const SUnit &SU : SUnits) {
1107 SUnit *SU = SchedImpl->pickNode(IsTopNode);
1219 const SUnit *DefSU = getSUnit(DefMI);
1228 SUnit *SU = V2SU.SU;
1263 void ScheduleDAGMILive::initQueues(ArrayRef<SUnit*> TopRoots,
1264 ArrayRef<SUnit*> BotRoots) {
1273 void ScheduleDAGMILive::scheduleMI(SUnit *SU, bool IsTopNode) {
1358 SUnit *SU;
1361 MemOpInfo(SUnit *su, unsigned reg, int64_t ofs)
1381 void clusterNeighboringMemOps(ArrayRef<SUnit *> MemOps, ScheduleDAGMI *DAG);
1399 ArrayRef<SUnit *> MemOps, ScheduleDAGMI *DAG) {
1402 SUnit *SU = MemOps[Idx];
1419 SUnit *SUa = MemOpRecords[Idx].SU;
1420 SUnit *SUb = MemOpRecords[Idx+1].SU;
1430 for (SUnit::const_succ_iterator
1451 SmallVector<SmallVector<SUnit*,4>, 32> StoreChainDependents;
1453 SUnit *SU = &DAG->SUnits[Idx];
1459 for (SUnit::const_pred_iterator
1519 SUnit &ExitSU = DAG->ExitSU;
1524 for (SUnit &SU : DAG->SUnits) {
1571 void constrainLocalCopy(SUnit *CopySU, ScheduleDAGMILive *DAG);
1594 void CopyConstrain::constrainLocalCopy(SUnit *CopySU, ScheduleDAGMILive *DAG) {
1668 SUnit *GlobalSU = DAG->getSUnit(GlobalDef);
1674 SmallVector<SUnit*,8> LocalUses;
1677 SUnit *LastLocalSU = DAG->getSUnit(LastLocalDef);
1678 for (SUnit::const_succ_iterator
1691 SmallVector<SUnit*,8> GlobalUses;
1694 SUnit *FirstLocalSU = DAG->getSUnit(FirstLocalDef);
1695 for (SUnit::const_pred_iterator
1707 for (SmallVectorImpl<SUnit*>::const_iterator
1713 for (SmallVectorImpl<SUnit*>::const_iterator
1735 SUnit *SU = &DAG->SUnits[Idx];
1791 for (std::vector<SUnit>::iterator
1818 /// Compute the stall cycles based on this SUnit's ready time. Heuristics treat
1825 unsigned SchedBoundary::getLatencyStallCycles(SUnit *SU) {
1862 bool SchedBoundary::checkHazard(SUnit *SU) {
1895 findMaxLatency(ArrayRef<SUnit*> ReadySUs) {
1896 SUnit *LateSU = nullptr;
1898 for (ArrayRef<SUnit*>::iterator I = ReadySUs.begin(), E = ReadySUs.end();
1942 void SchedBoundary::releaseNode(SUnit *SU, unsigned ReadyCycle) {
1943 assert(SU->getInstr() && "Scheduled SUnit must have instr");
1969 void SchedBoundary::releaseTopNode(SUnit *SU) {
1976 void SchedBoundary::releaseBottomNode(SUnit *SU) {
2064 /// Move the boundary of scheduled code by one SUnit.
2065 void SchedBoundary::bumpNode(SUnit *SU) {
2203 SUnit *SU = *(Pending.begin()+i);
2226 void SchedBoundary::removeReady(SUnit *SU) {
2238 SUnit *SchedBoundary::pickOnlyChoice() {
2661 for (std::vector<SUnit*>::const_iterator
2716 static unsigned getWeakLeft(const SUnit *SU, bool isTop) {
2727 static int biasPhysRegCopy(const SUnit *SU, bool isTop) {
2748 void GenericScheduler::initCandidate(SchedCandidate &Cand, SUnit *SU,
2792 /// \param TryCand refers to the next SUnit candidate, otherwise uninitialized.
2850 const SUnit *CandNextClusterSU =
2852 const SUnit *TryCandNextClusterSU =
2908 /// TODO: getMaxPressureDelta results can be mostly cached for each SUnit during
2937 SUnit *GenericScheduler::pickNodeBidirectional(bool &IsTopNode) {
2940 if (SUnit *SU = Bot.pickOnlyChoice()) {
2945 if (SUnit *SU = Top.pickOnlyChoice()) {
3016 SUnit *GenericScheduler::pickNode(bool &IsTopNode) {
3022 SUnit *SU;
3060 void GenericScheduler::reschedulePhysRegCopies(SUnit *SU, bool isTop) {
3073 SUnit *DepSU = I->getSUnit();
3092 void GenericScheduler::schedNode(SUnit *SU, bool IsTopNode) {
3159 for (SmallVectorImpl<SUnit*>::const_iterator
3173 /// \param TryCand refers to the next SUnit candidate, otherwise uninitialized.
3223 SUnit *PostGenericScheduler::pickNode(bool &IsTopNode) {
3228 SUnit *SU;
3255 void PostGenericScheduler::schedNode(SUnit *SU, bool IsTopNode) {
3282 bool operator()(const SUnit *A, const SUnit *B) const {
3309 std::vector<SUnit*> ReadyQ;
3331 SUnit *pickNode(bool &IsTopNode) override {
3334 SUnit *SU = ReadyQ.back();
3353 void schedNode(SUnit *SU, bool IsTopNode) override {
3357 void releaseTopNode(SUnit *) override { /*only called for top roots*/ }
3359 void releaseBottomNode(SUnit *SU) override {
3387 bool operator()(SUnit *A, SUnit *B) const {
3403 PriorityQueue<SUnit*, std::vector<SUnit*>, SUnitOrder<false> >
3406 PriorityQueue<SUnit*, std::vector<SUnit*>, SUnitOrder<true> >
3420 SUnit *pickNode(bool &IsTopNode) override {
3421 SUnit *SU;
3442 void schedNode(SUnit *SU, bool IsTopNode) override {}
3444 void releaseTopNode(SUnit *SU) override {
3447 void releaseBottomNode(SUnit *SU) override {
3488 static bool isNodeHidden(const SUnit *Node) {
3497 static std::string getEdgeAttributes(const SUnit *Node,
3507 static std::string getNodeLabel(const SUnit *SU, const ScheduleDAG *G) {
3518 static std::string getNodeDescription(const SUnit *SU, const ScheduleDAG *G) {
3522 static std::string getNodeAttributes(const SUnit *N, const ScheduleDAG *G) {