Index: src/IceCfg.cpp |
diff --git a/src/IceCfg.cpp b/src/IceCfg.cpp |
index b4c7aca5ea7996e7e3626e41f5f78c5745b6d677..1134fdc7054a43e5d22c4d5c29dfd34251ac97f9 100644 |
--- a/src/IceCfg.cpp |
+++ b/src/IceCfg.cpp |
@@ -82,9 +82,8 @@ void Cfg::translate() { |
} |
void Cfg::computePredecessors() { |
- for (NodeList::iterator I = Nodes.begin(), E = Nodes.end(); I != E; ++I) { |
- (*I)->computePredecessors(); |
- } |
+ for (CfgNode *Node : Nodes) |
+ Node->computePredecessors(); |
} |
void Cfg::renumberInstructions() { |
@@ -92,18 +91,16 @@ void Cfg::renumberInstructions() { |
GlobalContext::getTimerID("renumberInstructions"); |
TimerMarker T(IDrenumberInstructions, getContext()); |
NextInstNumber = 1; |
- for (NodeList::iterator I = Nodes.begin(), E = Nodes.end(); I != E; ++I) { |
- (*I)->renumberInstructions(); |
- } |
+ for (CfgNode *Node : Nodes) |
+ Node->renumberInstructions(); |
} |
// placePhiLoads() must be called before placePhiStores(). |
void Cfg::placePhiLoads() { |
static TimerIdT IDplacePhiLoads = GlobalContext::getTimerID("placePhiLoads"); |
TimerMarker T(IDplacePhiLoads, getContext()); |
- for (NodeList::iterator I = Nodes.begin(), E = Nodes.end(); I != E; ++I) { |
- (*I)->placePhiLoads(); |
- } |
+ for (CfgNode *Node : Nodes) |
+ Node->placePhiLoads(); |
} |
// placePhiStores() must be called after placePhiLoads(). |
@@ -111,17 +108,15 @@ void Cfg::placePhiStores() { |
static TimerIdT IDplacePhiStores = |
GlobalContext::getTimerID("placePhiStores"); |
TimerMarker T(IDplacePhiStores, getContext()); |
- for (NodeList::iterator I = Nodes.begin(), E = Nodes.end(); I != E; ++I) { |
- (*I)->placePhiStores(); |
- } |
+ for (CfgNode *Node : Nodes) |
+ Node->placePhiStores(); |
} |
void Cfg::deletePhis() { |
static TimerIdT IDdeletePhis = GlobalContext::getTimerID("deletePhis"); |
TimerMarker T(IDdeletePhis, getContext()); |
- for (NodeList::iterator I = Nodes.begin(), E = Nodes.end(); I != E; ++I) { |
- (*I)->deletePhis(); |
- } |
+ for (CfgNode *Node : Nodes) |
+ Node->deletePhis(); |
} |
void Cfg::doArgLowering() { |
@@ -133,26 +128,23 @@ void Cfg::doArgLowering() { |
void Cfg::doAddressOpt() { |
static TimerIdT IDdoAddressOpt = GlobalContext::getTimerID("doAddressOpt"); |
TimerMarker T(IDdoAddressOpt, getContext()); |
- for (NodeList::iterator I = Nodes.begin(), E = Nodes.end(); I != E; ++I) { |
- (*I)->doAddressOpt(); |
- } |
+ for (CfgNode *Node : Nodes) |
+ Node->doAddressOpt(); |
} |
void Cfg::doNopInsertion() { |
static TimerIdT IDdoNopInsertion = |
GlobalContext::getTimerID("doNopInsertion"); |
TimerMarker T(IDdoNopInsertion, getContext()); |
- for (NodeList::iterator I = Nodes.begin(), E = Nodes.end(); I != E; ++I) { |
- (*I)->doNopInsertion(); |
- } |
+ for (CfgNode *Node : Nodes) |
+ Node->doNopInsertion(); |
} |
void Cfg::genCode() { |
static TimerIdT IDgenCode = GlobalContext::getTimerID("genCode"); |
TimerMarker T(IDgenCode, getContext()); |
- for (NodeList::iterator I = Nodes.begin(), E = Nodes.end(); I != E; ++I) { |
- (*I)->genCode(); |
- } |
+ for (CfgNode *Node : Nodes) |
+ Node->genCode(); |
} |
// Compute the stack frame layout. |
@@ -163,11 +155,9 @@ void Cfg::genFrame() { |
// TODO: Consider folding epilog generation into the final |
// emission/assembly pass to avoid an extra iteration over the node |
// list. Or keep a separate list of exit nodes. |
- for (NodeList::iterator I = Nodes.begin(), E = Nodes.end(); I != E; ++I) { |
- CfgNode *Node = *I; |
+ for (CfgNode *Node : Nodes) |
if (Node->getHasReturn()) |
getTarget()->addEpilog(Node); |
- } |
} |
// This is a lightweight version of live-range-end calculation. Marks |
@@ -179,9 +169,8 @@ void Cfg::livenessLightweight() { |
GlobalContext::getTimerID("livenessLightweight"); |
TimerMarker T(IDlivenessLightweight, getContext()); |
getVMetadata()->init(); |
- for (NodeList::iterator I = Nodes.begin(), E = Nodes.end(); I != E; ++I) { |
- (*I)->livenessLightweight(); |
- } |
+ for (CfgNode *Node : Nodes) |
+ Node->livenessLightweight(); |
} |
void Cfg::liveness(LivenessMode Mode) { |
@@ -194,8 +183,8 @@ void Cfg::liveness(LivenessMode Mode) { |
llvm::BitVector NeedToProcess(Nodes.size(), true); |
while (NeedToProcess.any()) { |
// Iterate in reverse topological order to speed up convergence. |
- for (NodeList::reverse_iterator I = Nodes.rbegin(), E = Nodes.rend(); |
- I != E; ++I) { |
+ // TODO(stichnot): Use llvm::make_range with LLVM 3.5. |
+ for (auto I = Nodes.rbegin(), E = Nodes.rend(); I != E; ++I) { |
CfgNode *Node = *I; |
if (NeedToProcess[Node->getIndex()]) { |
NeedToProcess[Node->getIndex()] = false; |
@@ -203,24 +192,16 @@ void Cfg::liveness(LivenessMode Mode) { |
if (Changed) { |
// If the beginning-of-block liveness changed since the last |
// iteration, mark all in-edges as needing to be processed. |
- const NodeList &InEdges = Node->getInEdges(); |
- for (NodeList::const_iterator I1 = InEdges.begin(), |
- E1 = InEdges.end(); |
- I1 != E1; ++I1) { |
- CfgNode *Pred = *I1; |
+ for (CfgNode *Pred : Node->getInEdges()) |
NeedToProcess[Pred->getIndex()] = true; |
- } |
} |
} |
} |
} |
if (Mode == Liveness_Intervals) { |
// Reset each variable's live range. |
- for (VarList::const_iterator I = Variables.begin(), E = Variables.end(); |
- I != E; ++I) { |
- if (Variable *Var = *I) |
- Var->resetLiveRange(); |
- } |
+ for (Variable *Var : Variables) |
+ Var->resetLiveRange(); |
} |
// Collect timing for just the portion that constructs the live |
// range intervals based on the end-of-live-range computation, for a |
@@ -229,9 +210,8 @@ void Cfg::liveness(LivenessMode Mode) { |
// and build each Variable's live range. |
static TimerIdT IDliveRange = GlobalContext::getTimerID("liveRange"); |
TimerMarker T1(IDliveRange, getContext()); |
- for (NodeList::iterator I = Nodes.begin(), E = Nodes.end(); I != E; ++I) { |
- (*I)->livenessPostprocess(Mode, getLiveness()); |
- } |
+ for (CfgNode *Node : Nodes) |
+ Node->livenessPostprocess(Mode, getLiveness()); |
if (Mode == Liveness_Intervals) { |
// Special treatment for live in-args. Their liveness needs to |
// extend beyond the beginning of the function, otherwise an arg |
@@ -280,13 +260,8 @@ bool Cfg::validateLiveness() const { |
TimerMarker T(IDvalidateLiveness, getContext()); |
bool Valid = true; |
Ostream &Str = Ctx->getStrDump(); |
- for (NodeList::const_iterator I1 = Nodes.begin(), E1 = Nodes.end(); I1 != E1; |
- ++I1) { |
- CfgNode *Node = *I1; |
- InstList &Insts = Node->getInsts(); |
- for (InstList::const_iterator I2 = Insts.begin(), E2 = Insts.end(); |
- I2 != E2; ++I2) { |
- Inst *Inst = *I2; |
+ for (CfgNode *Node : Nodes) { |
+ for (Inst *Inst : Node->getInsts()) { |
if (Inst->isDeleted()) |
continue; |
if (llvm::isa<InstFakeKill>(Inst)) |
@@ -327,8 +302,8 @@ bool Cfg::validateLiveness() const { |
void Cfg::doBranchOpt() { |
static TimerIdT IDdoBranchOpt = GlobalContext::getTimerID("doBranchOpt"); |
TimerMarker T(IDdoBranchOpt, getContext()); |
- for (NodeList::iterator I = Nodes.begin(), E = Nodes.end(); I != E; ++I) { |
- NodeList::iterator NextNode = I; |
+ for (auto I = Nodes.begin(), E = Nodes.end(); I != E; ++I) { |
+ auto NextNode = I; |
++NextNode; |
(*I)->doBranchOpt(NextNode == E ? NULL : *NextNode); |
} |
@@ -360,16 +335,11 @@ void Cfg::emit() { |
Str << "\t.type\t" << MangledName << ",@function\n"; |
} |
Str << "\t.p2align " << getTarget()->getBundleAlignLog2Bytes() << ",0x"; |
- llvm::ArrayRef<uint8_t> Pad = getTarget()->getNonExecBundlePadding(); |
- for (llvm::ArrayRef<uint8_t>::iterator I = Pad.begin(), E = Pad.end(); |
- I != E; ++I) { |
- Str.write_hex(*I); |
- } |
+ for (AsmCodeByte I : getTarget()->getNonExecBundlePadding()) |
+ Str.write_hex(I); |
Str << "\n"; |
- for (NodeList::const_iterator I = Nodes.begin(), E = Nodes.end(); I != E; |
- ++I) { |
- (*I)->emit(this); |
- } |
+ for (CfgNode *Node : Nodes) |
+ Node->emit(this); |
Str << "\n"; |
} |
@@ -398,9 +368,7 @@ void Cfg::dump(const IceString &Message) { |
resetCurrentNode(); |
if (getContext()->isVerbose(IceV_Liveness)) { |
// Print summary info about variables |
- for (VarList::const_iterator I = Variables.begin(), E = Variables.end(); |
- I != E; ++I) { |
- Variable *Var = *I; |
+ for (Variable *Var : Variables) { |
Str << "// multiblock="; |
if (getVMetadata()->isTracked(Var)) |
Str << getVMetadata()->isMultiBlock(Var); |
@@ -412,13 +380,10 @@ void Cfg::dump(const IceString &Message) { |
} |
} |
// Print each basic block |
- for (NodeList::const_iterator I = Nodes.begin(), E = Nodes.end(); I != E; |
- ++I) { |
- (*I)->dump(this); |
- } |
- if (getContext()->isVerbose(IceV_Instructions)) { |
+ for (CfgNode *Node : Nodes) |
+ Node->dump(this); |
+ if (getContext()->isVerbose(IceV_Instructions)) |
Str << "}\n"; |
- } |
} |
} // end of namespace Ice |