Ignore:
Timestamp:
Sep 18, 2013, 12:25:52 AM (12 years ago)
Author:
[email protected]
Message:

Unreviewed, rolling out r156019 and r156020.
http://trac.webkit.org/changeset/156019
http://trac.webkit.org/changeset/156020
https://bugs.webkit.org/show_bug.cgi?id=121540

Broke tests (Requested by ap on #webkit).

Source/JavaScriptCore:

  • assembler/MacroAssemblerX86_64.h:
  • assembler/X86Assembler.h:
  • bytecode/DataFormat.h:

(JSC::dataFormatToString):

  • bytecode/ExitKind.cpp:

(JSC::exitKindToString):

  • bytecode/ExitKind.h:
  • bytecode/OperandsInlines.h:

(JSC::::dumpInContext):

  • bytecode/SpeculatedType.cpp:

(JSC::dumpSpeculation):
(JSC::speculationToAbbreviatedString):
(JSC::speculationFromValue):

  • bytecode/SpeculatedType.h:

(JSC::isInt32SpeculationForArithmetic):
(JSC::isInt48Speculation):
(JSC::isMachineIntSpeculationForArithmetic):
(JSC::isInt48AsDoubleSpeculation):
(JSC::isRealNumberSpeculation):
(JSC::isNumberSpeculation):
(JSC::isNumberSpeculationExpectingDefined):

  • bytecode/ValueRecovery.h:

(JSC::ValueRecovery::inGPR):
(JSC::ValueRecovery::displacedInJSStack):
(JSC::ValueRecovery::isAlreadyInJSStack):
(JSC::ValueRecovery::gpr):
(JSC::ValueRecovery::virtualRegister):
(JSC::ValueRecovery::dumpInContext):

  • dfg/DFGAbstractInterpreter.h:

(JSC::DFG::AbstractInterpreter::needsTypeCheck):
(JSC::DFG::AbstractInterpreter::filterByType):

  • dfg/DFGAbstractInterpreterInlines.h:

(JSC::DFG::::executeEffects):

  • dfg/DFGAbstractValue.cpp:

(JSC::DFG::AbstractValue::set):
(JSC::DFG::AbstractValue::checkConsistency):

  • dfg/DFGAbstractValue.h:

(JSC::DFG::AbstractValue::validateType):

  • dfg/DFGArrayMode.cpp:

(JSC::DFG::ArrayMode::refine):

  • dfg/DFGAssemblyHelpers.h:

(JSC::DFG::AssemblyHelpers::unboxDouble):

  • dfg/DFGByteCodeParser.cpp:

(JSC::DFG::ByteCodeParser::makeSafe):

  • dfg/DFGCSEPhase.cpp:

(JSC::DFG::CSEPhase::canonicalize):
(JSC::DFG::CSEPhase::pureCSE):
(JSC::DFG::CSEPhase::getByValLoadElimination):
(JSC::DFG::CSEPhase::performNodeCSE):

  • dfg/DFGClobberize.h:

(JSC::DFG::clobberize):

  • dfg/DFGCommon.h:
  • dfg/DFGFixupPhase.cpp:

(JSC::DFG::FixupPhase::run):
(JSC::DFG::FixupPhase::fixupNode):
(JSC::DFG::FixupPhase::fixupSetLocalsInBlock):
(JSC::DFG::FixupPhase::observeUseKindOnNode):
(JSC::DFG::FixupPhase::fixEdge):
(JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
(JSC::DFG::FixupPhase::attemptToMakeIntegerAdd):

  • dfg/DFGFlushFormat.cpp:

(WTF::printInternal):

  • dfg/DFGFlushFormat.h:

(JSC::DFG::resultFor):
(JSC::DFG::useKindFor):

  • dfg/DFGGenerationInfo.h:

(JSC::DFG::GenerationInfo::initInt32):
(JSC::DFG::GenerationInfo::fillInt32):

  • dfg/DFGGraph.cpp:

(JSC::DFG::Graph::dump):

  • dfg/DFGGraph.h:

(JSC::DFG::Graph::addShouldSpeculateMachineInt):
(JSC::DFG::Graph::mulShouldSpeculateMachineInt):
(JSC::DFG::Graph::negateShouldSpeculateMachineInt):

  • dfg/DFGInPlaceAbstractState.cpp:

(JSC::DFG::InPlaceAbstractState::mergeStateAtTail):

  • dfg/DFGJITCode.cpp:

(JSC::DFG::JITCode::reconstruct):

  • dfg/DFGMinifiedNode.h:

(JSC::DFG::belongsInMinifiedGraph):
(JSC::DFG::MinifiedNode::hasChild):

  • dfg/DFGNode.h:

(JSC::DFG::Node::shouldSpeculateNumber):
(JSC::DFG::Node::shouldSpeculateNumberExpectingDefined):
(JSC::DFG::Node::canSpeculateInt48):

  • dfg/DFGNodeFlags.h:

(JSC::DFG::nodeCanSpeculateInt48):

  • dfg/DFGNodeType.h:

(JSC::DFG::forwardRewiringSelectionScore):

  • dfg/DFGOSRExitCompiler.cpp:

(JSC::DFG::shortOperandsDump):

  • dfg/DFGOSRExitCompiler64.cpp:

(JSC::DFG::OSRExitCompiler::compileExit):

  • dfg/DFGPredictionPropagationPhase.cpp:

(JSC::DFG::PredictionPropagationPhase::speculatedDoubleTypeForPrediction):
(JSC::DFG::PredictionPropagationPhase::propagate):
(JSC::DFG::PredictionPropagationPhase::doDoubleVoting):

  • dfg/DFGSafeToExecute.h:

(JSC::DFG::SafeToExecuteEdge::operator()):
(JSC::DFG::safeToExecute):

  • dfg/DFGSilentRegisterSavePlan.h:
  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::SpeculativeJIT::silentSavePlanForGPR):
(JSC::DFG::SpeculativeJIT::silentFill):
(JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
(JSC::DFG::SpeculativeJIT::compileInlineStart):
(JSC::DFG::SpeculativeJIT::compileDoublePutByVal):
(JSC::DFG::SpeculativeJIT::compileValueToInt32):
(JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
(JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
(JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
(JSC::DFG::SpeculativeJIT::compileAdd):
(JSC::DFG::SpeculativeJIT::compileArithSub):
(JSC::DFG::SpeculativeJIT::compileArithNegate):
(JSC::DFG::SpeculativeJIT::compileArithMul):
(JSC::DFG::SpeculativeJIT::compare):
(JSC::DFG::SpeculativeJIT::compileStrictEq):
(JSC::DFG::SpeculativeJIT::speculateNumber):
(JSC::DFG::SpeculativeJIT::speculateRealNumber):
(JSC::DFG::SpeculativeJIT::speculate):

  • dfg/DFGSpeculativeJIT.h:

(JSC::DFG::SpeculativeJIT::canReuse):
(JSC::DFG::SpeculativeJIT::isFilled):
(JSC::DFG::SpeculativeJIT::isFilledDouble):
(JSC::DFG::SpeculativeJIT::use):
(JSC::DFG::SpeculativeJIT::boxDouble):
(JSC::DFG::SpeculativeJIT::isKnownInteger):
(JSC::DFG::SpeculativeJIT::isKnownCell):
(JSC::DFG::SpeculativeJIT::isKnownNotNumber):
(JSC::DFG::SpeculativeJIT::int32Result):
(JSC::DFG::SpeculativeJIT::initConstantInfo):
(JSC::DFG::SpeculativeJIT::isInteger):
(JSC::DFG::SpeculativeJIT::generationInfoFromVirtualRegister):

  • dfg/DFGSpeculativeJIT32_64.cpp:

(JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
(JSC::DFG::SpeculativeJIT::compile):

  • dfg/DFGSpeculativeJIT64.cpp:

(JSC::DFG::SpeculativeJIT::fillJSValue):
(JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal):
(JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
(JSC::DFG::SpeculativeJIT::fillSpeculateCell):
(JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
(JSC::DFG::SpeculativeJIT::compile):

  • dfg/DFGUseKind.cpp:

(WTF::printInternal):

  • dfg/DFGUseKind.h:

(JSC::DFG::typeFilterFor):
(JSC::DFG::isNumerical):

  • dfg/DFGValueSource.cpp:

(JSC::DFG::ValueSource::dump):

  • dfg/DFGValueSource.h:

(JSC::DFG::dataFormatToValueSourceKind):
(JSC::DFG::valueSourceKindToDataFormat):
(JSC::DFG::ValueSource::forFlushFormat):
(JSC::DFG::ValueSource::valueRecovery):

  • dfg/DFGVariableAccessData.h:

(JSC::DFG::VariableAccessData::shouldUseDoubleFormatAccordingToVote):
(JSC::DFG::VariableAccessData::flushFormat):

  • ftl/FTLCArgumentGetter.cpp:

(JSC::FTL::CArgumentGetter::loadNextAndBox):

  • ftl/FTLCArgumentGetter.h:
  • ftl/FTLCapabilities.cpp:

(JSC::FTL::canCompile):

  • ftl/FTLExitValue.cpp:

(JSC::FTL::ExitValue::dumpInContext):

  • ftl/FTLExitValue.h:
  • ftl/FTLIntrinsicRepository.h:
  • ftl/FTLLowerDFGToLLVM.cpp:

(JSC::FTL::LowerDFGToLLVM::createPhiVariables):
(JSC::FTL::LowerDFGToLLVM::compileNode):
(JSC::FTL::LowerDFGToLLVM::compileUpsilon):
(JSC::FTL::LowerDFGToLLVM::compilePhi):
(JSC::FTL::LowerDFGToLLVM::compileSetLocal):
(JSC::FTL::LowerDFGToLLVM::compileAdd):
(JSC::FTL::LowerDFGToLLVM::compileArithSub):
(JSC::FTL::LowerDFGToLLVM::compileArithMul):
(JSC::FTL::LowerDFGToLLVM::compileArithNegate):
(JSC::FTL::LowerDFGToLLVM::compilePutByVal):
(JSC::FTL::LowerDFGToLLVM::compileCompareEq):
(JSC::FTL::LowerDFGToLLVM::compileCompareStrictEq):
(JSC::FTL::LowerDFGToLLVM::compileCompareLess):
(JSC::FTL::LowerDFGToLLVM::compileCompareLessEq):
(JSC::FTL::LowerDFGToLLVM::compileCompareGreater):
(JSC::FTL::LowerDFGToLLVM::compileCompareGreaterEq):
(JSC::FTL::LowerDFGToLLVM::lowInt32):
(JSC::FTL::LowerDFGToLLVM::lowCell):
(JSC::FTL::LowerDFGToLLVM::lowBoolean):
(JSC::FTL::LowerDFGToLLVM::lowDouble):
(JSC::FTL::LowerDFGToLLVM::lowJSValue):
(JSC::FTL::LowerDFGToLLVM::speculateRealNumber):
(JSC::FTL::LowerDFGToLLVM::initializeOSRExitStateForBlock):
(JSC::FTL::LowerDFGToLLVM::emitOSRExitCall):
(JSC::FTL::LowerDFGToLLVM::addExitArgumentForNode):
(JSC::FTL::LowerDFGToLLVM::setInt32):

  • ftl/FTLOSRExitCompiler.cpp:

(JSC::FTL::compileStub):

  • ftl/FTLOutput.h:

(JSC::FTL::Output::mulWithOverflow32):

  • ftl/FTLValueFormat.cpp:

(WTF::printInternal):

  • ftl/FTLValueFormat.h:
  • ftl/FTLValueSource.cpp:

(JSC::FTL::ValueSource::dump):

  • ftl/FTLValueSource.h:
  • interpreter/Register.h:
  • runtime/Arguments.cpp:

(JSC::Arguments::tearOffForInlineCallFrame):

  • runtime/IndexingType.cpp:

(JSC::leastUpperBoundOfIndexingTypeAndType):

  • runtime/JSCJSValue.h:
  • runtime/JSCJSValueInlines.h:

Source/WTF:

  • wtf/PrintStream.h:

Tools:

  • Scripts/run-jsc-stress-tests:

LayoutTests:

  • js/regress/large-int-captured-expected.txt: Removed.
  • js/regress/large-int-captured.html: Removed.
  • js/regress/large-int-expected.txt: Removed.
  • js/regress/large-int-neg-expected.txt: Removed.
  • js/regress/large-int-neg.html: Removed.
  • js/regress/large-int.html: Removed.
  • js/regress/marsaglia-larger-ints-expected.txt: Removed.
  • js/regress/marsaglia-larger-ints.html: Removed.
  • js/regress/script-tests/large-int-captured.js: Removed.
  • js/regress/script-tests/large-int-neg.js: Removed.
  • js/regress/script-tests/large-int.js: Removed.
  • js/regress/script-tests/marsaglia-larger-ints.js: Removed.
File:
1 edited

Legend:

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

    r156019 r156029  
    117117    SpeculatedType speculatedDoubleTypeForPrediction(SpeculatedType value)
    118118    {
    119         if (!isFullNumberSpeculation(value))
     119        if (!isNumberSpeculation(value))
    120120            return SpecDouble;
    121121        if (value & SpecDoubleNaN)
     
    143143        case WeakJSConstant: {
    144144            SpeculatedType type = speculationFromValue(m_graph.valueOfJSConstant(node));
    145             if (type == SpecInt52AsDouble)
    146                 type = SpecInt52;
     145            if (type == SpecInt48AsDouble)
     146                type = SpecInt48;
    147147            changed |= setPrediction(type);
    148148            break;
     
    150150           
    151151        case GetLocal: {
    152             VariableAccessData* variable = node->variableAccessData();
    153             SpeculatedType prediction = variable->prediction();
    154             if (variable->shouldNeverUnbox() && (prediction & SpecInt52))
    155                 prediction = (prediction | SpecInt52AsDouble) & ~SpecInt52;
     152            VariableAccessData* variableAccessData = node->variableAccessData();
     153            SpeculatedType prediction = variableAccessData->prediction();
    156154            if (prediction)
    157155                changed |= mergePrediction(prediction);
     
    206204                changed |= mergePrediction(SpecInt32);
    207205            else
    208                 changed |= mergePrediction(SpecBytecodeNumber);
     206                changed |= mergePrediction(SpecNumber);
    209207            break;
    210208        }
     
    215213           
    216214            if (left && right) {
    217                 if (isFullNumberSpeculationExpectingDefined(left) && isFullNumberSpeculationExpectingDefined(right)) {
     215                if (isNumberSpeculationExpectingDefined(left) && isNumberSpeculationExpectingDefined(right)) {
    218216                    if (m_graph.addSpeculationMode(node) != DontSpeculateInt32)
    219217                        changed |= mergePrediction(SpecInt32);
    220218                    else if (m_graph.addShouldSpeculateMachineInt(node))
    221                         changed |= mergePrediction(SpecInt52);
     219                        changed |= mergePrediction(SpecInt48);
    222220                    else
    223221                        changed |= mergePrediction(speculatedDoubleTypeForPredictions(left, right));
    224                 } else if (!(left & SpecFullNumber) || !(right & SpecFullNumber)) {
     222                } else if (!(left & SpecNumber) || !(right & SpecNumber)) {
    225223                    // left or right is definitely something other than a number.
    226224                    changed |= mergePrediction(SpecString);
     
    239237                    changed |= mergePrediction(SpecInt32);
    240238                else if (m_graph.addShouldSpeculateMachineInt(node))
    241                     changed |= mergePrediction(SpecInt52);
     239                    changed |= mergePrediction(SpecInt48);
    242240                else
    243241                    changed |= mergePrediction(speculatedDoubleTypeForPredictions(left, right));
     
    254252                    changed |= mergePrediction(SpecInt32);
    255253                else if (m_graph.addShouldSpeculateMachineInt(node))
    256                     changed |= mergePrediction(SpecInt52);
     254                    changed |= mergePrediction(SpecInt48);
    257255                else
    258256                    changed |= mergePrediction(speculatedDoubleTypeForPredictions(left, right));
     
    266264                    changed |= mergePrediction(SpecInt32);
    267265                else if (m_graph.negateShouldSpeculateMachineInt(node))
    268                     changed |= mergePrediction(SpecInt52);
     266                    changed |= mergePrediction(SpecInt48);
    269267                else
    270268                    changed |= mergePrediction(speculatedDoubleTypeForPrediction(node->child1()->prediction()));
     
    295293                    changed |= mergePrediction(SpecInt32);
    296294                else if (m_graph.mulShouldSpeculateMachineInt(node))
    297                     changed |= mergePrediction(SpecInt52);
     295                    changed |= mergePrediction(SpecInt48);
    298296                else
    299297                    changed |= mergePrediction(speculatedDoubleTypeForPredictions(left, right));
     
    371369
    372370        case GetByVal: {
    373             if (!node->child1()->prediction())
    374                 break;
    375             if (!node->getHeapPrediction())
    376                 break;
    377            
    378371            if (node->child1()->shouldSpeculateFloat32Array()
    379372                || node->child1()->shouldSpeculateFloat64Array())
    380373                changed |= mergePrediction(SpecDouble);
    381             else if (node->child1()->shouldSpeculateUint32Array()) {
    382                 if (isInt32Speculation(node->getHeapPrediction()))
    383                     changed |= mergePrediction(SpecInt32);
    384                 else
    385                     changed |= mergePrediction(SpecInt52);
    386             } else
     374            else
    387375                changed |= mergePrediction(node->getHeapPrediction());
    388376            break;
     
    579567        case Unreachable:
    580568        case LoopHint:
    581         case Int52ToValue:
    582         case Int52ToDouble:
    583569            break;
    584570           
     
    655641            DoubleBallot ballot;
    656642               
    657             if (isFullNumberSpeculationExpectingDefined(left) && isFullNumberSpeculationExpectingDefined(right)
    658                 && !m_graph.addShouldSpeculateInt32(node)
    659                 && !m_graph.addShouldSpeculateMachineInt(node))
     643            if (isNumberSpeculationExpectingDefined(left) && isNumberSpeculationExpectingDefined(right)
     644                && !m_graph.addShouldSpeculateInt32(node))
    660645                ballot = VoteDouble;
    661646            else
     
    673658            DoubleBallot ballot;
    674659               
    675             if (isFullNumberSpeculation(left) && isFullNumberSpeculation(right)
    676                 && !m_graph.mulShouldSpeculateInt32(node)
    677                 && !m_graph.mulShouldSpeculateMachineInt(node))
     660            if (isNumberSpeculation(left) && isNumberSpeculation(right)
     661                && !m_graph.mulShouldSpeculateInt32(node))
    678662                ballot = VoteDouble;
    679663            else
     
    694678            DoubleBallot ballot;
    695679               
    696             if (isFullNumberSpeculation(left) && isFullNumberSpeculation(right)
     680            if (isNumberSpeculation(left) && isNumberSpeculation(right)
    697681                && !(Node::shouldSpeculateInt32ForArithmetic(node->child1().node(), node->child2().node()) && node->canSpeculateInt32()))
    698682                ballot = VoteDouble;
     
    723707            if (isDoubleSpeculation(prediction))
    724708                node->variableAccessData()->vote(VoteDouble);
    725             else if (
    726                 !isFullNumberSpeculation(prediction)
    727                 || isInt32Speculation(prediction) || isMachineIntSpeculation(prediction))
     709            else if (!isNumberSpeculation(prediction) || isInt32Speculation(prediction))
    728710                node->variableAccessData()->vote(VoteValue);
    729711            break;
Note: See TracChangeset for help on using the changeset viewer.