Home | History | Annotate | Download | only in CodeGen

Lines Matching full:sunit

220   SetVector<SUnit *> NodeOrder;
228 DenseMap<SUnit *, std::pair<unsigned, int64_t>> InstrChanges;
236 std::vector<SUnit> &SUnits;
237 SetVector<SUnit *> Stack;
239 SmallVector<SmallPtrSet<SUnit *, 4>, 10> B;
245 Circuits(std::vector<SUnit> &SUs)
252 B.assign(SUnits.size(), SmallPtrSet<SUnit *, 4>());
274 int getASAP(SUnit *Node) { return ScheduleInfo[Node->NodeNum].ASAP; }
277 int getALAP(SUnit *Node) { return ScheduleInfo[Node->NodeNum].ALAP; }
281 int getMOV(SUnit *Node) { return getALAP(Node) - getASAP(Node); }
284 int getDepth(SUnit *Node) { return Node->getDepth(); }
287 int getHeight(SUnit *Node) { return Node->getHeight(); }
292 bool isBackedge(SUnit *Source, const SDep &Dep) {
299 static bool isOrder(SUnit *Source, const SDep &Dep) {
306 bool isLoopCarriedOrder(SUnit *Source, const SDep &Dep, bool isSucc = true);
309 unsigned getLatency(SUnit *Source, const SDep &Dep) {
324 unsigned getDistance(SUnit *U, SUnit *V, const SDep &Dep) {
340 unsigned getInstrBaseReg(SUnit *SU) {
341 DenseMap<SUnit *, std::pair<unsigned, int64_t>>::iterator It =
362 void addConnectedNodes(SUnit *SU, NodeSet &NewSet,
363 SetVector<SUnit *> &NodesAdded);
418 /// A NodeSet contains a set of SUnit DAG nodes with additional information
421 SetVector<SUnit *> Nodes;
427 SUnit *ExceedPressure = nullptr;
430 typedef SetVector<SUnit *>::const_iterator iterator;
436 bool insert(SUnit *SU) { return Nodes.insert(SU); }
444 unsigned count(SUnit *SU) const { return Nodes.count(SU); }
452 SUnit *getNode(unsigned i) const { return Nodes[i]; };
458 void setExceedPressure(SUnit *SU) { ExceedPressure = SU; }
460 bool isExceedSU(SUnit *SU) { return ExceedPressure == SU; }
468 for (SUnit *SU : *this) {
484 operator SetVector<SUnit *> &() { return Nodes; }
533 DenseMap<int, std::deque<SUnit *>> ScheduledInstrs;
536 std::map<SUnit *, int> InstrToCycle;
605 void computeStart(SUnit *SU, int *MaxEarlyStart, int *MinLateStart,
607 bool insert(SUnit *SU, int StartCycle, int EndCycle, int II);
610 typedef DenseMap<int, std::deque<SUnit *>>::iterator sched_iterator;
611 typedef DenseMap<int, std::deque<SUnit *>>::const_iterator
615 bool isScheduledAtStage(SUnit *SU, unsigned StageNum) {
621 int stageScheduled(SUnit *SU) const {
622 std::map<SUnit *, int>::const_iterator it = InstrToCycle.find(SU);
630 unsigned cycleScheduled(SUnit *SU) const {
631 std::map<SUnit *, int>::const_iterator it = InstrToCycle.find(SU);
664 std::deque<SUnit *> &getInstructions(int cycle) {
670 bool orderDependence(SwingSchedulerDAG *SSD, SUnit *SU,
671 std::deque<SUnit *> &Insts);
949 static bool isSuccOrder(SUnit *SUa, SUnit *SUb) {
950 SmallPtrSet<SUnit *, 8> Visited;
951 SmallVector<SUnit *, 8> Worklist;
954 const SUnit *SU = Worklist.pop_back_val();
956 SUnit *SuccSU = SI.getSUnit();
997 MapVector<Value *, SmallVector<SUnit *, 4>> PendingLoads;
1006 SmallVector<SUnit *, 4> &SUs = PendingLoads[V];
1013 MapVector<Value *, SmallVector<SUnit *, 4>>::iterator I =
1080 for (SUnit &I : SUnits) {
1100 SUnit *SU = getSUnit(UseMI);
1119 SUnit *SU = getSUnit(DefMI);
1162 for (SUnit &I : SUnits) {
1169 // Get the MI and SUnit for the instruction that defines the original base.
1174 SUnit *DefSU = getSUnit(DefMI);
1177 // Get the MI and SUnit for the instruction that defins the new base.
1181 SUnit *LastSU = getSUnit(LastMI);
1190 for (SUnit::pred_iterator P = I.Preds.begin(), E = I.Preds.end(); P != E;
1371 static void swapAntiDependences(std::vector<SUnit> &SUnits) {
1372 SmallVector<std::pair<SUnit *, SDep>, 8> DepsAdded;
1374 SUnit *SU = &SUnits[i];
1375 for (SUnit::pred_iterator IP = SU->Preds.begin(), EP = SU->Preds.end();
1382 for (SmallVector<std::pair<SUnit *, SDep>, 8>::iterator I = DepsAdded.begin(),
1386 SUnit *SU = I->first;
1388 SUnit *TargetSU = D.getSUnit();
1438 SUnit *SV = &SUnits[V];
1477 SmallPtrSet<SUnit *, 4> &BU = B[U];
1479 SmallPtrSet<SUnit *, 4>::iterator SI = BU.begin();
1481 SUnit *W = *SI;
1530 SUnit *SU = &SUnits[*I];
1541 SUnit *SU = &SUnits[*I];
1542 for (SUnit::const_pred_iterator IP = SU->Preds.begin(),
1547 SUnit *pred = IP->getSUnit();
1560 SUnit *SU = &SUnits[*I];
1561 for (SUnit::const_succ_iterator IS = SU->Succs.begin(),
1566 SUnit *succ = IS->getSUnit();
1593 static bool pred_L(SetVector<SUnit *> &NodeOrder,
1594 SmallSetVector<SUnit *, 8> &Preds,
1597 for (SetVector<SUnit *>::iterator I = NodeOrder.begin(), E = NodeOrder.end();
1599 for (SUnit::pred_iterator PI = (*I)->Preds.begin(), PE = (*I)->Preds.end();
1609 for (SUnit::const_succ_iterator IS = (*I)->Succs.begin(),
1626 static bool succ_L(SetVector<SUnit *> &NodeOrder,
1627 SmallSetVector<SUnit *, 8> &Succs,
1630 for (SetVector<SUnit *>::iterator I = NodeOrder.begin(), E = NodeOrder.end();
1632 for (SUnit::succ_iterator SI = (*I)->Succs.begin(), SE = (*I)->Succs.end();
1641 for (SUnit::const_pred_iterator PI = (*I)->Preds.begin(),
1657 static bool computePath(SUnit *Cur, SetVector<SUnit *> &Path,
1658 SetVector<SUnit *> &DestNodes,
1659 SetVector<SUnit *> &Exclude,
1660 SmallPtrSet<SUnit *, 8> &Visited) {
1698 for (SUnit *SU : NS) {
1712 for (SUnit *SU : NS)
1741 std::vector<SUnit *> SUnits(NS.begin(), NS.end());
1742 std::sort(SUnits.begin(), SUnits.end(), [](const SUnit *A, const SUnit *B) {
1777 SmallSetVector<SUnit *, 8> S1;
1784 SmallSetVector<SUnit *, 8> S2;
1822 SetVector<SUnit *> NodesAdded;
1823 SmallPtrSet<SUnit *, 8> Visited;
1827 SmallSetVector<SUnit *, 8> N;
1830 SetVector<SUnit *> Path;
1831 for (SUnit *NI : N) {
1841 SetVector<SUnit *> Path;
1842 for (SUnit *NI : N) {
1855 SmallSetVector<SUnit *, 8> N;
1857 for (SUnit *I : N)
1866 for (SUnit *I : N)
1874 SUnit *SU = &SUnits[i];
1885 void SwingSchedulerDAG::addConnectedNodes(SUnit *SU, NodeSet &NewSet,
1886 SetVector<SUnit *> &NodesAdded) {
1890 SUnit *Successor = SI.getSUnit();
1895 SUnit *Predecessor = PI.getSUnit();
1903 static bool isIntersect(SmallSetVector<SUnit *, 8> &Set1, const NodeSet &Set2,
1904 SmallSetVector<SUnit *, 8> &Result) {
1907 SUnit *SU = Set1[i];
1941 J->remove_if([&](SUnit *SUJ) { return I->count(SUJ); });
1953 static bool hasDataDependence(SUnit *Inst1, SUnit *Inst2) {
1965 SmallSetVector<SUnit *, 8> R;
1971 SmallSetVector<SUnit *, 8> N;
1993 SUnit *maxASAP = nullptr;
1994 for (SUnit *SU : Nodes) {
2009 SUnit *maxHeight = nullptr;
2010 for (SUnit *I : R) {
2045 SmallSetVector<SUnit *, 8> N;
2053 SUnit *maxDepth = nullptr;
2054 for (SUnit *I : R) {
2095 SmallSetVector<SUnit *, 8> N;
2105 for (SUnit *I : NodeOrder)
2125 SetVector<SUnit *>::iterator NI = NodeOrder.begin();
2126 SetVector<SUnit *>::iterator NE = NodeOrder.end();
2128 SUnit *SU = *NI;
2230 std::deque<SUnit *> &CycleInstrs = Schedule.getInstructions(Cycle);
2232 for (SUnit *CI : CycleInstrs) {
3106 DenseMap<SUnit *, std::pair<unsigned, int64_t>>::iterator It =
3270 SUnit *OrigMISU = getSUnit(OrigInstr->second);
3362 SUnit *SU = getSUnit(MI);
3363 DenseMap<SUnit *, std::pair<unsigned, int64_t>>::iterator It =
3401 bool SwingSchedulerDAG::isLoopCarriedOrder(SUnit *Source, const SDep &Dep,
3413 assert(SI != nullptr && DI != nullptr && "Expecting SUnit with an MI.");
3456 bool SMSchedule::insert(SUnit *SU, int StartCycle, int EndCycle, int II) {
3470 std::deque<SUnit *> &cycleInstrs = ScheduledInstrs[checkCycle];
3472 for (std::deque<SUnit *>::iterator I = cycleInstrs.begin(),
3507 SmallPtrSet<SUnit *, 8> Visited;
3513 SUnit *PrevSU = Cur.getSUnit();
3516 std::map<SUnit *, int>::const_iterator it = InstrToCycle.find(PrevSU);
3530 SmallPtrSet<SUnit *, 8> Visited;
3536 SUnit *SuccSU = Cur.getSUnit();
3539 std::map<SUnit *, int>::const_iterator it = InstrToCycle.find(SuccSU);
3554 static SUnit *multipleIterations(SUnit *SU, SwingSchedulerDAG *DAG) {
3565 void SMSchedule::computeStart(SUnit *SU, int *MaxEarlyStart, int *MinLateStart,
3574 for (SUnit *I : getInstructions(cycle)) {
3596 SUnit *BE = multipleIterations(I, DAG);
3625 bool SMSchedule::orderDependence(SwingSchedulerDAG *SSD, SUnit *SU,
3626 std::deque<SUnit *> &Insts) {
3636 for (std::deque<SUnit *>::iterator I = Insts.begin(), E = Insts.end(); I != E;
3736 SUnit *UseSU = Insts.at(MoveUse);
3737 SUnit *DefSU = Insts.at(MoveDef);
3770 SUnit *DefSU = SSD->getSUnit(&Phi);
3777 SUnit *UseSU = SSD->getSUnit(MRI.getVRegDef(LoopVal));
3824 SUnit &SU = SSD->SUnits[i];
3846 std::deque<SUnit *> &cycleInstrs =
3848 for (std::deque<SUnit *>::reverse_iterator I = cycleInstrs.rbegin(),
3872 SUnit *SUnitUse = SSD->getSUnit(UseMI);
3897 SUnit *SU = &SSD->SUnits[i];
3904 std::deque<SUnit *> &cycleInstrs = ScheduledInstrs[Cycle];
3905 std::deque<SUnit *> newOrderZC;
3908 SUnit *SU = cycleInstrs[i];
3912 std::deque<SUnit *> newOrderI;
3915 SUnit *SU = cycleInstrs[i];
3933 for (SUnit *CI : cycleInstrs->second) {