Changeset 153277 in webkit for trunk/Source/JavaScriptCore/dfg/DFGNaturalLoops.h
- Timestamp:
- Jul 24, 2013, 9:04:51 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/dfg/DFGNaturalLoops.h
r153267 r153277 37 37 namespace JSC { namespace DFG { 38 38 39 class NaturalLoops; 40 39 41 class NaturalLoop { 40 42 public: 41 43 NaturalLoop() 42 44 : m_header(0) 45 , m_outerLoopIndex(UINT_MAX) 43 46 { 44 47 } 45 48 46 NaturalLoop(BasicBlock* header )49 NaturalLoop(BasicBlock* header, unsigned index) 47 50 : m_header(header) 51 , m_outerLoopIndex(UINT_MAX) 52 , m_index(index) 48 53 { 49 54 } 50 51 void addBlock(BasicBlock* block) { m_body.append(block); }52 55 53 56 BasicBlock* header() const { return m_header; } … … 66 69 return false; 67 70 } 71 72 // The index of this loop in NaturalLoops. 73 unsigned index() const { return m_index; } 74 75 bool isOuterMostLoop() const { return m_outerLoopIndex == UINT_MAX; } 68 76 69 77 void dump(PrintStream&) const; 70 78 private: 79 friend class NaturalLoops; 80 81 void addBlock(BasicBlock* block) { m_body.append(block); } 82 71 83 BasicBlock* m_header; 72 84 Vector<BasicBlock*, 4> m_body; 85 unsigned m_outerLoopIndex; 86 unsigned m_index; 73 87 }; 74 88 … … 95 109 const NaturalLoop* headerOf(BasicBlock* block) const 96 110 { 97 for (unsigned i = m_loops.size(); i--;) { 98 if (m_loops[i].header() == block) 99 return &m_loops[i]; 111 const NaturalLoop* loop = innerMostLoopOf(block); 112 if (loop->header() == block) 113 return loop; 114 if (!ASSERT_DISABLED) { 115 for (; loop; loop = innerMostOuterLoop(*loop)) 116 ASSERT(loop->header() != block); 100 117 } 101 118 return 0; 119 } 120 121 const NaturalLoop* innerMostLoopOf(BasicBlock* block) const 122 { 123 unsigned index = block->innerMostLoopIndices[0]; 124 if (index == UINT_MAX) 125 return 0; 126 return &m_loops[index]; 127 } 128 129 const NaturalLoop* innerMostOuterLoop(const NaturalLoop& loop) const 130 { 131 if (loop.m_outerLoopIndex == UINT_MAX) 132 return 0; 133 return &m_loops[loop.m_outerLoopIndex]; 102 134 } 103 135
Note:
See TracChangeset
for help on using the changeset viewer.