Home | History | Annotate | Download | only in CodeGen

Lines Matching defs:DAG

65 // DAG subtrees must have at least this many nodes.
180 /// consistent with the DAG builder, which traverses the interior of the
183 /// This design avoids exposing scheduling boundaries to the DAG builder,
184 /// simplifying the DAG builder's support for "special" target instructions.
235 // boundary at the bottom of the region. The DAG does not include RegionEnd,
512 /// only includes instructions that have DAG nodes, not scheduling boundaries.
530 // Initialize the strategy before modifying the DAG.
538 // Initialize ready queues now that the DAG and priority data are finalized.
563 /// Build the DAG and setup three register pressure trackers.
572 // Build the DAG, and compute current register pressure.
616 /// Identify DAG roots and setup scheduler queues.
622 // Release all DAG roots for scheduling, not including EntrySU/ExitSU.
709 // Notify the scheduling strategy after updating the DAG.
748 // LoadClusterMutation - DAG post-processing to cluster loads.
752 /// \brief Post-process the DAG to create cluster edges between neighboring
772 virtual void apply(ScheduleDAGMI *DAG);
774 void clusterNeighboringLoads(ArrayRef<SUnit*> Loads, ScheduleDAGMI *DAG);
787 ScheduleDAGMI *DAG) {
809 && DAG->addEdge(SUb, SDep(SUa, SDep::Cluster))) {
822 DAG->addEdge(SI->getSUnit(), SDep(SUb, SDep::Artificial));
831 /// \brief Callback from DAG postProcessing to create cluster edges for loads.
832 void LoadClusterMutation::apply(ScheduleDAGMI *DAG) {
833 // Map DAG NodeNum to store chain ID.
837 for (unsigned Idx = 0, End = DAG->SUnits.size(); Idx != End; ++Idx) {
838 SUnit *SU = &DAG->SUnits[Idx];
841 unsigned ChainPredID = DAG->SUnits.size();
860 clusterNeighboringLoads(StoreChainDependents[Idx], DAG);
864 // MacroFusion - DAG post-processing to encourage fusion of macro ops.
868 /// \brief Post-process the DAG to create cluster edges between instructions
875 virtual void apply(ScheduleDAGMI *DAG);
879 /// \brief Callback from DAG postProcessing to create cluster edges to encourage
881 void MacroFusion::apply(ScheduleDAGMI *DAG) {
883 MachineInstr *Branch = DAG->ExitSU.getInstr();
887 for (unsigned Idx = DAG->SUnits.size(); Idx > 0;) {
888 SUnit *SU = &DAG->SUnits[--Idx];
898 bool Success = DAG->addEdge(&DAG->ExitSU, SDep(SU, SDep::Cluster));
900 assert(Success && "No DAG nodes should be reachable from ExitSU");
987 void initResourceDelta(const ScheduleDAGMI *DAG,
993 // Critical path through the DAG in expected latency.
1012 void init(ScheduleDAGMI *DAG, const TargetSchedModel *SchedModel);
1028 ScheduleDAGMI *DAG;
1068 // A new HazardRec is created for each DAG and owned by SchedBoundary.
1095 DAG(0), SchedModel(0), Rem(0), Available(ID, Name+".A"),
1103 void init(ScheduleDAGMI *dag, const TargetSchedModel *smodel,
1140 ScheduleDAGMI *DAG;
1158 DAG(0), SchedModel(0), TRI(0), Top(TopQID, "TopQ"), Bot(BotQID, "BotQ") {}
1160 virtual void initialize(ScheduleDAGMI *dag);
1201 init(ScheduleDAGMI *DAG, const TargetSchedModel *SchedModel) {
1207 I = DAG->SUnits.begin(), E = DAG->SUnits.end(); I != E; ++I) {
1208 const MCSchedClassDesc *SC = DAG->getSchedClass(&*I);
1228 init(ScheduleDAGMI *dag, const TargetSchedModel *smodel, SchedRemainder *rem) {
1230 DAG = dag;
1237 void ConvergingScheduler::initialize(ScheduleDAGMI *dag) {
1238 DAG = dag;
1239 SchedModel = DAG->getSchedModel();
1240 TRI = DAG->TRI;
1242 Rem.init(DAG, SchedModel);
1243 Top.init(DAG, SchedModel, &Rem);
1244 Bot.init(DAG, SchedModel, &Rem);
1246 DAG->computeDFSResult();
1253 const TargetMachine &TM = DAG->MF.getTarget();
1254 Top.HazardRec = TM.getInstrInfo()->CreateTargetMIHazardRecognizer(Itin, DAG);
1255 Bot.HazardRec = TM.getInstrInfo()->CreateTargetMIHazardRecognizer(Itin, DAG);
1300 Rem.CriticalPath = DAG->ExitSU.getDepth();
1447 const MCSchedClassDesc *SC = DAG->getSchedClass(SU);
1648 initResourceDelta(const ScheduleDAGMI *DAG,
1653 const MCSchedClassDesc *SC = DAG->getSchedClass(SU);
1720 DAG->getRegionCriticalPSets(),
1721 DAG->getRegPressure().MaxSetPressure);
1748 // the scheduler pass by combining the loads during DAG postprocessing.
1750 Zone.isTop() ? DAG->getNextClusterSucc() : DAG->getNextClusterPred();
1764 TryCand.initResourceDelta(DAG, SchedModel);
1924 Cand.SU->dump(DAG);
1931 /// DAG building. To adjust for the current scheduling location we need to
1951 TryCand.initResourceDelta(DAG, SchedModel);
1983 pickNodeFromQueue(Bot, DAG->getBotRPTracker(), BotCand);
1999 pickNodeFromQueue(Top, DAG->getTopRPTracker(), TopCand);
2033 if (DAG->top() == DAG->bottom()) {
2045 pickNodeFromQueue(Top, DAG->getTopRPTracker(), TopCand);
2056 pickNodeFromQueue(Bot, DAG->getBotRPTracker(), BotCand);
2075 SU->dump(DAG));
2098 ScheduleDAGMI *DAG = new ScheduleDAGMI(C, new ConvergingScheduler());
2099 // Register DAG post-processors.
2101 DAG->addMutation(new LoadClusterMutation(DAG->TII, DAG->TRI));
2103 DAG->addMutation(new MacroFusion(DAG->TII));
2104 return DAG;
2159 ScheduleDAGMI *DAG;
2164 ILPScheduler(bool MaximizeILP): DAG(0), Cmp(MaximizeILP) {}
2166 virtual void initialize(ScheduleDAGMI *dag) {
2167 DAG = dag;
2168 DAG->computeDFSResult();
2169 Cmp.DFSResult = DAG->getDFSResult();
2170 Cmp.ScheduledTrees = &DAG->getScheduledTrees();
2191 << " ILP: " << DAG->getDFSResult()->getILP(SU)
2192 << " Tree: " << DAG->getDFSResult()->getSubtreeID(SU) << " @"
2193 << DAG->getDFSResult()->getSubtreeLevel(
2194 DAG->getDFSResult()->getSubtreeID(SU)) << '\n');
2388 /// viewGraph - Pop up a ghostview window with the reachable parts of the DAG