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

Unified Diff: src/IceInst.h

Issue 300563003: Subzero: Initial O2 lowering (Closed) Base URL: https://gerrit.chromium.org/gerrit/p/native_client/pnacl-subzero.git@master
Patch Set: Created 6 years, 7 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
Index: src/IceInst.h
diff --git a/src/IceInst.h b/src/IceInst.h
index fd0eeea9d76b6908bf8791c9f019ab25424b81ce..d066a81d1d9e16991747ffe5c50c9539e28949c1 100644
--- a/src/IceInst.h
+++ b/src/IceInst.h
@@ -57,9 +57,11 @@ public:
InstKind getKind() const { return Kind; }
int32_t getNumber() const { return Number; }
+ void renumber(Cfg *Func);
bool isDeleted() const { return Deleted; }
void setDeleted() { Deleted = true; }
+ void deleteIfDead();
bool hasSideEffects() const { return HasSideEffects; }
@@ -71,6 +73,8 @@ public:
return Srcs[I];
}
+ bool isLastUse(const Operand *Src) const;
+
// Returns a list of out-edges corresponding to a terminator
// instruction, which is the last instruction of the block.
virtual NodeList getTerminatorEdges() const {
@@ -88,8 +92,11 @@ public:
// basic blocks, i.e. used in a different block from their definition.
void updateVars(CfgNode *Node);
+ void liveness(LivenessMode Mode, int32_t InstNumber, llvm::BitVector &Live,
+ Liveness *Liveness, const CfgNode *Node);
virtual void emit(const Cfg *Func) const;
virtual void dump(const Cfg *Func) const;
+ virtual void dumpExtras(const Cfg *Func) const;
void dumpDecorated(const Cfg *Func) const;
void emitSources(const Cfg *Func) const;
void dumpSources(const Cfg *Func) const;
@@ -105,6 +112,11 @@ protected:
assert(NumSrcs < MaxSrcs);
Srcs[NumSrcs++] = Src;
}
+ void setLastUse(SizeT VarIndex) {
+ if (VarIndex < 8 * sizeof(LiveRangesEnded))
JF 2014/05/25 22:50:50 s/8/CHAR_BIT/
Jim Stichnoth 2014/05/29 01:39:46 Done.
+ LiveRangesEnded |= (1u << VarIndex);
JF 2014/05/25 22:50:50 Use a typedef for LiveRangesEnded, and cast 1u to
Jim Stichnoth 2014/05/29 01:39:46 Done.
+ }
+ void resetLastUses() { LiveRangesEnded = 0; }
// The destroy() method lets the instruction cleanly release any
// memory that was allocated via the Cfg's allocator.
virtual void destroy(Cfg *Func) { Func->deallocateArrayOf<Operand *>(Srcs); }
@@ -114,6 +126,8 @@ protected:
int32_t Number;
// Deleted means irrevocably deleted.
bool Deleted;
+ // Dead means pending deletion after liveness analysis converges.
+ bool Dead;
// HasSideEffects means the instruction is something like a function
// call or a volatile load that can't be removed even if its Dest
// variable is not live.
@@ -124,6 +138,8 @@ protected:
SizeT NumSrcs;
Operand **Srcs;
+ uint32_t LiveRangesEnded; // only first 32 src operands tracked, sorry
+
private:
Inst(const Inst &) LLVM_DELETED_FUNCTION;
Inst &operator=(const Inst &) LLVM_DELETED_FUNCTION;
@@ -393,6 +409,8 @@ public:
}
void addArgument(Operand *Source, CfgNode *Label);
Operand *getOperandForTarget(CfgNode *Target) const;
+ void livenessPhiOperand(llvm::BitVector &Live, CfgNode *Target,
+ Liveness *Liveness);
Inst *lower(Cfg *Func, CfgNode *Node);
virtual void dump(const Cfg *Func) const;
static bool classof(const Inst *Inst) { return Inst->getKind() == Phi; }
@@ -626,6 +644,7 @@ class InstTarget : public Inst {
public:
virtual void emit(const Cfg *Func) const = 0;
virtual void dump(const Cfg *Func) const;
+ virtual void dumpExtras(const Cfg *Func) const;
static bool classof(const Inst *Inst) { return Inst->getKind() >= Target; }
protected:

Powered by Google App Engine
This is Rietveld 408576698