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

Unified Diff: src/IceLiveness.h

Issue 680733002: Subzero: Allow delaying Phi lowering until after register allocation. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fix vector const undef lowering for phis. Created 6 years, 2 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/IceInstX8632.cpp ('k') | src/IceLiveness.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/IceLiveness.h
diff --git a/src/IceLiveness.h b/src/IceLiveness.h
index f6af0e1033100b2ab1bd17af0364b1d640b348b5..a542f3ea3d98e252562dc3ed181a992561474d2c 100644
--- a/src/IceLiveness.h
+++ b/src/IceLiveness.h
@@ -32,9 +32,14 @@ class LivenessNode {
// LivenessNode &operator=(const LivenessNode &) = delete;
public:
- LivenessNode() : NumLocals(0) {}
+ LivenessNode() : NumLocals(0), NumNonDeadPhis(0) {}
// NumLocals is the number of Variables local to this block.
SizeT NumLocals;
+ // NumNonDeadPhis tracks the number of Phi instructions that
+ // Inst::liveness() identified as tentatively live. If
+ // NumNonDeadPhis changes from the last liveness pass, then liveness
+ // has not yet converged.
+ SizeT NumNonDeadPhis;
// LiveToVarMap maps a liveness bitvector index to a Variable. This
// is generally just for printing/dumping. The index should be less
// than NumLocals + Liveness::NumGlobals.
@@ -66,20 +71,36 @@ public:
SizeT getNumVarsInNode(const CfgNode *Node) const {
return NumGlobals + Nodes[Node->getIndex()].NumLocals;
}
+ SizeT &getNumNonDeadPhis(const CfgNode *Node) {
+ return Nodes[Node->getIndex()].NumNonDeadPhis;
+ }
LivenessBV &getLiveIn(const CfgNode *Node) {
- return Nodes[Node->getIndex()].LiveIn;
+ SizeT Index = Node->getIndex();
+ resize(Index);
+ return Nodes[Index].LiveIn;
}
LivenessBV &getLiveOut(const CfgNode *Node) {
- return Nodes[Node->getIndex()].LiveOut;
+ SizeT Index = Node->getIndex();
+ resize(Index);
+ return Nodes[Index].LiveOut;
}
LiveBeginEndMap *getLiveBegin(const CfgNode *Node) {
- return &Nodes[Node->getIndex()].LiveBegin;
+ SizeT Index = Node->getIndex();
+ resize(Index);
+ return &Nodes[Index].LiveBegin;
}
LiveBeginEndMap *getLiveEnd(const CfgNode *Node) {
- return &Nodes[Node->getIndex()].LiveEnd;
+ SizeT Index = Node->getIndex();
+ resize(Index);
+ return &Nodes[Index].LiveEnd;
}
private:
+ // Resize Nodes so that Nodes[Index] is valid.
+ void resize(SizeT Index) {
+ if (Index >= Nodes.size())
+ Nodes.resize(Index + 1);
+ }
Cfg *Func;
LivenessMode Mode;
SizeT NumGlobals;
« no previous file with comments | « src/IceInstX8632.cpp ('k') | src/IceLiveness.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698