Title: [134634] trunk/Source/_javascript_Core
Revision
134634
Author
bfulg...@webkit.org
Date
2012-11-14 11:26:04 -0800 (Wed, 14 Nov 2012)

Log Message

Replace (typeof(x) != <"object", "undefined", ...>) with
!(typeof(x) == <"object",..>). Later is_object, is_<...>  bytecode operation
will be used.

https://bugs.webkit.org/show_bug.cgi?id=98893

Patch by Valery Ignatyev <valery.ignat...@ispras.ru> on 2012-11-14
Reviewed by Filip Pizlo.

This eliminates expensive  typeof implementation and
allows to use DFG optimizations, which doesn't support 'typeof'.

* bytecompiler/NodesCodegen.cpp:
(JSC::BinaryOpNode::emitBytecode):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (134633 => 134634)


--- trunk/Source/_javascript_Core/ChangeLog	2012-11-14 19:24:57 UTC (rev 134633)
+++ trunk/Source/_javascript_Core/ChangeLog	2012-11-14 19:26:04 UTC (rev 134634)
@@ -1,3 +1,19 @@
+2012-11-14  Valery Ignatyev  <valery.ignat...@ispras.ru>
+
+        Replace (typeof(x) != <"object", "undefined", ...>) with
+        !(typeof(x) == <"object",..>). Later is_object, is_<...>  bytecode operation
+        will be used.
+
+        https://bugs.webkit.org/show_bug.cgi?id=98893
+
+        Reviewed by Filip Pizlo.
+
+        This eliminates expensive  typeof implementation and
+        allows to use DFG optimizations, which doesn't support 'typeof'.
+
+        * bytecompiler/NodesCodegen.cpp:
+        (JSC::BinaryOpNode::emitBytecode):
+
 2012-11-14  Peter Gal  <galpe...@inf.u-szeged.hu>
 
         [Qt][ARM]REGRESSION(r133985): It broke the build

Modified: trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp (134633 => 134634)


--- trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp	2012-11-14 19:24:57 UTC (rev 134633)
+++ trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp	2012-11-14 19:26:04 UTC (rev 134634)
@@ -1035,6 +1035,16 @@
 
     RefPtr<RegisterID> src1 = generator.emitNodeForLeftHandSide(m_expr1, m_rightHasAssignments, m_expr2->isPure(generator));
     RegisterID* src2 = generator.emitNode(m_expr2);
+    if (generator.m_lastOpcodeID == op_typeof && (opcodeID == op_neq || opcodeID == op_nstricteq)) {
+        RefPtr<RegisterID> tmp = generator.tempDestination(dst);
+        if (opcodeID == op_neq)
+            generator.emitEqualityOp(op_eq, generator.finalDestination(tmp.get(), src1.get()), src1.get(), src2);
+        else if (opcodeID == op_nstricteq)
+            generator.emitEqualityOp(op_stricteq, generator.finalDestination(tmp.get(), src1.get()), src1.get(), src2);
+        else
+            ASSERT_NOT_REACHED();
+        return generator.emitUnaryOp(op_not, generator.finalDestination(dst, tmp.get()), tmp.get());
+    }
     return generator.emitBinaryOp(opcodeID, generator.finalDestination(dst, src1.get()), src1.get(), src2, OperandTypes(m_expr1->resultDescriptor(), m_expr2->resultDescriptor()));
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to