/// ComputeDepth - Calculate the maximal path from the node to the exit. /// void SUnit::ComputeDepth() { SmallVector<SUnit*, 8> WorkList; WorkList.push_back(this); do { SUnit *Cur = WorkList.back(); bool Done = true; unsigned MaxPredDepth = 0; for (SUnit::const_pred_iterator I = Cur->Preds.begin(), E = Cur->Preds.end(); I != E; ++I) { SUnit *PredSU = I->getSUnit(); if (PredSU->isDepthCurrent) MaxPredDepth = std::max(MaxPredDepth, PredSU->Depth + I->getLatency()); else { Done = false; WorkList.push_back(PredSU); } } if (Done) { WorkList.pop_back(); if (MaxPredDepth != Cur->Depth) { Cur->setDepthDirty(); Cur->Depth = MaxPredDepth; } Cur->isDepthCurrent = true; } } while (!WorkList.empty()); }