Ignore:
Timestamp:
Aug 27, 2015, 4:41:59 PM (10 years ago)
Author:
[email protected]
Message:

Unreviewed, fix some FIXMEs and add some new ones, based on things we've learned from some
recent OSR exit work.

  • dfg/DFGLICMPhase.cpp:

(JSC::DFG::LICMPhase::run):
(JSC::DFG::LICMPhase::attemptHoist):

  • dfg/DFGMayExit.cpp:
  • dfg/DFGMayExit.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/dfg/DFGLICMPhase.cpp

    r188771 r189070  
    131131            DFG_ASSERT(m_graph, preHeader->terminal(), preHeader->terminal()->op() == Jump);
    132132           
    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
    138139           
    139140            data.preHeader = preHeader;
     
    284285                "\n");
    285286        }
    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
    287291        data.preHeader->insertBeforeTerminal(node);
    288292        node->owner = data.preHeader;
     
    291295       
    292296        // 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.
    296299        for (unsigned bodyIndex = loop->size(); bodyIndex--;) {
    297300            BasicBlock* subBlock = loop->at(bodyIndex);
Note: See TracChangeset for help on using the changeset viewer.