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