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

Unified Diff: src/IceOperand.h

Issue 1381563004: Subzero: Fix a bug in register allocator overlap computation. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fix the asserts() guard Created 5 years, 3 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/IceCompileServer.cpp ('k') | src/IceOperand.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/IceOperand.h
diff --git a/src/IceOperand.h b/src/IceOperand.h
index 28c118d23c1966df4555a59a6a5e3621f2eee0ff..1806f8ae91356e0c8e0a83655258de3b58eaee63 100644
--- a/src/IceOperand.h
+++ b/src/IceOperand.h
@@ -629,8 +629,9 @@ public:
VariableTracking(const VariableTracking &) = default;
MultiDefState getMultiDef() const { return MultiDef; }
MultiBlockState getMultiBlock() const { return MultiBlock; }
- const Inst *getFirstDefinition() const;
+ const Inst *getFirstDefinitionSingleBlock() const;
const Inst *getSingleDefinition() const;
+ const Inst *getFirstDefinition() const;
const InstDefList &getLatterDefinitions() const { return Definitions; }
CfgNode *getNode() const { return SingleUseNode; }
RegWeight getUseWeight() const { return UseWeight; }
@@ -643,11 +644,10 @@ private:
MultiBlockState MultiBlock = MBS_Unknown;
CfgNode *SingleUseNode = nullptr;
CfgNode *SingleDefNode = nullptr;
- /// All definitions of the variable are collected here, in increasing
- /// order of instruction number.
+ /// All definitions of the variable are collected in Definitions[] (except for
+ /// the earliest definition), in increasing order of instruction number.
InstDefList Definitions; /// Only used if Kind==VMK_All
- const Inst *FirstOrSingleDefinition =
- nullptr; /// Is a copy of Definitions[0] if Kind==VMK_All
+ const Inst *FirstOrSingleDefinition = nullptr;
RegWeight UseWeight;
};
@@ -665,6 +665,7 @@ public:
/// Add a single node. This is called by init(), and can be called
/// incrementally from elsewhere, e.g. after edge-splitting.
void addNode(CfgNode *Node);
+ MetadataKind getKind() const { return Kind; }
/// Returns whether the given Variable is tracked in this object. It should
/// only return false if changes were made to the CFG after running init(), in
/// which case the state is stale and the results shouldn't be trusted (but it
@@ -678,13 +679,17 @@ public:
/// Returns the first definition instruction of the given Variable. This is
/// only valid for variables whose definitions are all within the same block,
/// e.g. T after the lowered sequence "T=B; T+=C; A=T", for which
- /// getFirstDefinition(T) would return the "T=B" instruction. For variables
- /// with definitions span multiple blocks, nullptr is returned.
- const Inst *getFirstDefinition(const Variable *Var) const;
+ /// getFirstDefinitionSingleBlock(T) would return the "T=B" instruction. For
+ /// variables with definitions span multiple blocks, nullptr is returned.
+ const Inst *getFirstDefinitionSingleBlock(const Variable *Var) const;
/// Returns the definition instruction of the given Variable, when the
/// variable has exactly one definition. Otherwise, nullptr is returned.
const Inst *getSingleDefinition(const Variable *Var) const;
- /// Returns the list of all definition instructions of the given Variable.
+ /// getFirstDefinition() and getLatterDefinitions() are used together to
+ /// return the complete set of instructions that define the given Variable,
+ /// regardless of whether the definitions are within the same block (in
+ /// contrast to getFirstDefinitionSingleBlock).
+ const Inst *getFirstDefinition(const Variable *Var) const;
const InstDefList &getLatterDefinitions(const Variable *Var) const;
/// Returns whether the given Variable is live across multiple blocks. Mainly,
« no previous file with comments | « src/IceCompileServer.cpp ('k') | src/IceOperand.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698