Title: [131501] trunk
Revision
131501
Author
[email protected]
Date
2012-10-16 14:22:18 -0700 (Tue, 16 Oct 2012)

Log Message

GetScopedVar CSE matches dead GetScopedVar's leading to IR corruption
https://bugs.webkit.org/show_bug.cgi?id=99470
<rdar://problem/12363698>

Source/_javascript_Core: 

Reviewed by Mark Hahnenberg.

All it takes is to follow the "if (!shouldGenerate) continue" idiom and everything will be OK.

* dfg/DFGCSEPhase.cpp:
(JSC::DFG::CSEPhase::globalVarLoadElimination):
(JSC::DFG::CSEPhase::scopedVarLoadElimination):
(JSC::DFG::CSEPhase::globalVarWatchpointElimination):
(JSC::DFG::CSEPhase::getByValLoadElimination):
(JSC::DFG::CSEPhase::checkStructureElimination):
(JSC::DFG::CSEPhase::structureTransitionWatchpointElimination):
(JSC::DFG::CSEPhase::getByOffsetLoadElimination):

LayoutTests: 

Rubber stamped by Mark Hahnenberg.

* fast/js/dfg-cse-dead-get-scoped-var-expected.txt: Added.
* fast/js/dfg-cse-dead-get-scoped-var.html: Added.
* fast/js/jsc-test-list:
* fast/js/script-tests/dfg-cse-dead-get-scoped-var.js: Added.
(foo.return.if):
(foo):

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (131500 => 131501)


--- trunk/LayoutTests/ChangeLog	2012-10-16 21:17:37 UTC (rev 131500)
+++ trunk/LayoutTests/ChangeLog	2012-10-16 21:22:18 UTC (rev 131501)
@@ -1,3 +1,18 @@
+2012-10-16  Filip Pizlo  <[email protected]>
+
+        GetScopedVar CSE matches dead GetScopedVar's leading to IR corruption
+        https://bugs.webkit.org/show_bug.cgi?id=99470
+        <rdar://problem/12363698>
+
+        Rubber stamped by Mark Hahnenberg.
+
+        * fast/js/dfg-cse-dead-get-scoped-var-expected.txt: Added.
+        * fast/js/dfg-cse-dead-get-scoped-var.html: Added.
+        * fast/js/jsc-test-list:
+        * fast/js/script-tests/dfg-cse-dead-get-scoped-var.js: Added.
+        (foo.return.if):
+        (foo):
+
 2012-10-16  Adam Barth  <[email protected]>
 
         Document::adoptNode shouldn't special-case <iframe>

Added: trunk/LayoutTests/fast/js/dfg-cse-dead-get-scoped-var-expected.txt (0 => 131501)


--- trunk/LayoutTests/fast/js/dfg-cse-dead-get-scoped-var-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/js/dfg-cse-dead-get-scoped-var-expected.txt	2012-10-16 21:22:18 UTC (rev 131501)
@@ -0,0 +1,1009 @@
+Tests that CSE doesn't try to match against a dead GetScopedVar.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS foo(i)(false) is 42
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/js/dfg-cse-dead-get-scoped-var.html (0 => 131501)


--- trunk/LayoutTests/fast/js/dfg-cse-dead-get-scoped-var.html	                        (rev 0)
+++ trunk/LayoutTests/fast/js/dfg-cse-dead-get-scoped-var.html	2012-10-16 21:22:18 UTC (rev 131501)
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src=""
+</head>
+<body>
+<script src=""
+<script src=""
+</body>
+</html>

Modified: trunk/LayoutTests/fast/js/jsc-test-list (131500 => 131501)


--- trunk/LayoutTests/fast/js/jsc-test-list	2012-10-16 21:17:37 UTC (rev 131500)
+++ trunk/LayoutTests/fast/js/jsc-test-list	2012-10-16 21:22:18 UTC (rev 131501)
@@ -91,6 +91,7 @@
 fast/js/dfg-constant-fold-first-local-read-after-block-merge
 fast/js/dfg-convert-this-dom-window
 fast/js/dfg-cse-cfa-discrepancy
+fast/js/dfg-cse-dead-get-scoped-var
 fast/js/dfg-dead-min-one-arg
 fast/js/dfg-dead-min-two-args
 fast/js/dfg-dead-redundant-get-array-length

Added: trunk/LayoutTests/fast/js/script-tests/dfg-cse-dead-get-scoped-var.js (0 => 131501)


--- trunk/LayoutTests/fast/js/script-tests/dfg-cse-dead-get-scoped-var.js	                        (rev 0)
+++ trunk/LayoutTests/fast/js/script-tests/dfg-cse-dead-get-scoped-var.js	2012-10-16 21:22:18 UTC (rev 131501)
@@ -0,0 +1,18 @@
+description(
+"Tests that CSE doesn't try to match against a dead GetScopedVar."
+);
+
+function foo(a) {
+    var x = a;
+    return function(p) {
+        if (p) {
+            var tmp = x;
+            return x;
+        }
+        return 42;
+    };
+}
+
+for (var i = 0; i < 1000; ++i)
+    shouldBe("foo(i)(false)", "42");
+

Modified: trunk/Source/_javascript_Core/ChangeLog (131500 => 131501)


--- trunk/Source/_javascript_Core/ChangeLog	2012-10-16 21:17:37 UTC (rev 131500)
+++ trunk/Source/_javascript_Core/ChangeLog	2012-10-16 21:22:18 UTC (rev 131501)
@@ -1,3 +1,22 @@
+2012-10-16  Filip Pizlo  <[email protected]>
+
+        GetScopedVar CSE matches dead GetScopedVar's leading to IR corruption
+        https://bugs.webkit.org/show_bug.cgi?id=99470
+        <rdar://problem/12363698>
+
+        Reviewed by Mark Hahnenberg.
+
+        All it takes is to follow the "if (!shouldGenerate) continue" idiom and everything will be OK.
+
+        * dfg/DFGCSEPhase.cpp:
+        (JSC::DFG::CSEPhase::globalVarLoadElimination):
+        (JSC::DFG::CSEPhase::scopedVarLoadElimination):
+        (JSC::DFG::CSEPhase::globalVarWatchpointElimination):
+        (JSC::DFG::CSEPhase::getByValLoadElimination):
+        (JSC::DFG::CSEPhase::checkStructureElimination):
+        (JSC::DFG::CSEPhase::structureTransitionWatchpointElimination):
+        (JSC::DFG::CSEPhase::getByOffsetLoadElimination):
+
 2012-10-16  Dima Gorbik  <[email protected]>
 
         Remove Platform.h include from the header files.

Modified: trunk/Source/_javascript_Core/dfg/DFGCSEPhase.cpp (131500 => 131501)


--- trunk/Source/_javascript_Core/dfg/DFGCSEPhase.cpp	2012-10-16 21:17:37 UTC (rev 131500)
+++ trunk/Source/_javascript_Core/dfg/DFGCSEPhase.cpp	2012-10-16 21:22:18 UTC (rev 131501)
@@ -198,6 +198,8 @@
         for (unsigned i = m_indexInBlock; i--;) {
             NodeIndex index = m_currentBlock->at(i);
             Node& node = m_graph[index];
+            if (!node.shouldGenerate())
+                continue;
             switch (node.op()) {
             case GetGlobalVar:
                 if (node.registerPointer() == registerPointer)
@@ -221,6 +223,8 @@
         for (unsigned i = m_indexInBlock; i--;) {
             NodeIndex index = m_currentBlock->at(i);
             Node& node = m_graph[index];
+            if (!node.shouldGenerate())
+                continue;
             switch (node.op()) {
             case GetScopedVar: {
                 Node& getScopeRegisters = m_graph[node.child1()];
@@ -249,6 +253,8 @@
         for (unsigned i = m_indexInBlock; i--;) {
             NodeIndex index = m_currentBlock->at(i);
             Node& node = m_graph[index];
+            if (!node.shouldGenerate())
+                continue;
             switch (node.op()) {
             case GlobalVarWatchpoint:
                 if (node.registerPointer() == registerPointer)
@@ -335,6 +341,8 @@
                 break;
 
             Node& node = m_graph[index];
+            if (!node.shouldGenerate())
+                continue;
             switch (node.op()) {
             case GetByVal:
                 if (!m_graph.byValIsPure(node))
@@ -391,6 +399,8 @@
                 break;
 
             Node& node = m_graph[index];
+            if (!node.shouldGenerate())
+                continue;
             switch (node.op()) {
             case CheckStructure:
             case ForwardCheckStructure:
@@ -445,6 +455,8 @@
                 break;
 
             Node& node = m_graph[index];
+            if (!node.shouldGenerate())
+                continue;
             switch (node.op()) {
             case CheckStructure:
             case ForwardCheckStructure:
@@ -547,6 +559,8 @@
                 break;
 
             Node& node = m_graph[index];
+            if (!node.shouldGenerate())
+                continue;
             switch (node.op()) {
             case GetByOffset:
                 if (node.child1() == child1
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to