| Index: src/IceCfg.h
|
| diff --git a/src/IceCfg.h b/src/IceCfg.h
|
| index 05e1e3b30ace68b9ccc56b2b85fa8f6ca8cbe7b2..5f3bfd3fc67b90da0411af9267e3334b0da695de 100644
|
| --- a/src/IceCfg.h
|
| +++ b/src/IceCfg.h
|
| @@ -58,7 +58,7 @@ public:
|
| const NodeList &getNodes() const { return Nodes; }
|
|
|
| // Manage instruction numbering.
|
| - int newInstNumber() { return NextInstNumber++; }
|
| + int32_t newInstNumber() { return NextInstNumber++; }
|
|
|
| // Manage Variables.
|
| Variable *makeVariable(Type Ty, const CfgNode *Node,
|
| @@ -70,16 +70,28 @@ public:
|
| void addArg(Variable *Arg);
|
| const VarList &getArgs() const { return Args; }
|
|
|
| + // Miscellaneous accessors.
|
| + TargetLowering *getTarget() const { return Target.get(); }
|
| + bool hasComputedFrame() const;
|
| +
|
| + // Passes over the CFG.
|
| + void translate();
|
| // After the CFG is fully constructed, iterate over the nodes and
|
| // compute the predecessor edges, in the form of
|
| // CfgNode::InEdges[].
|
| void computePredecessors();
|
| + void placePhiLoads();
|
| + void placePhiStores();
|
| + void deletePhis();
|
| + void genCode();
|
| + void genFrame();
|
|
|
| // Manage the CurrentNode field, which is used for validating the
|
| // Variable::DefNode field during dumping/emitting.
|
| void setCurrentNode(const CfgNode *Node) { CurrentNode = Node; }
|
| const CfgNode *getCurrentNode() const { return CurrentNode; }
|
|
|
| + void emit();
|
| void dump();
|
|
|
| // Allocate data of type T using the per-Cfg allocator.
|
| @@ -124,9 +136,10 @@ private:
|
| IceString ErrorMessage;
|
| CfgNode *Entry; // entry basic block
|
| NodeList Nodes; // linearized node list; Entry should be first
|
| - int NextInstNumber;
|
| + int32_t NextInstNumber;
|
| VarList Variables;
|
| VarList Args; // subset of Variables, in argument order
|
| + llvm::OwningPtr<TargetLowering> Target;
|
|
|
| // CurrentNode is maintained during dumping/emitting just for
|
| // validating Variable::DefNode. Normally, a traversal over
|
|
|