Chain operands aren't real uses: they don't require the full latency of the

predecessor to finish before they can start.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26717 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2006-03-12 03:52:09 +00:00
parent 53fbf2a8e8
commit b2215030d6

View File

@ -387,8 +387,6 @@ void ScheduleDAGList::dumpSchedule() const {
}
/// Schedule - Schedule the DAG using list scheduling.
/// FIXME: Right now it only supports the burr (bottom up register reducing)
/// heuristic.
void ScheduleDAGList::Schedule() {
DEBUG(std::cerr << "********** List Scheduling **********\n");
@ -552,8 +550,16 @@ void ScheduleDAGList::ReleaseSucc(SUnit *SuccSU, bool isChain) {
unsigned AvailableCycle = 0;
for (std::set<std::pair<SUnit*, bool> >::iterator I = SuccSU->Preds.begin(),
E = SuccSU->Preds.end(); I != E; ++I) {
AvailableCycle = std::max(AvailableCycle,
I->first->Cycle + I->first->Latency);
// If this is a token edge, we don't need to wait for the full latency of
// the preceeding instruction (e.g. a long-latency load) unless there is
// also some other data dependence.
unsigned PredDoneCycle = I->first->Cycle;
if (!I->second)
PredDoneCycle += I->first->Latency;
else
PredDoneCycle += 1;
AvailableCycle = std::max(AvailableCycle, PredDoneCycle);
}
PendingQueue.push_back(std::make_pair(AvailableCycle, SuccSU));