Changeset 189070 in webkit for trunk/Source/JavaScriptCore/dfg/DFGLICMPhase.cpp
- Timestamp:
- Aug 27, 2015, 4:41:59 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/dfg/DFGLICMPhase.cpp
r188771 r189070 131 131 DFG_ASSERT(m_graph, preHeader->terminal(), preHeader->terminal()->op() == Jump); 132 132 133 // We should validate the pre-header. If we placed forExit origins on nodes only if 134 // at the top of that node it is legal to exit, then we would simply check if Jump 135 // had a forExit. We should disable hoisting to pre-headers that don't validate. 136 // Or, we could only allow hoisting of things that definitely don't exit. 137 // FIXME: https://bugs.webkit.org/show_bug.cgi?id=145204 133 // We should validate the pre-header. This currently assumes that it's valid to OSR exit at 134 // the Jump of the pre-header. That may not always be the case, like if we lowered a Node 135 // that was ExitInvalid to a loop. This phase should somehow defend against this - at the 136 // very least with assertions, if not with something better (like only hoisting things that 137 // cannot exit). 138 // FIXME: https://bugs.webkit.org/show_bug.cgi?id=148259 138 139 139 140 data.preHeader = preHeader; … … 284 285 "\n"); 285 286 } 286 287 288 // FIXME: We should adjust the Check: flags on the edges of node. There are phases that assume 289 // that those flags are correct even if AI is stale. 290 // https://bugs.webkit.org/show_bug.cgi?id=148544 287 291 data.preHeader->insertBeforeTerminal(node); 288 292 node->owner = data.preHeader; … … 291 295 292 296 // Modify the states at the end of the preHeader of the loop we hoisted to, 293 // and all pre-headers inside the loop. 294 // FIXME: This could become a scalability bottleneck. Fortunately, most loops 295 // are small and anyway we rapidly skip over basic blocks here. 297 // and all pre-headers inside the loop. This isn't a stability bottleneck right now 298 // because most loops are small and most blocks belong to few loops. 296 299 for (unsigned bodyIndex = loop->size(); bodyIndex--;) { 297 300 BasicBlock* subBlock = loop->at(bodyIndex);
Note:
See TracChangeset
for help on using the changeset viewer.