| Index: src/IceCfg.cpp
|
| diff --git a/src/IceCfg.cpp b/src/IceCfg.cpp
|
| index 58d795757bc506066fe6a1a3d4e3dd945cacc7be..4288f6d16b32acc8e358a28fd8374d2e0df57a1c 100644
|
| --- a/src/IceCfg.cpp
|
| +++ b/src/IceCfg.cpp
|
| @@ -61,6 +61,12 @@ CfgNode *Cfg::makeNode() {
|
| return Node;
|
| }
|
|
|
| +void Cfg::swapNodes(NodeList &NewNodes) {
|
| + Nodes.swap(NewNodes);
|
| + for (SizeT I = 0, NumNodes = getNumNodes(); I < NumNodes; ++I)
|
| + Nodes[I]->resetIndex(I);
|
| +}
|
| +
|
| void Cfg::addArg(Variable *Arg) {
|
| Arg->setIsArg();
|
| Args.push_back(Arg);
|
| @@ -358,14 +364,14 @@ void Cfg::reorderNodes() {
|
| }
|
|
|
| // Reorder Nodes according to the built-up lists.
|
| - SizeT OldSize = Nodes.size();
|
| - (void)OldSize;
|
| - Nodes.clear();
|
| + NodeList Reordered;
|
| + Reordered.reserve(Placed.size() + Unreachable.size());
|
| for (CfgNode *Node : Placed)
|
| - Nodes.push_back(Node);
|
| + Reordered.push_back(Node);
|
| for (CfgNode *Node : Unreachable)
|
| - Nodes.push_back(Node);
|
| - assert(Nodes.size() == OldSize);
|
| + Reordered.push_back(Node);
|
| + assert(getNumNodes() == Reordered.size());
|
| + swapNodes(Reordered);
|
| }
|
|
|
| namespace {
|
| @@ -400,15 +406,14 @@ void Cfg::shuffleNodes() {
|
| if (ToVisit[Node->getIndex()])
|
| Unreachable.push_back(Node);
|
| // Copy the layout list to the Nodes.
|
| - SizeT OldSize = Nodes.size();
|
| - (void)OldSize;
|
| - Nodes.clear();
|
| + NodeList Shuffled;
|
| + Shuffled.reserve(ReversedReachable.size() + Unreachable.size());
|
| for (CfgNode *Node : reverse_range(ReversedReachable))
|
| - Nodes.emplace_back(Node);
|
| - for (CfgNode *Node : Unreachable) {
|
| - Nodes.emplace_back(Node);
|
| - }
|
| - assert(Nodes.size() == OldSize);
|
| + Shuffled.push_back(Node);
|
| + for (CfgNode *Node : Unreachable)
|
| + Shuffled.push_back(Node);
|
| + assert(Nodes.size() == Shuffled.size());
|
| + swapNodes(Shuffled);
|
|
|
| dump("After basic block shuffling");
|
| }
|
|
|