Lines Matching defs:SUnit
707 for (SUnit *SU : Schedule.getInstructions(Cycle)) {
783 static bool isSuccOrder(SUnit *SUa, SUnit *SUb) {
784 SmallPtrSet<SUnit *, 8> Visited;
785 SmallVector<SUnit *, 8> Worklist;
788 const SUnit *SU = Worklist.pop_back_val();
790 SUnit *SuccSU = SI.getSUnit();
837 MapVector<const Value *, SmallVector<SUnit *, 4>> PendingLoads;
850 SmallVector<SUnit *, 4> &SUs = PendingLoads[V];
859 MapVector<const Value *, SmallVector<SUnit *, 4>>::iterator I =
937 for (SUnit &I : SUnits) {
955 SUnit *SU = getSUnit(UseMI);
975 SUnit *SU = getSUnit(DefMI);
1019 for (SUnit &I : SUnits) {
1026 // Get the MI and SUnit for the instruction that defines the original base.
1031 SUnit *DefSU = getSUnit(DefMI);
1034 // Get the MI and SUnit for the instruction that defins the new base.
1038 SUnit *LastSU = getSUnit(LastMI);
1085 DenseMap<int, std::deque<SUnit *>> Instrs;
1092 for (SUnit *SU : llvm::reverse(Schedule.getInstructions(
1101 std::deque<SUnit *> &CycleInstrs = Instrs[Cycle];
1103 for (SUnit *SU : CycleInstrs) {
1630 SUnit *Src = IE.getSrc();
1631 SUnit *Dst = IE.getDst();
1656 SUnit *SV = &SUnits[V];
1696 SmallPtrSet<SUnit *, 4> &BU = B[U];
1698 SmallPtrSet<SUnit *, 4>::iterator SI = BU.begin();
1700 SUnit *W = *SI;
1738 for (SUnit &SU : DAG->SUnits) {
1744 SmallVector<SUnit *, 4> PHISUs;
1746 SmallVector<SUnit *, 4> SrcSUs;
1749 SUnit *TmpSU = Dep.getSUnit();
1765 // SUnit to the container.
1766 SmallVector<SUnit *, 8> UseSUs;
1773 SUnit *TmpSU = Dep.getSUnit();
1810 const SUnit &SU = SUnits[I];
1820 SUnit *SU = &SUnits[I];
1822 SUnit *Pred = IE.getSrc();
1840 SUnit *SU = &SUnits[I];
1842 SUnit *Succ = OE.getDst();
1879 static bool pred_L(SetVector<SUnit *> &NodeOrder,
1880 SmallSetVector<SUnit *, 8> &Preds, SwingSchedulerDDG *DDG,
1884 for (SUnit *SU : NodeOrder) {
1886 SUnit *PredSU = IE.getSrc();
1900 SUnit *SuccSU = OE.getDst();
1915 static bool succ_L(SetVector<SUnit *> &NodeOrder,
1916 SmallSetVector<SUnit *, 8> &Succs, SwingSchedulerDDG *DDG,
1920 for (SUnit *SU : NodeOrder) {
1922 SUnit *SuccSU = OE.getDst();
1936 SUnit *PredSU = IE.getSrc();
1950 static bool computePath(SUnit *Cur, SetVector<SUnit *> &Path,
1951 SetVector<SUnit *> &DestNodes,
1952 SetVector<SUnit *> &Exclude,
1953 SmallPtrSet<SUnit *, 8> &Visited,
1986 for (SUnit *SU : NS) {
1999 for (SUnit *SU : NS)
2028 std::vector<SUnit *> SUnits(NS.begin(), NS.end());
2029 llvm::sort(SUnits, [](const SUnit *A, const SUnit *B) {
2065 SmallSetVector<SUnit *, 8> S1;
2072 SmallSetVector<SUnit *, 8> S2;
2107 SetVector<SUnit *> NodesAdded;
2108 SmallPtrSet<SUnit *, 8> Visited;
2112 SmallSetVector<SUnit *, 8> N;
2115 SetVector<SUnit *> Path;
2116 for (SUnit *NI : N) {
2126 SetVector<SUnit *> Path;
2127 for (SUnit *NI : N) {
2140 SmallSetVector<SUnit *, 8> N;
2142 for (SUnit *I : N)
2151 for (SUnit *I : N)
2158 for (SUnit &SU : SUnits) {
2169 void SwingSchedulerDAG::addConnectedNodes(SUnit *SU, NodeSet &NewSet,
2170 SetVector<SUnit *> &NodesAdded) {
2174 SUnit *Successor = OE.getDst();
2180 SUnit *Predecessor = IE.getSrc();
2188 static bool isIntersect(SmallSetVector<SUnit *, 8> &Set1, const NodeSet &Set2,
2189 SmallSetVector<SUnit *, 8> &Result) {
2191 for (SUnit *SU : Set1) {
2208 for (SUnit *SU : *J)
2224 J->remove_if([&](SUnit *SUJ) { return I->count(SUJ); });
2240 SmallSetVector<SUnit *, 8> R;
2246 SmallSetVector<SUnit *, 8> N;
2269 SUnit *maxASAP = nullptr;
2270 for (SUnit *SU : Nodes) {
2286 SUnit *maxHeight = nullptr;
2287 for (SUnit *I : R) {
2303 SUnit *SU = OE.getDst();
2318 SUnit *SU = IE.getSrc();
2330 SmallSetVector<SUnit *, 8> N;
2338 SUnit *maxDepth = nullptr;
2339 for (SUnit *I : R) {
2360 SUnit *SU = IE.getSrc();
2373 SUnit *SU = OE.getDst();
2385 SmallSetVector<SUnit *, 8> N;
2395 for (SUnit *I : NodeOrder)
2423 SetVector<SUnit *>::iterator NI = NodeOrder.begin();
2424 SetVector<SUnit *>::iterator NE = NodeOrder.end();
2426 SUnit *SU = *NI;
2626 SUnit *SU = getSUnit(MI);
2627 DenseMap<SUnit *, std::pair<unsigned, int64_t>>::iterator It =
2693 assert(SI != nullptr && DI != nullptr && "Expecting SUnit with an MI.");
2774 bool SMSchedule::insert(SUnit *SU, int StartCycle, int EndCycle, int II) {
2816 SmallPtrSet<SUnit *, 8> Visited;
2822 SUnit *PrevSU = Cur.getSrc();
2825 std::map<SUnit *, int>::const_iterator it = InstrToCycle.find(PrevSU);
2840 SmallPtrSet<SUnit *, 8> Visited;
2846 SUnit *SuccSU = Cur.getDst();
2849 std::map<SUnit *, int>::const_iterator it = InstrToCycle.find(SuccSU);
2864 static SUnit *multipleIterations(SUnit *SU, SwingSchedulerDAG *DAG) {
2875 void SMSchedule::computeStart(SUnit *SU, int *MaxEarlyStart, int *MinLateStart,
2883 for (SUnit *I : getInstructions(cycle)) {
2910 SUnit *BE = multipleIterations(I, DAG);
2925 void SMSchedule::orderDependence(const SwingSchedulerDAG *SSD, SUnit *SU,
2926 std::deque<SUnit *> &Insts) const {
2937 for (std::deque<SUnit *>::iterator I = Insts.begin(), E = Insts.end(); I != E;
3033 SUnit *UseSU = Insts.at(MoveUse);
3034 SUnit *DefSU = Insts.at(MoveDef);
3061 SUnit *DefSU = SSD->getSUnit(&Phi);
3068 SUnit *UseSU = SSD->getSUnit(MRI.getVRegDef(LoopVal));
3108 SUnit *SU, const SwingSchedulerDDG *DDG) const {
3116 SmallSet<SUnit *, 8> SMSchedule::computeUnpipelineableNodes(
3118 SmallSet<SUnit *, 8> DoNotPipeline;
3119 SmallVector<SUnit *, 8> Worklist;
3148 SmallSet<SUnit *, 8> DNP = computeUnpipelineableNodes(SSD, PLI);
3151 for (SUnit &SU : SSD->SUnits) {
3196 for (SUnit &SU : SSD->SUnits) {
3203 SUnit *Dst = OE.getDst();
3228 // a sorted vector that maps each SUnit to its index in the NodeOrder
3229 typedef std::pair<SUnit *, unsigned> UnitIndex;
3244 // for each SUnit in the NodeOrder, check whether
3246 // of the SUnit. If this is the case, and the SUnit
3250 SUnit *SU = NodeOrder[i];
3256 SUnit *Succ;
3257 SUnit *Pred;
3262 SUnit *PredSU = IE.getSrc();
3273 SUnit *SuccSU = OE.getDst();
3318 void SwingSchedulerDAG::fixupRegisterOverlaps(std::deque<SUnit *> &Instrs) {
3321 for (SUnit *SU : Instrs) {
3330 DenseMap<SUnit *, std::pair<unsigned, int64_t>>::iterator It =
3364 std::deque<SUnit *>
3366 const std::deque<SUnit *> &Instrs) const {
3367 std::deque<SUnit *> NewOrderPhi;
3368 for (SUnit *SU : Instrs) {
3372 std::deque<SUnit *> NewOrderI;
3373 for (SUnit *SU : Instrs) {
3389 std::deque<SUnit *> &cycleInstrs =
3391 for (SUnit *SU : llvm::reverse(cycleInstrs))
3403 for (const SUnit &SU : SSD->SUnits)
3409 std::deque<SUnit *> &cycleInstrs = ScheduledInstrs[Cycle];
3432 for (SUnit *CI : cycleInstrs->second) {
3509 bool ResourceManager::canReserveResources(SUnit &SU, int Cycle) {
3535 void ResourceManager::reserveResources(SUnit &SU, int Cycle) {
3607 for (SUnit &SU : DAG->SUnits)
3612 for (SUnit &SU : DAG->SUnits)
3673 for (SUnit &SU : DAG->SUnits) {
3761 SwingSchedulerDDG::getEdges(const SUnit *SU) {
3770 SwingSchedulerDDG::getEdges(const SUnit *SU) const {
3778 void SwingSchedulerDDG::addEdge(const SUnit *SU,
3787 void SwingSchedulerDDG::initEdges(SUnit *SU) {
3799 SwingSchedulerDDG::SwingSchedulerDDG(std::vector<SUnit> &SUnits, SUnit *EntrySU,
3800 SUnit *ExitSU)
3811 SwingSchedulerDDG::getInEdges(const SUnit *SU) const {
3816 SwingSchedulerDDG::getOutEdges(const SUnit *SU) const {