Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Unified Diff: src/IceCfg.cpp

Issue 1275953002: Fix translator handling of basic block indices. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fix nits. Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/IceCfg.h ('k') | src/IceDefs.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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");
}
« no previous file with comments | « src/IceCfg.h ('k') | src/IceDefs.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698