OLD | NEW |
1 //===- subzero/src/IceTargetLowering.h - Lowering interface -----*- C++ -*-===// | 1 //===- subzero/src/IceTargetLowering.h - Lowering interface -----*- C++ -*-===// |
2 // | 2 // |
3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 /// | 9 /// |
10 /// \file | 10 /// \file |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 InstList::iterator getNext() const { return Next; } | 58 InstList::iterator getNext() const { return Next; } |
59 InstList::iterator getEnd() const { return End; } | 59 InstList::iterator getEnd() const { return End; } |
60 void insert(Inst *Inst); | 60 void insert(Inst *Inst); |
61 Inst *getLastInserted() const; | 61 Inst *getLastInserted() const; |
62 void advanceCur() { Cur = Next; } | 62 void advanceCur() { Cur = Next; } |
63 void advanceNext() { advanceForward(Next); } | 63 void advanceNext() { advanceForward(Next); } |
64 void setCur(InstList::iterator C) { Cur = C; } | 64 void setCur(InstList::iterator C) { Cur = C; } |
65 void setNext(InstList::iterator N) { Next = N; } | 65 void setNext(InstList::iterator N) { Next = N; } |
66 void rewind(); | 66 void rewind(); |
67 void setInsertPoint(const InstList::iterator &Position) { Next = Position; } | 67 void setInsertPoint(const InstList::iterator &Position) { Next = Position; } |
| 68 void availabilityReset(); |
| 69 void availabilityUpdate(); |
| 70 Variable *availabilityGet(Operand *Src) const; |
68 | 71 |
69 private: | 72 private: |
70 /// Node is the argument to Inst::updateVars(). | 73 /// Node is the argument to Inst::updateVars(). |
71 CfgNode *Node = nullptr; | 74 CfgNode *Node = nullptr; |
72 Inst *LastInserted = nullptr; | 75 Inst *LastInserted = nullptr; |
73 /// Cur points to the current instruction being considered. It is guaranteed | 76 /// Cur points to the current instruction being considered. It is guaranteed |
74 /// to point to a non-deleted instruction, or to be End. | 77 /// to point to a non-deleted instruction, or to be End. |
75 InstList::iterator Cur; | 78 InstList::iterator Cur; |
76 /// Next doubles as a pointer to the next valid instruction (if any), and the | 79 /// Next doubles as a pointer to the next valid instruction (if any), and the |
77 /// new-instruction insertion point. It is also updated for the caller in case | 80 /// new-instruction insertion point. It is also updated for the caller in case |
78 /// the lowering consumes more than one high-level instruction. It is | 81 /// the lowering consumes more than one high-level instruction. It is |
79 /// guaranteed to point to a non-deleted instruction after Cur, or to be End. | 82 /// guaranteed to point to a non-deleted instruction after Cur, or to be End. |
80 // TODO: Consider separating the notion of "next valid instruction" and "new | 83 // TODO: Consider separating the notion of "next valid instruction" and "new |
81 // instruction insertion point", to avoid confusion when previously-deleted | 84 // instruction insertion point", to avoid confusion when previously-deleted |
82 // instructions come between the two points. | 85 // instructions come between the two points. |
83 InstList::iterator Next; | 86 InstList::iterator Next; |
84 /// Begin is a copy of Insts.begin(), used if iterators are moved backward. | 87 /// Begin is a copy of Insts.begin(), used if iterators are moved backward. |
85 InstList::iterator Begin; | 88 InstList::iterator Begin; |
86 /// End is a copy of Insts.end(), used if Next needs to be advanced. | 89 /// End is a copy of Insts.end(), used if Next needs to be advanced. |
87 InstList::iterator End; | 90 InstList::iterator End; |
| 91 /// LastDest and LastSrc capture the parameters of the last "Dest=Src" simple |
| 92 /// assignment inserted (provided Src is a variable). This is used for simple |
| 93 /// availability analysis. |
| 94 Variable *LastDest = nullptr; |
| 95 Variable *LastSrc = nullptr; |
88 | 96 |
89 void skipDeleted(InstList::iterator &I) const; | 97 void skipDeleted(InstList::iterator &I) const; |
90 void advanceForward(InstList::iterator &I) const; | 98 void advanceForward(InstList::iterator &I) const; |
91 }; | 99 }; |
92 | 100 |
93 /// A helper class to advance the LoweringContext at each loop iteration. | 101 /// A helper class to advance the LoweringContext at each loop iteration. |
94 class PostIncrLoweringContext { | 102 class PostIncrLoweringContext { |
95 PostIncrLoweringContext() = delete; | 103 PostIncrLoweringContext() = delete; |
96 PostIncrLoweringContext(const PostIncrLoweringContext &) = delete; | 104 PostIncrLoweringContext(const PostIncrLoweringContext &) = delete; |
97 PostIncrLoweringContext &operator=(const PostIncrLoweringContext &) = delete; | 105 PostIncrLoweringContext &operator=(const PostIncrLoweringContext &) = delete; |
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
453 virtual void lower() {} | 461 virtual void lower() {} |
454 | 462 |
455 protected: | 463 protected: |
456 explicit TargetHeaderLowering(GlobalContext *Ctx) : Ctx(Ctx) {} | 464 explicit TargetHeaderLowering(GlobalContext *Ctx) : Ctx(Ctx) {} |
457 GlobalContext *Ctx; | 465 GlobalContext *Ctx; |
458 }; | 466 }; |
459 | 467 |
460 } // end of namespace Ice | 468 } // end of namespace Ice |
461 | 469 |
462 #endif // SUBZERO_SRC_ICETARGETLOWERING_H | 470 #endif // SUBZERO_SRC_ICETARGETLOWERING_H |
OLD | NEW |