Title: [241114] trunk
Revision
241114
Author
ysuz...@apple.com
Date
2019-02-06 20:26:25 -0800 (Wed, 06 Feb 2019)

Log Message

[JSC] InitializeEntrypointArguments should produce SpecCellCheck if FlushFormat is FlushedCell
https://bugs.webkit.org/show_bug.cgi?id=194369
<rdar://problem/47813087>

Reviewed by Saam Barati.

JSTests:

* stress/initialize-entrypoint-arguments-with-tdz.js: Added.
(A):

Source/_javascript_Core:

InitializeEntrypointArguments says SpecCell if the FlushFormat is FlushedCell. But this actually has
JSEmpty if it is TDZ. This incorrectly proved type information removes necessary CheckNotEmpty in
constant folding phase.

* dfg/DFGAbstractInterpreterInlines.h:
(JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

Modified Paths

Added Paths

Diff

Modified: trunk/JSTests/ChangeLog (241113 => 241114)


--- trunk/JSTests/ChangeLog	2019-02-07 03:13:11 UTC (rev 241113)
+++ trunk/JSTests/ChangeLog	2019-02-07 04:26:25 UTC (rev 241114)
@@ -1,5 +1,16 @@
 2019-02-06  Yusuke Suzuki  <ysuz...@apple.com>
 
+        [JSC] InitializeEntrypointArguments should produce SpecCellCheck if FlushFormat is FlushedCell
+        https://bugs.webkit.org/show_bug.cgi?id=194369
+        <rdar://problem/47813087>
+
+        Reviewed by Saam Barati.
+
+        * stress/initialize-entrypoint-arguments-with-tdz.js: Added.
+        (A):
+
+2019-02-06  Yusuke Suzuki  <ysuz...@apple.com>
+
         [JSC] PrivateName to PublicName hash table is wasteful
         https://bugs.webkit.org/show_bug.cgi?id=194277
 

Added: trunk/JSTests/stress/initialize-entrypoint-arguments-with-tdz.js (0 => 241114)


--- trunk/JSTests/stress/initialize-entrypoint-arguments-with-tdz.js	                        (rev 0)
+++ trunk/JSTests/stress/initialize-entrypoint-arguments-with-tdz.js	2019-02-07 04:26:25 UTC (rev 241114)
@@ -0,0 +1,27 @@
+//@ runDefault("--jitPolicyScale=0", "--useConcurrentGC=false", "--useConcurrentJIT=false", "--useGenerationalGC=false")
+class A extends Object {
+    constructor(beforeSuper) {
+        let touchThis = () => {
+            try {
+                this.x = this.x;
+            } catch (e) {
+            }
+            try {
+                this.x = +this.x
+            } catch (e) {
+            }
+        };
+        if (beforeSuper) {
+            touchThis();
+            super();
+        } else {
+            super();
+            touchThis();
+        }
+    }
+}
+
+for (var i = 0; i < 10000; i++) {
+    new A(false);
+    new A(true);
+}

Modified: trunk/Source/_javascript_Core/ChangeLog (241113 => 241114)


--- trunk/Source/_javascript_Core/ChangeLog	2019-02-07 03:13:11 UTC (rev 241113)
+++ trunk/Source/_javascript_Core/ChangeLog	2019-02-07 04:26:25 UTC (rev 241114)
@@ -1,3 +1,18 @@
+2019-02-06  Yusuke Suzuki  <ysuz...@apple.com>
+
+        [JSC] InitializeEntrypointArguments should produce SpecCellCheck if FlushFormat is FlushedCell
+        https://bugs.webkit.org/show_bug.cgi?id=194369
+        <rdar://problem/47813087>
+
+        Reviewed by Saam Barati.
+
+        InitializeEntrypointArguments says SpecCell if the FlushFormat is FlushedCell. But this actually has
+        JSEmpty if it is TDZ. This incorrectly proved type information removes necessary CheckNotEmpty in
+        constant folding phase.
+
+        * dfg/DFGAbstractInterpreterInlines.h:
+        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
+
 2019-02-06  Devin Rousso  <drou...@apple.com>
 
         Web Inspector: DOM: don't send the entire function string with each event listener

Modified: trunk/Source/_javascript_Core/dfg/DFGAbstractInterpreterInlines.h (241113 => 241114)


--- trunk/Source/_javascript_Core/dfg/DFGAbstractInterpreterInlines.h	2019-02-07 03:13:11 UTC (rev 241113)
+++ trunk/Source/_javascript_Core/dfg/DFGAbstractInterpreterInlines.h	2019-02-07 04:26:25 UTC (rev 241114)
@@ -341,7 +341,7 @@
                 value.setNonCellType(SpecBoolean);
                 break;
             case FlushedCell:
-                value.setType(m_graph, SpecCell);
+                value.setType(m_graph, SpecCellCheck);
                 break;
             case FlushedJSValue:
                 value.makeBytecodeTop();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to