Ignore:
Timestamp:
Mar 4, 2014, 11:25:02 PM (11 years ago)
Author:
[email protected]
Message:

Unreviewed, rolling out r165085.
http://trac.webkit.org/changeset/165085
https://bugs.webkit.org/show_bug.cgi?id=129729

Broke imported/w3c/html-templates/template-element/template-
content.html (Requested by ap on #webkit).

Source/JavaScriptCore:

  • bytecode/SpeculatedType.cpp:

(JSC::speculationToAbbreviatedString):

  • bytecode/SpeculatedType.h:
  • dfg/DFGAbstractInterpreterInlines.h:

(JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

  • dfg/DFGArrayMode.cpp:

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

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

(JSC::DFG::FixupPhase::fixupNode):
(JSC::DFG::FixupPhase::attemptToMakeGetArrayLength):

  • dfg/DFGNode.h:

(JSC::DFG::Node::shouldSpeculateBoolean):

  • dfg/DFGSafeToExecute.h:

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

  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::SpeculativeJIT::compileStrictEq):
(JSC::DFG::SpeculativeJIT::speculate):

  • dfg/DFGSpeculativeJIT.h:
  • dfg/DFGSpeculativeJIT32_64.cpp:
  • dfg/DFGSpeculativeJIT64.cpp:
  • dfg/DFGUseKind.cpp:

(WTF::printInternal):

  • dfg/DFGUseKind.h:

(JSC::DFG::typeFilterFor):

  • ftl/FTLCapabilities.cpp:

(JSC::FTL::canCompile):

  • ftl/FTLLowerDFGToLLVM.cpp:

(JSC::FTL::LowerDFGToLLVM::compileNode):
(JSC::FTL::LowerDFGToLLVM::compileCompareEq):
(JSC::FTL::LowerDFGToLLVM::compileCompareStrictEq):
(JSC::FTL::LowerDFGToLLVM::speculate):

  • tests/stress/float32-array-out-of-bounds.js: Removed.
  • tests/stress/weird-equality-folding-cases.js: Removed.

LayoutTests:

  • js/regress/fold-strict-eq-expected.txt: Removed.
  • js/regress/fold-strict-eq.html: Removed.
  • js/regress/misc-strict-eq-expected.txt: Removed.
  • js/regress/misc-strict-eq.html: Removed.
  • js/regress/script-tests/fold-strict-eq.js: Removed.
  • js/regress/script-tests/misc-strict-eq.js: Removed.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h

    r165085 r165098  
    918918            SpeculatedType leftType = forNode(node->child1()).m_type;
    919919            SpeculatedType rightType = forNode(node->child2()).m_type;
    920             if (!valuesCouldBeEqual(leftType, rightType)) {
     920            if ((isInt32Speculation(leftType) && isOtherSpeculation(rightType))
     921                || (isOtherSpeculation(leftType) && isInt32Speculation(rightType))) {
    921922                setConstant(node, jsBoolean(false));
    922923                break;
     
    943944        JSValue right = forNode(rightNode).value();
    944945        if (left && right) {
     946            if (left.isNumber() && right.isNumber()) {
     947                setConstant(node, jsBoolean(left.asNumber() == right.asNumber()));
     948                break;
     949            }
    945950            if (left.isString() && right.isString()) {
    946                 // We need this case because JSValue::strictEqual is otherwise too racy for
    947                 // string comparisons.
    948951                const StringImpl* a = asString(left)->tryGetValueImpl();
    949952                const StringImpl* b = asString(right)->tryGetValueImpl();
     
    952955                    break;
    953956                }
    954             } else {
    955                 setConstant(node, jsBoolean(JSValue::strictEqual(0, left, right)));
    956                 break;
    957             }
    958         }
    959        
    960         SpeculatedType leftLUB = leastUpperBoundOfStrictlyEquivalentSpeculations(forNode(leftNode).m_type);
    961         SpeculatedType rightLUB = leastUpperBoundOfStrictlyEquivalentSpeculations(forNode(rightNode).m_type);
    962         if (!(leftLUB & rightLUB)) {
    963             setConstant(node, jsBoolean(false));
    964             break;
    965         }
    966        
     957            }
     958        }
    967959        forNode(node).setType(SpecBoolean);
    968960        node->setCanExit(true); // This is overly conservative.
Note: See TracChangeset for help on using the changeset viewer.