Chromium Code Reviews| Index: src/IceCfg.cpp |
| diff --git a/src/IceCfg.cpp b/src/IceCfg.cpp |
| index 847563cc809654d7e1435d6d7e925d08ce264c92..268240cff525c6cfac317747ab9c45396e0b36e4 100644 |
| --- a/src/IceCfg.cpp |
| +++ b/src/IceCfg.cpp |
| @@ -61,6 +61,12 @@ CfgNode *Cfg::makeNode() { |
| return Node; |
| } |
| +void Cfg::replaceNodes(const NodeList &NewNodes) { |
| + Nodes = NewNodes; |
|
John
2015/08/06 17:22:54
The CL description mentions "large numbers." So, I
Karl
2015/08/06 18:55:52
Done.
|
| + for (size_t i = 0, sz = Nodes.size(); i < sz; ++i) |
|
Jim Stichnoth
2015/08/06 17:24:33
for (SizeT I = 0, NumNodes = getNumNodes(); I < Nu
Karl
2015/08/06 18:55:52
Done.
|
| + Nodes[i]->resetIndex(i); |
| +} |
| + |
| void Cfg::addArg(Variable *Arg) { |
| Arg->setIsArg(); |
| Args.push_back(Arg); |
| @@ -361,14 +367,12 @@ void Cfg::reorderNodes() { |
| } |
| // Reorder Nodes according to the built-up lists. |
| - SizeT OldSize = Nodes.size(); |
| - (void)OldSize; |
| - Nodes.clear(); |
| + NodeList Reordered; |
|
John
2015/08/06 17:22:54
Reordered.reserve(Placed.size() + Unreachable.size
Karl
2015/08/06 18:55:52
Done.
|
| for (CfgNode *Node : Placed) |
| - Nodes.push_back(Node); |
| + Reordered.push_back(Node); |
| for (CfgNode *Node : Unreachable) |
| - Nodes.push_back(Node); |
| - assert(Nodes.size() == OldSize); |
|
Jim Stichnoth
2015/08/06 17:24:33
Can you preserve the size assert? This is to make
Karl
2015/08/06 18:55:51
Added assert back.
|
| + Reordered.push_back(Node); |
| + replaceNodes(Reordered); |
| } |
| namespace { |
| @@ -403,15 +407,12 @@ 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; |
| 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); |
| + replaceNodes(Shuffled); |
| dump("After basic block shuffling"); |
| } |