Title: [165098] trunk
Revision
165098
Author
[email protected]
Date
2014-03-04 23:25:02 -0800 (Tue, 04 Mar 2014)

Log 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/_javascript_Core:

* 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.

Modified Paths

Removed Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (165097 => 165098)


--- trunk/LayoutTests/ChangeLog	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/LayoutTests/ChangeLog	2014-03-05 07:25:02 UTC (rev 165098)
@@ -1,3 +1,19 @@
+2014-03-04  Commit Queue  <[email protected]>
+
+        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).
+
+        * 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.
+
 2014-03-04  Zalan Bujtas  <[email protected]>
 
         Enable device pixel repaint rect tracking.

Deleted: trunk/LayoutTests/js/regress/fold-strict-eq-expected.txt (165097 => 165098)


--- trunk/LayoutTests/js/regress/fold-strict-eq-expected.txt	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/LayoutTests/js/regress/fold-strict-eq-expected.txt	2014-03-05 07:25:02 UTC (rev 165098)
@@ -1,10 +0,0 @@
-JSRegress/fold-strict-eq
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-PASS no exception thrown
-PASS successfullyParsed is true
-
-TEST COMPLETE
-

Deleted: trunk/LayoutTests/js/regress/fold-strict-eq.html (165097 => 165098)


--- trunk/LayoutTests/js/regress/fold-strict-eq.html	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/LayoutTests/js/regress/fold-strict-eq.html	2014-03-05 07:25:02 UTC (rev 165098)
@@ -1,12 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src=""
-</head>
-<body>
-<script src=""
-<script src=""
-<script src=""
-<script src=""
-</body>
-</html>

Deleted: trunk/LayoutTests/js/regress/misc-strict-eq-expected.txt (165097 => 165098)


--- trunk/LayoutTests/js/regress/misc-strict-eq-expected.txt	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/LayoutTests/js/regress/misc-strict-eq-expected.txt	2014-03-05 07:25:02 UTC (rev 165098)
@@ -1,10 +0,0 @@
-JSRegress/misc-strict-eq
-
-On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
-
-
-PASS no exception thrown
-PASS successfullyParsed is true
-
-TEST COMPLETE
-

Deleted: trunk/LayoutTests/js/regress/misc-strict-eq.html (165097 => 165098)


--- trunk/LayoutTests/js/regress/misc-strict-eq.html	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/LayoutTests/js/regress/misc-strict-eq.html	2014-03-05 07:25:02 UTC (rev 165098)
@@ -1,12 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html>
-<head>
-<script src=""
-</head>
-<body>
-<script src=""
-<script src=""
-<script src=""
-<script src=""
-</body>
-</html>

Deleted: trunk/LayoutTests/js/regress/script-tests/fold-strict-eq.js (165097 => 165098)


--- trunk/LayoutTests/js/regress/script-tests/fold-strict-eq.js	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/LayoutTests/js/regress/script-tests/fold-strict-eq.js	2014-03-05 07:25:02 UTC (rev 165098)
@@ -1,16 +0,0 @@
-function foo(a, b) {
-    return a === b;
-}
-
-function test(actual, expected) {
-    if (actual !== expected)
-        throw new Error("bad result: " + actual);
-}
-
-for (var i = 0; i < 10000000; ++i) {
-    test(foo(true, null), false);
-    test(foo(true, false), false);
-    test(foo(true, true), true);
-    test(foo(5, "hello"), false);
-    test(foo(void 0, new Object()), false);
-}

Deleted: trunk/LayoutTests/js/regress/script-tests/misc-strict-eq.js (165097 => 165098)


--- trunk/LayoutTests/js/regress/script-tests/misc-strict-eq.js	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/LayoutTests/js/regress/script-tests/misc-strict-eq.js	2014-03-05 07:25:02 UTC (rev 165098)
@@ -1,13 +0,0 @@
-(function() {
-    var array = [true, false, null, void 0];
-    for (var i = 0; i < 1000000; ++i) {
-        for (var j = 0; j < array.length; ++j) {
-            for (var k = j ; k < array.length; ++k) {
-                var actual = array[j] === array[k];
-                var expected = j == k;
-                if (actual != expected)
-                    throw "Error: bad result for j = " + j + ", k = " + k;
-            }
-        }
-    }
-})();

Modified: trunk/Source/_javascript_Core/ChangeLog (165097 => 165098)


--- trunk/Source/_javascript_Core/ChangeLog	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/Source/_javascript_Core/ChangeLog	2014-03-05 07:25:02 UTC (rev 165098)
@@ -1,3 +1,47 @@
+2014-03-04  Commit Queue  <[email protected]>
+
+        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).
+
+        * 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.
+
 2014-03-04  Brian Burg  <[email protected]>
 
         Inspector does not restore breakpoints after a page reload

Modified: trunk/Source/_javascript_Core/bytecode/SpeculatedType.cpp (165097 => 165098)


--- trunk/Source/_javascript_Core/bytecode/SpeculatedType.cpp	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/Source/_javascript_Core/bytecode/SpeculatedType.cpp	2014-03-05 07:25:02 UTC (rev 165098)
@@ -255,8 +255,6 @@
         return "<Boolean>";
     if (isOtherSpeculation(prediction))
         return "<Other>";
-    if (isMiscSpeculation(prediction))
-        return "<Misc>";
     return "";
 }
 
@@ -393,40 +391,5 @@
     return NotTypedArray;
 }
 
-SpeculatedType leastUpperBoundOfStrictlyEquivalentSpeculations(SpeculatedType type)
-{
-    if (type & SpecInteger)
-        type |= SpecInteger;
-    if (type & SpecString)
-        type |= SpecString;
-    return type;
-}
-
-bool valuesCouldBeEqual(SpeculatedType a, SpeculatedType b)
-{
-    a = leastUpperBoundOfStrictlyEquivalentSpeculations(a);
-    b = leastUpperBoundOfStrictlyEquivalentSpeculations(b);
-    
-    // Anything could be equal to a string.
-    if (a & SpecString)
-        return true;
-    if (b & SpecString)
-        return true;
-    
-    // If both sides are definitely only objects, then equality is fairly sane.
-    if (isObjectSpeculation(a) && isObjectSpeculation(b))
-        return !!(a & b);
-    
-    // If either side could be an object or not, then we could call toString or
-    // valueOf, which could return anything.
-    if (a & SpecObject)
-        return true;
-    if (b & SpecObject)
-        return true;
-    
-    // Neither side is an object or string, so the world is relatively sane.
-    return !!(a & b);
-}
-
 } // namespace JSC
 

Modified: trunk/Source/_javascript_Core/bytecode/SpeculatedType.h (165097 => 165098)


--- trunk/Source/_javascript_Core/bytecode/SpeculatedType.h	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/Source/_javascript_Core/bytecode/SpeculatedType.h	2014-03-05 07:25:02 UTC (rev 165098)
@@ -75,8 +75,7 @@
 static const SpeculatedType SpecBytecodeNumber     = 0x0e800000; // It's either an Int32 or a Double.
 static const SpeculatedType SpecFullNumber         = 0x0f800000; // It's either an Int32, Int52, or a Double.
 static const SpeculatedType SpecBoolean            = 0x10000000; // It's definitely a Boolean.
-static const SpeculatedType SpecOther              = 0x20000000; // It's definitely either Null or Undefined.
-static const SpeculatedType SpecMisc               = 0x30000000; // It's definitely either a boolean, Null, or Undefined.
+static const SpeculatedType SpecOther              = 0x20000000; // It's definitely none of the above.
 static const SpeculatedType SpecHeapTop            = 0x3effffff; // It can be any of the above, except for SpecInt52.
 static const SpeculatedType SpecEmpty              = 0x40000000; // It's definitely an empty value marker.
 static const SpeculatedType SpecBytecodeTop        = 0x7effffff; // It can be any of the above, except for SpecInt52.
@@ -336,11 +335,6 @@
     return value == SpecOther;
 }
 
-inline bool isMiscSpeculation(SpeculatedType value)
-{
-    return !!value && !(value & ~SpecMisc);
-}
-
 inline bool isOtherOrEmptySpeculation(SpeculatedType value)
 {
     return !value || value == SpecOther;
@@ -388,10 +382,6 @@
 SpeculatedType speculationFromTypedArrayType(TypedArrayType); // only valid for typed views.
 TypedArrayType typedArrayTypeFromSpeculation(SpeculatedType);
 
-SpeculatedType leastUpperBoundOfStrictlyEquivalentSpeculations(SpeculatedType);
-
-bool valuesCouldBeEqual(SpeculatedType, SpeculatedType);
-
 } // namespace JSC
 
 #endif // SpeculatedType_h

Modified: trunk/Source/_javascript_Core/dfg/DFGAbstractInterpreterInlines.h (165097 => 165098)


--- trunk/Source/_javascript_Core/dfg/DFGAbstractInterpreterInlines.h	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/Source/_javascript_Core/dfg/DFGAbstractInterpreterInlines.h	2014-03-05 07:25:02 UTC (rev 165098)
@@ -917,7 +917,8 @@
         if (node->op() == CompareEqConstant || node->op() == CompareEq) {
             SpeculatedType leftType = forNode(node->child1()).m_type;
             SpeculatedType rightType = forNode(node->child2()).m_type;
-            if (!valuesCouldBeEqual(leftType, rightType)) {
+            if ((isInt32Speculation(leftType) && isOtherSpeculation(rightType))
+                || (isOtherSpeculation(leftType) && isInt32Speculation(rightType))) {
                 setConstant(node, jsBoolean(false));
                 break;
             }
@@ -942,28 +943,19 @@
         JSValue left = forNode(leftNode).value();
         JSValue right = forNode(rightNode).value();
         if (left && right) {
+            if (left.isNumber() && right.isNumber()) {
+                setConstant(node, jsBoolean(left.asNumber() == right.asNumber()));
+                break;
+            }
             if (left.isString() && right.isString()) {
-                // We need this case because JSValue::strictEqual is otherwise too racy for
-                // string comparisons.
                 const StringImpl* a = asString(left)->tryGetValueImpl();
                 const StringImpl* b = asString(right)->tryGetValueImpl();
                 if (a && b) {
                     setConstant(node, jsBoolean(WTF::equal(a, b)));
                     break;
                 }
-            } else {
-                setConstant(node, jsBoolean(JSValue::strictEqual(0, left, right)));
-                break;
             }
         }
-        
-        SpeculatedType leftLUB = leastUpperBoundOfStrictlyEquivalentSpeculations(forNode(leftNode).m_type);
-        SpeculatedType rightLUB = leastUpperBoundOfStrictlyEquivalentSpeculations(forNode(rightNode).m_type);
-        if (!(leftLUB & rightLUB)) {
-            setConstant(node, jsBoolean(false));
-            break;
-        }
-        
         forNode(node).setType(SpecBoolean);
         node->setCanExit(true); // This is overly conservative.
         break;

Modified: trunk/Source/_javascript_Core/dfg/DFGArrayMode.cpp (165097 => 165098)


--- trunk/Source/_javascript_Core/dfg/DFGArrayMode.cpp	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/Source/_javascript_Core/dfg/DFGArrayMode.cpp	2014-03-05 07:25:02 UTC (rev 165098)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2012, 2013, 2014 Apple Inc. All rights reserved.
+ * Copyright (C) 2012, 2013 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -132,7 +132,7 @@
 }
 
 ArrayMode ArrayMode::refine(
-    Graph& graph, Node* node,
+    Graph& graph, CodeOrigin codeOrigin,
     SpeculatedType base, SpeculatedType index, SpeculatedType value,
     NodeFlags flags) const
 {
@@ -199,18 +199,10 @@
             return withType(Array::Arguments);
         
         ArrayMode result;
-        switch (node->op()) {
-        case PutByVal:
-            if (graph.hasExitSite(node->origin.semantic, OutOfBounds) || !isInBounds())
-                result = withSpeculation(Array::OutOfBounds);
-            else
-                result = withSpeculation(Array::InBounds);
-            break;
-            
-        default:
+        if (graph.hasExitSite(codeOrigin, OutOfBounds) || !isInBounds())
+            result = withSpeculation(Array::OutOfBounds);
+        else
             result = withSpeculation(Array::InBounds);
-            break;
-        }
         
         if (isInt8ArraySpeculation(base))
             return result.withType(Array::Int8Array);

Modified: trunk/Source/_javascript_Core/dfg/DFGArrayMode.h (165097 => 165098)


--- trunk/Source/_javascript_Core/dfg/DFGArrayMode.h	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/Source/_javascript_Core/dfg/DFGArrayMode.h	2014-03-05 07:25:02 UTC (rev 165098)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2012, 2013, 2014 Apple Inc. All rights reserved.
+ * Copyright (C) 2012, 2013 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -220,7 +220,7 @@
         return ArrayMode(type, arrayClass(), speculation(), conversion);
     }
     
-    ArrayMode refine(Graph&, Node*, SpeculatedType base, SpeculatedType index, SpeculatedType value = SpecNone, NodeFlags = 0) const;
+    ArrayMode refine(Graph&, CodeOrigin, SpeculatedType base, SpeculatedType index, SpeculatedType value = SpecNone, NodeFlags = 0) const;
     
     bool alreadyChecked(Graph&, Node*, AbstractValue&) const;
     

Modified: trunk/Source/_javascript_Core/dfg/DFGFixupPhase.cpp (165097 => 165098)


--- trunk/Source/_javascript_Core/dfg/DFGFixupPhase.cpp	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/Source/_javascript_Core/dfg/DFGFixupPhase.cpp	2014-03-05 07:25:02 UTC (rev 165098)
@@ -432,11 +432,6 @@
                 fixEdge<ObjectUse>(node->child2());
                 break;
             }
-            if (node->child1()->shouldSpeculateMisc() && node->child2()->shouldSpeculateMisc()) {
-                fixEdge<MiscUse>(node->child1());
-                fixEdge<MiscUse>(node->child2());
-                break;
-            }
             break;
         }
 
@@ -457,7 +452,7 @@
         case GetByVal: {
             node->setArrayMode(
                 node->arrayMode().refine(
-                    m_graph, node,
+                    m_graph, node->origin.semantic,
                     node->child1()->prediction(),
                     node->child2()->prediction(),
                     SpecNone, node->flags()));
@@ -515,7 +510,7 @@
 
             node->setArrayMode(
                 node->arrayMode().refine(
-                    m_graph, node,
+                    m_graph, node->origin.semantic,
                     child1->prediction(),
                     child2->prediction(),
                     child3->prediction()));
@@ -601,7 +596,7 @@
             // that would break things.
             node->setArrayMode(
                 node->arrayMode().refine(
-                    m_graph, node,
+                    m_graph, node->origin.semantic,
                     node->child1()->prediction() & SpecCell,
                     SpecInt32,
                     node->child2()->prediction()));
@@ -1755,7 +1750,7 @@
         }
             
         arrayMode = arrayMode.refine(
-            m_graph, node, node->child1()->prediction(), node->prediction());
+            m_graph, node->origin.semantic, node->child1()->prediction(), node->prediction());
             
         if (arrayMode.type() == Array::Generic) {
             // Check if the input is something that we can't get array length for, but for which we

Modified: trunk/Source/_javascript_Core/dfg/DFGNode.h (165097 => 165098)


--- trunk/Source/_javascript_Core/dfg/DFGNode.h	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/Source/_javascript_Core/dfg/DFGNode.h	2014-03-05 07:25:02 UTC (rev 165098)
@@ -1399,11 +1399,6 @@
     {
         return isBooleanSpeculation(prediction());
     }
-    
-    bool shouldSpeculateMisc()
-    {
-        return isMiscSpeculation(prediction());
-    }
    
     bool shouldSpeculateStringIdent()
     {

Modified: trunk/Source/_javascript_Core/dfg/DFGSafeToExecute.h (165097 => 165098)


--- trunk/Source/_javascript_Core/dfg/DFGSafeToExecute.h	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/Source/_javascript_Core/dfg/DFGSafeToExecute.h	2014-03-05 07:25:02 UTC (rev 165098)
@@ -59,7 +59,6 @@
         case StringOrStringObjectUse:
         case NotCellUse:
         case OtherUse:
-        case MiscUse:
         case MachineIntUse:
             return;
             

Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp (165097 => 165098)


--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp	2014-03-05 07:25:02 UTC (rev 165098)
@@ -3802,11 +3802,6 @@
         return false;
     }
         
-    case MiscUse: {
-        compileMiscStrictEq(node);
-        return false;
-    }
-        
     case UntypedUse: {
         return nonSpeculativeStrictEq(node);
     }
@@ -4835,31 +4830,6 @@
 #endif    
 }
 
-void SpeculativeJIT::speculateMisc(Edge edge, JSValueRegs regs)
-{
-#if USE(JSVALUE64)
-    typeCheck(
-        regs, edge, SpecMisc,
-        m_jit.branch64(MacroAssembler::Above, regs.gpr(), MacroAssembler::TrustedImm64(TagBitTypeOther | TagBitBool | TagBitUndefined)));
-#else
-    typeCheck(
-        regs, edge, SpecMisc | SpecInt32,
-        m_jit.branch32(MacroAssembler::Equal, regs.tagGPR(), MacroAssembler::TrustedImm32(JSValue::Int32Tag)));
-    typeCheck(
-        regs, edge, SpecMisc,
-        m_jit.branch32(MacroAssembler::Below, regs.tagGPR(), MacroAssembler::TrustedImm32(JSValue::UndefinedTag)));
-#endif
-}
-
-void SpeculativeJIT::speculateMisc(Edge edge)
-{
-    if (!needsTypeCheck(edge, SpecMisc))
-        return;
-    
-    JSValueOperand operand(this, edge, ManualOperandSpeculation);
-    speculateMisc(edge, operand.jsValueRegs());
-}
-
 void SpeculativeJIT::speculate(Node*, Edge edge)
 {
     switch (edge.useKind()) {
@@ -4922,9 +4892,6 @@
     case OtherUse:
         speculateOther(edge);
         break;
-    case MiscUse:
-        speculateMisc(edge);
-        break;
     default:
         RELEASE_ASSERT_NOT_REACHED();
         break;

Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.h (165097 => 165098)


--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.h	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.h	2014-03-05 07:25:02 UTC (rev 165098)
@@ -1985,7 +1985,6 @@
     void compileStringEquality(Node*);
     void compileStringIdentEquality(Node*);
     void compileStringZeroLength(Node*);
-    void compileMiscStrictEq(Node*);
 
     void emitObjectOrOtherBranch(Edge value, BasicBlock* taken, BasicBlock* notTaken);
     void emitBranch(Node*);
@@ -2204,8 +2203,6 @@
     void speculateStringOrStringObject(Edge);
     void speculateNotCell(Edge);
     void speculateOther(Edge);
-    void speculateMisc(Edge, JSValueRegs);
-    void speculateMisc(Edge);
     void speculate(Node*, Edge);
     
     JITCompiler::Jump jumpSlowForUnwantedArrayMode(GPRReg tempWithIndexingTypeReg, ArrayMode, IndexingType);

Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp (165097 => 165098)


--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT32_64.cpp	2014-03-05 07:25:02 UTC (rev 165098)
@@ -613,22 +613,6 @@
     booleanResult(resultPayloadGPR, node, UseChildrenCalledExplicitly);
 }
 
-void SpeculativeJIT::compileMiscStrictEq(Node* node)
-{
-    JSValueOperand op1(this, node->child1(), ManualOperandSpeculation);
-    JSValueOperand op2(this, node->child2(), ManualOperandSpeculation);
-    GPRTemporary result(this);
-    
-    speculateMisc(node->child1(), op1.jsValueRegs());
-    speculateMisc(node->child2(), op2.jsValueRegs());
-    
-    m_jit.move(TrustedImm32(0), result.gpr());
-    JITCompiler::Jump notEqual = m_jit.branch32(JITCompiler::NotEqual, op1.tagGPR(), op2.tagGPR());
-    m_jit.compare32(JITCompiler::Equal, op1.payloadGPR(), op2.payloadGPR(), result.gpr());
-    notEqual.link(&m_jit);
-    booleanResult(result.gpr(), node);
-}
-
 void SpeculativeJIT::emitCall(Node* node)
 {
     if (node->op() != Call)

Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp (165097 => 165098)


--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp	2014-03-05 07:25:02 UTC (rev 165098)
@@ -648,20 +648,6 @@
     jsValueResult(resultGPR, m_currentNode, DataFormatJSBoolean, UseChildrenCalledExplicitly);
 }
 
-void SpeculativeJIT::compileMiscStrictEq(Node* node)
-{
-    JSValueOperand op1(this, node->child1(), ManualOperandSpeculation);
-    JSValueOperand op2(this, node->child2(), ManualOperandSpeculation);
-    GPRTemporary result(this);
-    
-    speculateMisc(node->child1(), op1.jsValueRegs());
-    speculateMisc(node->child2(), op2.jsValueRegs());
-    
-    m_jit.compare32(JITCompiler::Equal, op1.gpr(), op2.gpr(), result.gpr());
-    m_jit.or32(TrustedImm32(ValueFalse), result.gpr());
-    jsValueResult(result.gpr(), node, DataFormatJSBoolean);
-}
-
 void SpeculativeJIT::emitCall(Node* node)
 {
     if (node->op() != Call)

Modified: trunk/Source/_javascript_Core/dfg/DFGUseKind.cpp (165097 => 165098)


--- trunk/Source/_javascript_Core/dfg/DFGUseKind.cpp	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/Source/_javascript_Core/dfg/DFGUseKind.cpp	2014-03-05 07:25:02 UTC (rev 165098)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013, 2014 Apple Inc. All rights reserved.
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -97,9 +97,6 @@
     case OtherUse:
         out.print("Other");
         break;
-    case MiscUse:
-        out.print("Misc");
-        break;
     default:
         RELEASE_ASSERT_NOT_REACHED();
         break;

Modified: trunk/Source/_javascript_Core/dfg/DFGUseKind.h (165097 => 165098)


--- trunk/Source/_javascript_Core/dfg/DFGUseKind.h	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/Source/_javascript_Core/dfg/DFGUseKind.h	2014-03-05 07:25:02 UTC (rev 165098)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013, 2014 Apple Inc. All rights reserved.
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -54,7 +54,6 @@
     StringOrStringObjectUse,
     NotCellUse,
     OtherUse,
-    MiscUse,
     LastUseKind // Must always be the last entry in the enum, as it is used to denote the number of enum elements.
 };
 
@@ -97,8 +96,6 @@
         return ~SpecCell;
     case OtherUse:
         return SpecOther;
-    case MiscUse:
-        return SpecMisc;
     default:
         RELEASE_ASSERT_NOT_REACHED();
         return SpecFullTop;

Modified: trunk/Source/_javascript_Core/ftl/FTLCapabilities.cpp (165097 => 165098)


--- trunk/Source/_javascript_Core/ftl/FTLCapabilities.cpp	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/Source/_javascript_Core/ftl/FTLCapabilities.cpp	2014-03-05 07:25:02 UTC (rev 165098)
@@ -141,9 +141,6 @@
     case MultiPutByOffset:
     case ToPrimitive:
     case PhantomArguments:
-    case Throw:
-    case ThrowReferenceError:
-    case Unreachable:
     case GetMyArgumentByVal:
         // These are OK.
         break;
@@ -236,8 +233,6 @@
             break;
         if (node->isBinaryUseKind(UntypedUse))
             break;
-        if (node->isBinaryUseKind(BooleanUse))
-            break;
         if (node->child1().useKind() == ObjectUse
             && node->child2().useKind() == ObjectOrOtherUse)
             break;
@@ -254,10 +249,6 @@
             break;
         if (node->isBinaryUseKind(ObjectUse))
             break;
-        if (node->isBinaryUseKind(MiscUse))
-            break;
-        if (node->isBinaryUseKind(BooleanUse))
-            break;
         return CannotCompile;
     case CompareLess:
     case CompareLessEq:
@@ -350,7 +341,6 @@
                 case StringOrStringObjectUse:
                 case FinalObjectUse:
                 case NotCellUse:
-                case MiscUse:
                     // These are OK.
                     break;
                 default:

Modified: trunk/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp (165097 => 165098)


--- trunk/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/Source/_javascript_Core/ftl/FTLLowerDFGToLLVM.cpp	2014-03-05 07:25:02 UTC (rev 165098)
@@ -559,10 +559,6 @@
         case ForceOSRExit:
             compileForceOSRExit();
             break;
-        case Throw:
-        case ThrowReferenceError:
-            compileThrow();
-            break;
         case InvalidationPoint:
             compileInvalidationPoint();
             break;
@@ -596,9 +592,6 @@
         case TypedArrayWatchpoint:
         case AllocationProfileWatchpoint:
             break;
-        case Unreachable:
-            RELEASE_ASSERT_NOT_REACHED();
-            break;
         default:
             RELEASE_ASSERT_NOT_REACHED();
             break;
@@ -3369,8 +3362,7 @@
         if (m_node->isBinaryUseKind(Int32Use)
             || m_node->isBinaryUseKind(MachineIntUse)
             || m_node->isBinaryUseKind(NumberUse)
-            || m_node->isBinaryUseKind(ObjectUse)
-            || m_node->isBinaryUseKind(BooleanUse)) {
+            || m_node->isBinaryUseKind(ObjectUse)) {
             compileCompareStrictEq();
             return;
         }
@@ -3433,21 +3425,6 @@
             return;
         }
         
-        if (m_node->isBinaryUseKind(BooleanUse)) {
-            setBoolean(
-                m_out.equal(lowBoolean(m_node->child1()), lowBoolean(m_node->child2())));
-            return;
-        }
-        
-        if (m_node->isBinaryUseKind(MiscUse)) {
-            LValue left = lowJSValue(m_node->child1(), ManualOperandSpeculation);
-            LValue right = lowJSValue(m_node->child2(), ManualOperandSpeculation);
-            FTL_TYPE_CHECK(jsValueValue(left), m_node->child1(), SpecMisc, isNotMisc(left));
-            FTL_TYPE_CHECK(jsValueValue(right), m_node->child2(), SpecMisc, isNotMisc(right));
-            setBoolean(m_out.equal(left, right));
-            return;
-        }
-        
         RELEASE_ASSERT_NOT_REACHED();
     }
     
@@ -3714,11 +3691,6 @@
         terminate(InadequateCoverage);
     }
     
-    void compileThrow()
-    {
-        terminate(Uncountable);
-    }
-    
     void compileInvalidationPoint()
     {
         if (verboseCompilationEnabled())
@@ -4991,16 +4963,6 @@
         return m_out.testIsZero64(jsValue, m_tagMask);
     }
     
-    LValue isNotMisc(LValue value)
-    {
-        return m_out.above(value, m_out.constInt64(TagBitTypeOther | TagBitBool | TagBitUndefined));
-    }
-    
-    LValue isMisc(LValue value)
-    {
-        return m_out.bitNot(isNotMisc(value));
-    }
-    
     LValue isNotBoolean(LValue jsValue)
     {
         return m_out.testNonZero64(
@@ -5084,9 +5046,6 @@
         case NotCellUse:
             speculateNotCell(edge);
             break;
-        case MiscUse:
-            speculateMisc(edge);
-            break;
         default:
             dataLog("Unsupported speculation use kind: ", edge.useKind(), "\n");
             RELEASE_ASSERT_NOT_REACHED();
@@ -5364,15 +5323,6 @@
         typeCheck(jsValueValue(value), edge, ~SpecCell, isCell(value));
     }
     
-    void speculateMisc(Edge edge)
-    {
-        if (!m_interpreter.needsTypeCheck(edge))
-            return;
-        
-        LValue value = lowJSValue(edge);
-        typeCheck(jsValueValue(value), edge, SpecMisc, isNotMisc(value));
-    }
-    
     bool masqueradesAsUndefinedWatchpointIsStillValid()
     {
         return m_graph.masqueradesAsUndefinedWatchpointIsStillValid(m_node->origin.semantic);

Deleted: trunk/Source/_javascript_Core/tests/stress/float32-array-out-of-bounds.js (165097 => 165098)


--- trunk/Source/_javascript_Core/tests/stress/float32-array-out-of-bounds.js	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/Source/_javascript_Core/tests/stress/float32-array-out-of-bounds.js	2014-03-05 07:25:02 UTC (rev 165098)
@@ -1,23 +0,0 @@
-function foo(a) {
-    return a[42];
-}
-
-noInline(foo);
-
-var shortArray = new Float32Array(10);
-var longArray = new Float32Array(100);
-
-function test(array, expected) {
-    var result = foo(array);
-    if (result != expected)
-        throw new Error("bad result: " + result);
-}
-
-for (var i = 0; i < 1000; ++i)
-    test(shortArray, void 0);
-
-for (var i = 0; i < 100000; ++i)
-    test(longArray, 0);
-
-test(shortArray, void 0);
-

Deleted: trunk/Source/_javascript_Core/tests/stress/weird-equality-folding-cases.js (165097 => 165098)


--- trunk/Source/_javascript_Core/tests/stress/weird-equality-folding-cases.js	2014-03-05 06:24:23 UTC (rev 165097)
+++ trunk/Source/_javascript_Core/tests/stress/weird-equality-folding-cases.js	2014-03-05 07:25:02 UTC (rev 165098)
@@ -1,13 +0,0 @@
-function test(actualFunction, expected) {
-    var actual = actualFunction();
-    if (actual != expected)
-        throw new Error("bad in " + actualFunction + " result: " + actual);
-}
-
-noInline(test);
-
-for (var i = 0; i < 10000; ++i) {
-    test(function() { return "5" == 5; }, true);
-    test(function() { return ({valueOf:function(){return 42;}}) == 42; }, true);
-    test(function() { return ({valueOf:function(){return 42;}}) == ({valueOf:function(){return 42;}}) }, false);
-}
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to