Index: src/IceTargetLowering.h |
diff --git a/src/IceTargetLowering.h b/src/IceTargetLowering.h |
index e46399d311e6aa73ffc7d8e658c772df3b194b4a..7aa24832a0089fae0f6d099564388f3055395307 100644 |
--- a/src/IceTargetLowering.h |
+++ b/src/IceTargetLowering.h |
@@ -64,6 +64,7 @@ public: |
Inst *getLastInserted() const; |
void advanceCur() { Cur = Next; } |
void advanceNext() { advanceForward(Next); } |
+ void rewind(); |
void setInsertPoint(const InstList::iterator &Position) { Next = Position; } |
private: |
@@ -134,8 +135,18 @@ public: |
void doAddressOpt(); |
// Randomly insert NOPs. |
void doNopInsertion(); |
- // Lowers a single instruction. |
+ // Lowers a single non-Phi instruction. |
void lower(); |
+ // Does preliminary lowering of the set of Phi instructions in the |
+ // current node. The main intention is to do what's needed to keep |
+ // the unlowered Phi instructions consistent with the lowered |
+ // non-Phi instructions, e.g. to lower 64-bit operands on a 32-bit |
+ // target. |
+ virtual void prelowerPhis() {} |
+ // Lowers a list of "parallel" assignment instructions representing |
+ // a topological sort of the Phi instructions. |
+ virtual void lowerPhiAssignments(CfgNode *Node, |
+ const AssignList &Assignments) = 0; |
// Tries to do branch optimization on a single instruction. Returns |
// true if some optimization was done. |
virtual bool doBranchOpt(Inst * /*I*/, const CfgNode * /*NextNode*/) { |