Ignore:
Timestamp:
Nov 27, 2012, 2:34:45 PM (13 years ago)
Author:
[email protected]
Message:

DFG SetLocal should use forwardSpeculationCheck instead of its own half-baked version of same
https://bugs.webkit.org/show_bug.cgi?id=103353

Reviewed by Oliver Hunt and Gavin Barraclough.

Source/JavaScriptCore:

Made it possible to use forward speculations for most of the operand classes. Changed the conditional
direction parameter from being 'bool isForward' to an enum (SpeculationDirection). Changed SetLocal
to use forward speculations and got rid of its half-baked version of same.

Also added the ability to force the DFG's disassembler to dump all nodes, even ones that are dead.

  • dfg/DFGByteCodeParser.cpp:

(JSC::DFG::ByteCodeParser::parseBlock):

  • dfg/DFGDisassembler.cpp:

(JSC::DFG::Disassembler::dump):

  • dfg/DFGDriver.cpp:

(JSC::DFG::compile):

  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::SpeculativeJIT::speculationCheck):
(DFG):
(JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward):
(JSC::DFG::SpeculativeJIT::speculationWatchpoint):
(JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
(JSC::DFG::SpeculativeJIT::fillStorage):

  • dfg/DFGSpeculativeJIT.h:

(SpeculativeJIT):
(JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand):
(JSC::DFG::SpeculateIntegerOperand::gpr):
(SpeculateIntegerOperand):
(JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
(JSC::DFG::SpeculateDoubleOperand::fpr):
(SpeculateDoubleOperand):
(JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
(JSC::DFG::SpeculateCellOperand::gpr):
(SpeculateCellOperand):
(JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
(JSC::DFG::SpeculateBooleanOperand::gpr):
(SpeculateBooleanOperand):

  • dfg/DFGSpeculativeJIT32_64.cpp:

(JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
(JSC::DFG::SpeculativeJIT::fillSpeculateInt):
(JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
(JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
(JSC::DFG::SpeculativeJIT::fillSpeculateCell):
(JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
(JSC::DFG::SpeculativeJIT::compile):

  • dfg/DFGSpeculativeJIT64.cpp:

(JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
(JSC::DFG::SpeculativeJIT::fillSpeculateInt):
(JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
(JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
(JSC::DFG::SpeculativeJIT::fillSpeculateCell):
(JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
(JSC::DFG::SpeculativeJIT::compile):

  • runtime/Options.h:

(JSC):

LayoutTests:

  • fast/js/dfg-intrinsic-side-effect-assignment-osr-exit-expected.txt: Added.
  • fast/js/dfg-intrinsic-side-effect-assignment-osr-exit.html: Added.
  • fast/js/dfg-side-effect-assignment-osr-exit-expected.txt: Added.
  • fast/js/dfg-side-effect-assignment-osr-exit.html: Added.
  • fast/js/jsc-test-list:
  • fast/js/script-tests/dfg-intrinsic-side-effect-assignment-osr-exit.js: Added.

(foo):

  • fast/js/script-tests/dfg-side-effect-assignment-osr-exit.js: Added.

(foo):
(bar):

File:
1 edited

Legend:

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

    r135469 r135923  
    6060        NodeIndex lastNodeIndexForDisassembly = block->at(0);
    6161        for (size_t i = 0; i < block->size(); ++i) {
    62             if (!m_graph[block->at(i)].willHaveCodeGenOrOSR())
     62            if (!m_graph[block->at(i)].willHaveCodeGenOrOSR() && !Options::showAllDFGNodes())
    6363                continue;
    6464            MacroAssembler::Label currentLabel;
Note: See TracChangeset for help on using the changeset viewer.