Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(178)

Side by Side Diff: test/mjsunit/elements-transition-hoisting.js

Issue 19807002: Turn on parallel recompilation for tests that assert optimization status. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: fix small details. no logic change. Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « test/mjsunit/deopt-minus-zero.js ('k') | test/mjsunit/harmony/block-let-crankshaft.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
11 // with the distribution. 11 // with the distribution.
12 // * Neither the name of Google Inc. nor the names of its 12 // * Neither the name of Google Inc. nor the names of its
13 // contributors may be used to endorse or promote products derived 13 // contributors may be used to endorse or promote products derived
14 // from this software without specific prior written permission. 14 // from this software without specific prior written permission.
15 // 15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 27
28 // Flags: --allow-natives-syntax --smi-only-arrays --noparallel-recompilation 28 // Flags: --allow-natives-syntax --smi-only-arrays --notrack-allocation-sites
29 // Flags: --notrack-allocation-sites
30 29
31 // No tracking of allocation sites because it interfers with the semantics 30 // No tracking of allocation sites because it interfers with the semantics
32 // the test is trying to ensure. 31 // the test is trying to ensure.
33 32
34 // Ensure that ElementsKind transitions in various situations are hoisted (or 33 // Ensure that ElementsKind transitions in various situations are hoisted (or
35 // not hoisted) correctly, don't change the semantics programs and don't trigger 34 // not hoisted) correctly, don't change the semantics programs and don't trigger
36 // deopt through hoisting in important situations. 35 // deopt through hoisting in important situations.
37 36
38 support_smi_only_arrays = %HasFastSmiElements(new Array(1,2,3,4,5,6)); 37 support_smi_only_arrays = %HasFastSmiElements(new Array(1,2,3,4,5,6));
39 38
(...skipping 16 matching lines...) Expand all
56 } while (--count > 0); 55 } while (--count > 0);
57 } 56 }
58 57
59 testDoubleConversion4(new Array(5)); 58 testDoubleConversion4(new Array(5));
60 testDoubleConversion4(new Array(5)); // Call twice to make sure that second 59 testDoubleConversion4(new Array(5)); // Call twice to make sure that second
61 // store is a transition and not 60 // store is a transition and not
62 // optimistically MONOMORPHIC 61 // optimistically MONOMORPHIC
63 %OptimizeFunctionOnNextCall(testDoubleConversion4); 62 %OptimizeFunctionOnNextCall(testDoubleConversion4);
64 testDoubleConversion4(new Array(5)); 63 testDoubleConversion4(new Array(5));
65 testDoubleConversion4(new Array(5)); 64 testDoubleConversion4(new Array(5));
66 assertTrue(2 != %GetOptimizationStatus(testDoubleConversion4)); 65 assertOptimized(testDoubleConversion4);
67 %ClearFunctionTypeFeedback(testDoubleConversion4); 66 %ClearFunctionTypeFeedback(testDoubleConversion4);
68 67
69 // Make sure that non-element related map checks that are not preceded by 68 // Make sure that non-element related map checks that are not preceded by
70 // transitions in a loop still get hoisted in a way that doesn't generate a 69 // transitions in a loop still get hoisted in a way that doesn't generate a
71 // deopt in simple cases. 70 // deopt in simple cases.
72 function testExactMapHoisting(a) { 71 function testExactMapHoisting(a) {
73 var object = new Object(); 72 var object = new Object();
74 a.foo = {}; 73 a.foo = {};
75 a[0] = 0; 74 a[0] = 0;
76 a[1] = 1; 75 a[1] = 1;
77 var count = 3; 76 var count = 3;
78 do { 77 do {
79 a.foo = object; // This map check should be hoistable 78 a.foo = object; // This map check should be hoistable
80 a[1] = object; 79 a[1] = object;
81 result = a.foo == object && a[1] == object; 80 result = a.foo == object && a[1] == object;
82 } while (--count > 0); 81 } while (--count > 0);
83 } 82 }
84 83
85 testExactMapHoisting(new Array(5)); 84 testExactMapHoisting(new Array(5));
86 testExactMapHoisting(new Array(5)); // Call twice to make sure that second 85 testExactMapHoisting(new Array(5)); // Call twice to make sure that second
87 // store is a transition and not 86 // store is a transition and not
88 // optimistically MONOMORPHIC 87 // optimistically MONOMORPHIC
89 %OptimizeFunctionOnNextCall(testExactMapHoisting); 88 %OptimizeFunctionOnNextCall(testExactMapHoisting);
90 testExactMapHoisting(new Array(5)); 89 testExactMapHoisting(new Array(5));
91 testExactMapHoisting(new Array(5)); 90 testExactMapHoisting(new Array(5));
92 assertTrue(2 != %GetOptimizationStatus(testExactMapHoisting)); 91 assertOptimized(testExactMapHoisting);
93 %ClearFunctionTypeFeedback(testExactMapHoisting); 92 %ClearFunctionTypeFeedback(testExactMapHoisting);
94 93
95 // Make sure that non-element related map checks do NOT get hoisted if they 94 // Make sure that non-element related map checks do NOT get hoisted if they
96 // depend on an elements transition before them and it's not possible to hoist 95 // depend on an elements transition before them and it's not possible to hoist
97 // that transition. 96 // that transition.
98 function testExactMapHoisting2(a) { 97 function testExactMapHoisting2(a) {
99 var object = new Object(); 98 var object = new Object();
100 a.foo = 0; 99 a.foo = 0;
101 a[0] = 0; 100 a[0] = 0;
102 a[1] = 1; 101 a[1] = 1;
(...skipping 11 matching lines...) Expand all
114 } 113 }
115 114
116 testExactMapHoisting2(new Array(5)); 115 testExactMapHoisting2(new Array(5));
117 testExactMapHoisting2(new Array(5)); // Call twice to make sure that second 116 testExactMapHoisting2(new Array(5)); // Call twice to make sure that second
118 // store is a transition and not 117 // store is a transition and not
119 // optimistically MONOMORPHIC 118 // optimistically MONOMORPHIC
120 %OptimizeFunctionOnNextCall(testExactMapHoisting2); 119 %OptimizeFunctionOnNextCall(testExactMapHoisting2);
121 testExactMapHoisting2(new Array(5)); 120 testExactMapHoisting2(new Array(5));
122 testExactMapHoisting2(new Array(5)); 121 testExactMapHoisting2(new Array(5));
123 // Temporarily disabled - see bug 2176. 122 // Temporarily disabled - see bug 2176.
124 // assertTrue(2 != %GetOptimizationStatus(testExactMapHoisting2)); 123 // assertOptimized(testExactMapHoisting2);
125 %ClearFunctionTypeFeedback(testExactMapHoisting2); 124 %ClearFunctionTypeFeedback(testExactMapHoisting2);
126 125
127 // Make sure that non-element related map checks do get hoisted if they use 126 // Make sure that non-element related map checks do get hoisted if they use
128 // the transitioned map for the check and all transitions that they depend 127 // the transitioned map for the check and all transitions that they depend
129 // upon can hoisted, too. 128 // upon can hoisted, too.
130 function testExactMapHoisting3(a) { 129 function testExactMapHoisting3(a) {
131 var object = new Object(); 130 var object = new Object();
132 a.foo = null; 131 a.foo = null;
133 a[0] = 0; 132 a[0] = 0;
134 a[1] = 1; 133 a[1] = 1;
135 var count = 3; 134 var count = 3;
136 do { 135 do {
137 a[1] = 2.5; 136 a[1] = 2.5;
138 a.foo = object; // This map check should be hoistable because all element s 137 a.foo = object; // This map check should be hoistable because all element s
139 // transitions in the loop can also be hoisted. 138 // transitions in the loop can also be hoisted.
140 } while (--count > 0); 139 } while (--count > 0);
141 } 140 }
142 141
143 var add_transition = new Array(5); 142 var add_transition = new Array(5);
144 add_transition.foo = 0; 143 add_transition.foo = 0;
145 add_transition[0] = new Object(); // For FAST_ELEMENT transition to be create d 144 add_transition[0] = new Object(); // For FAST_ELEMENT transition to be create d
146 testExactMapHoisting3(new Array(5)); 145 testExactMapHoisting3(new Array(5));
147 testExactMapHoisting3(new Array(5)); // Call twice to make sure that second 146 testExactMapHoisting3(new Array(5)); // Call twice to make sure that second
148 // store is a transition and not 147 // store is a transition and not
149 // optimistically MONOMORPHIC 148 // optimistically MONOMORPHIC
150 %OptimizeFunctionOnNextCall(testExactMapHoisting3); 149 %OptimizeFunctionOnNextCall(testExactMapHoisting3);
151 testExactMapHoisting3(new Array(5)); 150 testExactMapHoisting3(new Array(5));
152 testExactMapHoisting3(new Array(5)); 151 testExactMapHoisting3(new Array(5));
153 assertTrue(2 != %GetOptimizationStatus(testExactMapHoisting3)); 152 assertOptimized(testExactMapHoisting3);
154 %ClearFunctionTypeFeedback(testExactMapHoisting3); 153 %ClearFunctionTypeFeedback(testExactMapHoisting3);
155 154
156 function testDominatingTransitionHoisting1(a) { 155 function testDominatingTransitionHoisting1(a) {
157 var object = new Object(); 156 var object = new Object();
158 a[0] = 0; 157 a[0] = 0;
159 var count = 3; 158 var count = 3;
160 do { 159 do {
161 if (a.baz != true) { 160 if (a.baz != true) {
162 a[1] = 2.5; 161 a[1] = 2.5;
163 } 162 }
164 a[0] = object; 163 a[0] = object;
165 } while (--count > 3); 164 } while (--count > 3);
166 } 165 }
167 166
168 /* 167 /*
169 testDominatingTransitionHoisting1(new Array(5)); 168 testDominatingTransitionHoisting1(new Array(5));
170 testDominatingTransitionHoisting1(new Array(5)); // Call twice to make sure 169 testDominatingTransitionHoisting1(new Array(5)); // Call twice to make sure
171 // that second store is a 170 // that second store is a
172 // transition and not 171 // transition and not
173 // optimistically MONOMORPHI C 172 // optimistically MONOMORPHI C
174 %OptimizeFunctionOnNextCall(testDominatingTransitionHoisting1); 173 %OptimizeFunctionOnNextCall(testDominatingTransitionHoisting1);
175 testDominatingTransitionHoisting1(new Array(5)); 174 testDominatingTransitionHoisting1(new Array(5));
176 testDominatingTransitionHoisting1(new Array(5)); 175 testDominatingTransitionHoisting1(new Array(5));
177 // TODO(verwaest) With current changes the elements transition gets hoisted 176 // TODO(verwaest) With current changes the elements transition gets hoisted
178 // above the access, causing a deopt. We should update the type of access 177 // above the access, causing a deopt. We should update the type of access
179 // rather than forbid hoisting the transition. 178 // rather than forbid hoisting the transition.
180 assertTrue(2 != %GetOptimizationStatus(testDominatingTransitionHoisting1)); 179 assertOptimized(testDominatingTransitionHoisting1);
181 %ClearFunctionTypeFeedback(testDominatingTransitionHoisting1); 180 %ClearFunctionTypeFeedback(testDominatingTransitionHoisting1);
182 */ 181 */
183 182
184 function testHoistingWithSideEffect(a) { 183 function testHoistingWithSideEffect(a) {
185 var object = new Object(); 184 var object = new Object();
186 a[0] = 0; 185 a[0] = 0;
187 var count = 3; 186 var count = 3;
188 do { 187 do {
189 assertTrue(true); 188 assertTrue(true);
190 a[0] = object; 189 a[0] = object;
191 } while (--count > 3); 190 } while (--count > 3);
192 } 191 }
193 192
194 testHoistingWithSideEffect(new Array(5)); 193 testHoistingWithSideEffect(new Array(5));
195 testHoistingWithSideEffect(new Array(5)); // Call twice to make sure that 194 testHoistingWithSideEffect(new Array(5)); // Call twice to make sure that
196 // second store is a transition and 195 // second store is a transition and
197 // not optimistically MONOMORPHIC 196 // not optimistically MONOMORPHIC
198 %OptimizeFunctionOnNextCall(testHoistingWithSideEffect); 197 %OptimizeFunctionOnNextCall(testHoistingWithSideEffect);
199 testHoistingWithSideEffect(new Array(5)); 198 testHoistingWithSideEffect(new Array(5));
200 testHoistingWithSideEffect(new Array(5)); 199 testHoistingWithSideEffect(new Array(5));
201 assertTrue(2 != %GetOptimizationStatus(testHoistingWithSideEffect)); 200 assertOptimized(testHoistingWithSideEffect);
202 %ClearFunctionTypeFeedback(testHoistingWithSideEffect); 201 %ClearFunctionTypeFeedback(testHoistingWithSideEffect);
203 202
204 function testStraightLineDupeElinination(a,b,c,d,e,f) { 203 function testStraightLineDupeElinination(a,b,c,d,e,f) {
205 var count = 3; 204 var count = 3;
206 do { 205 do {
207 assertTrue(true); 206 assertTrue(true);
208 a[0] = b; 207 a[0] = b;
209 a[1] = c; 208 a[1] = c;
210 a[2] = d; 209 a[2] = d;
211 assertTrue(true); 210 assertTrue(true);
(...skipping 18 matching lines...) Expand all
230 testStraightLineDupeElinination(new Array(5),0,0,0,.5,0); 229 testStraightLineDupeElinination(new Array(5),0,0,0,.5,0);
231 testStraightLineDupeElinination(new Array(5),0,0,0,0,.5); 230 testStraightLineDupeElinination(new Array(5),0,0,0,0,.5);
232 testStraightLineDupeElinination(new Array(5),.5,0,0,0,0); 231 testStraightLineDupeElinination(new Array(5),.5,0,0,0,0);
233 testStraightLineDupeElinination(new Array(5),0,.5,0,0,0); 232 testStraightLineDupeElinination(new Array(5),0,.5,0,0,0);
234 testStraightLineDupeElinination(new Array(5),0,0,.5,0,0); 233 testStraightLineDupeElinination(new Array(5),0,0,.5,0,0);
235 testStraightLineDupeElinination(new Array(5),0,0,0,.5,0); 234 testStraightLineDupeElinination(new Array(5),0,0,0,.5,0);
236 testStraightLineDupeElinination(new Array(5),0,0,0,0,.5); 235 testStraightLineDupeElinination(new Array(5),0,0,0,0,.5);
237 %OptimizeFunctionOnNextCall(testStraightLineDupeElinination); 236 %OptimizeFunctionOnNextCall(testStraightLineDupeElinination);
238 testStraightLineDupeElinination(new Array(5),0,0,0,0,0); 237 testStraightLineDupeElinination(new Array(5),0,0,0,0,0);
239 testStraightLineDupeElinination(new Array(5),0,0,0,0,0); 238 testStraightLineDupeElinination(new Array(5),0,0,0,0,0);
240 assertTrue(2 != %GetOptimizationStatus(testStraightLineDupeElinination)); 239 assertOptimized(testStraightLineDupeElinination);
241 %ClearFunctionTypeFeedback(testStraightLineDupeElinination); 240 %ClearFunctionTypeFeedback(testStraightLineDupeElinination);
242 } 241 }
OLDNEW
« no previous file with comments | « test/mjsunit/deopt-minus-zero.js ('k') | test/mjsunit/harmony/block-let-crankshaft.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698