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

Side by Side Diff: test/cctest/test-deoptimization.cc

Issue 1458003006: Remove usage of deprecated APIs from compiler/deopt test (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: updates Created 5 years 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
« no previous file with comments | « test/cctest/test-compiler.cc ('k') | no next file » | 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 // TODO(jochen): Remove this after the setting is turned on globally.
29 #define V8_IMMINENT_DEPRECATION_WARNINGS
30
28 #include <stdlib.h> 31 #include <stdlib.h>
29 32
30 #include "src/v8.h" 33 #include "src/v8.h"
31 34
32 #include "src/api.h" 35 #include "src/api.h"
33 #include "src/base/platform/platform.h" 36 #include "src/base/platform/platform.h"
34 #include "src/compilation-cache.h" 37 #include "src/compilation-cache.h"
35 #include "src/debug/debug.h" 38 #include "src/debug/debug.h"
36 #include "src/deoptimizer.h" 39 #include "src/deoptimizer.h"
37 #include "src/isolate.h" 40 #include "src/isolate.h"
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 }; 109 };
107 110
108 111
109 // Abort any ongoing incremental marking to make sure that all weak global 112 // Abort any ongoing incremental marking to make sure that all weak global
110 // handle callbacks are processed. 113 // handle callbacks are processed.
111 static void NonIncrementalGC(i::Isolate* isolate) { 114 static void NonIncrementalGC(i::Isolate* isolate) {
112 isolate->heap()->CollectAllGarbage(); 115 isolate->heap()->CollectAllGarbage();
113 } 116 }
114 117
115 118
116 static Handle<JSFunction> GetJSFunction(v8::Handle<v8::Object> obj, 119 static Handle<JSFunction> GetJSFunction(v8::Local<v8::Context> context,
117 const char* property_name) { 120 const char* property_name) {
118 v8::Local<v8::Function> fun = 121 v8::Local<v8::Function> fun = v8::Local<v8::Function>::Cast(
119 v8::Local<v8::Function>::Cast(obj->Get(v8_str(property_name))); 122 context->Global()->Get(context, v8_str(property_name)).ToLocalChecked());
120 return i::Handle<i::JSFunction>::cast(v8::Utils::OpenHandle(*fun)); 123 return i::Handle<i::JSFunction>::cast(v8::Utils::OpenHandle(*fun));
121 } 124 }
122 125
123 126
124 TEST(DeoptimizeSimple) { 127 TEST(DeoptimizeSimple) {
125 LocalContext env; 128 LocalContext env;
126 v8::HandleScope scope(env->GetIsolate()); 129 v8::HandleScope scope(env->GetIsolate());
127 130
128 // Test lazy deoptimization of a simple function. 131 // Test lazy deoptimization of a simple function.
129 { 132 {
130 AlwaysOptimizeAllowNativesSyntaxNoInlining options; 133 AlwaysOptimizeAllowNativesSyntaxNoInlining options;
131 CompileRun( 134 CompileRun(
132 "var count = 0;" 135 "var count = 0;"
133 "function h() { %DeoptimizeFunction(f); }" 136 "function h() { %DeoptimizeFunction(f); }"
134 "function g() { count++; h(); }" 137 "function g() { count++; h(); }"
135 "function f() { g(); };" 138 "function f() { g(); };"
136 "f();"); 139 "f();");
137 } 140 }
138 NonIncrementalGC(CcTest::i_isolate()); 141 NonIncrementalGC(CcTest::i_isolate());
139 142
140 CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value()); 143 CHECK_EQ(1, env->Global()
141 CHECK(!GetJSFunction(env->Global(), "f")->IsOptimized()); 144 ->Get(env.local(), v8_str("count"))
145 .ToLocalChecked()
146 ->Int32Value(env.local())
147 .FromJust());
148 CHECK(!GetJSFunction(env.local(), "f")->IsOptimized());
142 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate())); 149 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate()));
143 150
144 // Test lazy deoptimization of a simple function. Call the function after the 151 // Test lazy deoptimization of a simple function. Call the function after the
145 // deoptimization while it is still activated further down the stack. 152 // deoptimization while it is still activated further down the stack.
146 { 153 {
147 AlwaysOptimizeAllowNativesSyntaxNoInlining options; 154 AlwaysOptimizeAllowNativesSyntaxNoInlining options;
148 CompileRun( 155 CompileRun(
149 "var count = 0;" 156 "var count = 0;"
150 "function g() { count++; %DeoptimizeFunction(f); f(false); }" 157 "function g() { count++; %DeoptimizeFunction(f); f(false); }"
151 "function f(x) { if (x) { g(); } else { return } };" 158 "function f(x) { if (x) { g(); } else { return } };"
152 "f(true);"); 159 "f(true);");
153 } 160 }
154 NonIncrementalGC(CcTest::i_isolate()); 161 NonIncrementalGC(CcTest::i_isolate());
155 162
156 CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value()); 163 CHECK_EQ(1, env->Global()
157 CHECK(!GetJSFunction(env->Global(), "f")->IsOptimized()); 164 ->Get(env.local(), v8_str("count"))
165 .ToLocalChecked()
166 ->Int32Value(env.local())
167 .FromJust());
168 CHECK(!GetJSFunction(env.local(), "f")->IsOptimized());
158 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate())); 169 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate()));
159 } 170 }
160 171
161 172
162 TEST(DeoptimizeSimpleWithArguments) { 173 TEST(DeoptimizeSimpleWithArguments) {
163 LocalContext env; 174 LocalContext env;
164 v8::HandleScope scope(env->GetIsolate()); 175 v8::HandleScope scope(env->GetIsolate());
165 176
166 // Test lazy deoptimization of a simple function with some arguments. 177 // Test lazy deoptimization of a simple function with some arguments.
167 { 178 {
168 AlwaysOptimizeAllowNativesSyntaxNoInlining options; 179 AlwaysOptimizeAllowNativesSyntaxNoInlining options;
169 CompileRun( 180 CompileRun(
170 "var count = 0;" 181 "var count = 0;"
171 "function h(x) { %DeoptimizeFunction(f); }" 182 "function h(x) { %DeoptimizeFunction(f); }"
172 "function g(x, y) { count++; h(x); }" 183 "function g(x, y) { count++; h(x); }"
173 "function f(x, y, z) { g(1,x); y+z; };" 184 "function f(x, y, z) { g(1,x); y+z; };"
174 "f(1, \"2\", false);"); 185 "f(1, \"2\", false);");
175 } 186 }
176 NonIncrementalGC(CcTest::i_isolate()); 187 NonIncrementalGC(CcTest::i_isolate());
177 188
178 CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value()); 189 CHECK_EQ(1, env->Global()
179 CHECK(!GetJSFunction(env->Global(), "f")->IsOptimized()); 190 ->Get(env.local(), v8_str("count"))
191 .ToLocalChecked()
192 ->Int32Value(env.local())
193 .FromJust());
194 CHECK(!GetJSFunction(env.local(), "f")->IsOptimized());
180 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate())); 195 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate()));
181 196
182 // Test lazy deoptimization of a simple function with some arguments. Call the 197 // Test lazy deoptimization of a simple function with some arguments. Call the
183 // function after the deoptimization while it is still activated further down 198 // function after the deoptimization while it is still activated further down
184 // the stack. 199 // the stack.
185 { 200 {
186 AlwaysOptimizeAllowNativesSyntaxNoInlining options; 201 AlwaysOptimizeAllowNativesSyntaxNoInlining options;
187 CompileRun( 202 CompileRun(
188 "var count = 0;" 203 "var count = 0;"
189 "function g(x, y) { count++; %DeoptimizeFunction(f); f(false, 1, y); }" 204 "function g(x, y) { count++; %DeoptimizeFunction(f); f(false, 1, y); }"
190 "function f(x, y, z) { if (x) { g(x, y); } else { return y + z; } };" 205 "function f(x, y, z) { if (x) { g(x, y); } else { return y + z; } };"
191 "f(true, 1, \"2\");"); 206 "f(true, 1, \"2\");");
192 } 207 }
193 NonIncrementalGC(CcTest::i_isolate()); 208 NonIncrementalGC(CcTest::i_isolate());
194 209
195 CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value()); 210 CHECK_EQ(1, env->Global()
196 CHECK(!GetJSFunction(env->Global(), "f")->IsOptimized()); 211 ->Get(env.local(), v8_str("count"))
212 .ToLocalChecked()
213 ->Int32Value(env.local())
214 .FromJust());
215 CHECK(!GetJSFunction(env.local(), "f")->IsOptimized());
197 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate())); 216 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate()));
198 } 217 }
199 218
200 219
201 TEST(DeoptimizeSimpleNested) { 220 TEST(DeoptimizeSimpleNested) {
202 LocalContext env; 221 LocalContext env;
203 v8::HandleScope scope(env->GetIsolate()); 222 v8::HandleScope scope(env->GetIsolate());
204 223
205 // Test lazy deoptimization of a simple function. Have a nested function call 224 // Test lazy deoptimization of a simple function. Have a nested function call
206 // do the deoptimization. 225 // do the deoptimization.
207 { 226 {
208 AlwaysOptimizeAllowNativesSyntaxNoInlining options; 227 AlwaysOptimizeAllowNativesSyntaxNoInlining options;
209 CompileRun( 228 CompileRun(
210 "var count = 0;" 229 "var count = 0;"
211 "var result = 0;" 230 "var result = 0;"
212 "function h(x, y, z) { return x + y + z; }" 231 "function h(x, y, z) { return x + y + z; }"
213 "function g(z) { count++; %DeoptimizeFunction(f); return z;}" 232 "function g(z) { count++; %DeoptimizeFunction(f); return z;}"
214 "function f(x,y,z) { return h(x, y, g(z)); };" 233 "function f(x,y,z) { return h(x, y, g(z)); };"
215 "result = f(1, 2, 3);"); 234 "result = f(1, 2, 3);");
216 NonIncrementalGC(CcTest::i_isolate()); 235 NonIncrementalGC(CcTest::i_isolate());
217 236
218 CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value()); 237 CHECK_EQ(1, env->Global()
219 CHECK_EQ(6, env->Global()->Get(v8_str("result"))->Int32Value()); 238 ->Get(env.local(), v8_str("count"))
220 CHECK(!GetJSFunction(env->Global(), "f")->IsOptimized()); 239 .ToLocalChecked()
240 ->Int32Value(env.local())
241 .FromJust());
242 CHECK_EQ(6, env->Global()
243 ->Get(env.local(), v8_str("result"))
244 .ToLocalChecked()
245 ->Int32Value(env.local())
246 .FromJust());
247 CHECK(!GetJSFunction(env.local(), "f")->IsOptimized());
221 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate())); 248 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate()));
222 } 249 }
223 } 250 }
224 251
225 252
226 TEST(DeoptimizeRecursive) { 253 TEST(DeoptimizeRecursive) {
227 LocalContext env; 254 LocalContext env;
228 v8::HandleScope scope(env->GetIsolate()); 255 v8::HandleScope scope(env->GetIsolate());
229 256
230 { 257 {
231 // Test lazy deoptimization of a simple function called recursively. Call 258 // Test lazy deoptimization of a simple function called recursively. Call
232 // the function recursively a number of times before deoptimizing it. 259 // the function recursively a number of times before deoptimizing it.
233 AlwaysOptimizeAllowNativesSyntaxNoInlining options; 260 AlwaysOptimizeAllowNativesSyntaxNoInlining options;
234 CompileRun( 261 CompileRun(
235 "var count = 0;" 262 "var count = 0;"
236 "var calls = 0;" 263 "var calls = 0;"
237 "function g() { count++; %DeoptimizeFunction(f); }" 264 "function g() { count++; %DeoptimizeFunction(f); }"
238 "function f(x) { calls++; if (x > 0) { f(x - 1); } else { g(); } };" 265 "function f(x) { calls++; if (x > 0) { f(x - 1); } else { g(); } };"
239 "f(10);"); 266 "f(10);");
240 } 267 }
241 NonIncrementalGC(CcTest::i_isolate()); 268 NonIncrementalGC(CcTest::i_isolate());
242 269
243 CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value()); 270 CHECK_EQ(1, env->Global()
244 CHECK_EQ(11, env->Global()->Get(v8_str("calls"))->Int32Value()); 271 ->Get(env.local(), v8_str("count"))
272 .ToLocalChecked()
273 ->Int32Value(env.local())
274 .FromJust());
275 CHECK_EQ(11, env->Global()
276 ->Get(env.local(), v8_str("calls"))
277 .ToLocalChecked()
278 ->Int32Value(env.local())
279 .FromJust());
245 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate())); 280 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate()));
246 281
247 v8::Local<v8::Function> fun = v8::Local<v8::Function>::Cast( 282 v8::Local<v8::Function> fun = v8::Local<v8::Function>::Cast(
248 env->Global()->Get(v8::String::NewFromUtf8(CcTest::isolate(), "f"))); 283 env->Global()
284 ->Get(env.local(), v8_str(CcTest::isolate(), "f"))
285 .ToLocalChecked());
249 CHECK(!fun.IsEmpty()); 286 CHECK(!fun.IsEmpty());
250 } 287 }
251 288
252 289
253 TEST(DeoptimizeMultiple) { 290 TEST(DeoptimizeMultiple) {
254 LocalContext env; 291 LocalContext env;
255 v8::HandleScope scope(env->GetIsolate()); 292 v8::HandleScope scope(env->GetIsolate());
256 293
257 { 294 {
258 AlwaysOptimizeAllowNativesSyntaxNoInlining options; 295 AlwaysOptimizeAllowNativesSyntaxNoInlining options;
259 CompileRun( 296 CompileRun(
260 "var count = 0;" 297 "var count = 0;"
261 "var result = 0;" 298 "var result = 0;"
262 "function g() { count++;" 299 "function g() { count++;"
263 " %DeoptimizeFunction(f1);" 300 " %DeoptimizeFunction(f1);"
264 " %DeoptimizeFunction(f2);" 301 " %DeoptimizeFunction(f2);"
265 " %DeoptimizeFunction(f3);" 302 " %DeoptimizeFunction(f3);"
266 " %DeoptimizeFunction(f4);}" 303 " %DeoptimizeFunction(f4);}"
267 "function f4(x) { g(); };" 304 "function f4(x) { g(); };"
268 "function f3(x, y, z) { f4(); return x + y + z; };" 305 "function f3(x, y, z) { f4(); return x + y + z; };"
269 "function f2(x, y) { return x + f3(y + 1, y + 1, y + 1) + y; };" 306 "function f2(x, y) { return x + f3(y + 1, y + 1, y + 1) + y; };"
270 "function f1(x) { return f2(x + 1, x + 1) + x; };" 307 "function f1(x) { return f2(x + 1, x + 1) + x; };"
271 "result = f1(1);"); 308 "result = f1(1);");
272 } 309 }
273 NonIncrementalGC(CcTest::i_isolate()); 310 NonIncrementalGC(CcTest::i_isolate());
274 311
275 CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value()); 312 CHECK_EQ(1, env->Global()
276 CHECK_EQ(14, env->Global()->Get(v8_str("result"))->Int32Value()); 313 ->Get(env.local(), v8_str("count"))
314 .ToLocalChecked()
315 ->Int32Value(env.local())
316 .FromJust());
317 CHECK_EQ(14, env->Global()
318 ->Get(env.local(), v8_str("result"))
319 .ToLocalChecked()
320 ->Int32Value(env.local())
321 .FromJust());
277 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate())); 322 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate()));
278 } 323 }
279 324
280 325
281 TEST(DeoptimizeConstructor) { 326 TEST(DeoptimizeConstructor) {
282 LocalContext env; 327 LocalContext env;
283 v8::HandleScope scope(env->GetIsolate()); 328 v8::HandleScope scope(env->GetIsolate());
284 329
285 { 330 {
286 AlwaysOptimizeAllowNativesSyntaxNoInlining options; 331 AlwaysOptimizeAllowNativesSyntaxNoInlining options;
287 CompileRun( 332 CompileRun(
288 "var count = 0;" 333 "var count = 0;"
289 "function g() { count++;" 334 "function g() { count++;"
290 " %DeoptimizeFunction(f); }" 335 " %DeoptimizeFunction(f); }"
291 "function f() { g(); };" 336 "function f() { g(); };"
292 "result = new f() instanceof f;"); 337 "result = new f() instanceof f;");
293 } 338 }
294 NonIncrementalGC(CcTest::i_isolate()); 339 NonIncrementalGC(CcTest::i_isolate());
295 340
296 CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value()); 341 CHECK_EQ(1, env->Global()
297 CHECK(env->Global()->Get(v8_str("result"))->IsTrue()); 342 ->Get(env.local(), v8_str("count"))
343 .ToLocalChecked()
344 ->Int32Value(env.local())
345 .FromJust());
346 CHECK(env->Global()
347 ->Get(env.local(), v8_str("result"))
348 .ToLocalChecked()
349 ->IsTrue());
298 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate())); 350 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate()));
299 351
300 { 352 {
301 AlwaysOptimizeAllowNativesSyntaxNoInlining options; 353 AlwaysOptimizeAllowNativesSyntaxNoInlining options;
302 CompileRun( 354 CompileRun(
303 "var count = 0;" 355 "var count = 0;"
304 "var result = 0;" 356 "var result = 0;"
305 "function g() { count++;" 357 "function g() { count++;"
306 " %DeoptimizeFunction(f); }" 358 " %DeoptimizeFunction(f); }"
307 "function f(x, y) { this.x = x; g(); this.y = y; };" 359 "function f(x, y) { this.x = x; g(); this.y = y; };"
308 "result = new f(1, 2);" 360 "result = new f(1, 2);"
309 "result = result.x + result.y;"); 361 "result = result.x + result.y;");
310 } 362 }
311 NonIncrementalGC(CcTest::i_isolate()); 363 NonIncrementalGC(CcTest::i_isolate());
312 364
313 CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value()); 365 CHECK_EQ(1, env->Global()
314 CHECK_EQ(3, env->Global()->Get(v8_str("result"))->Int32Value()); 366 ->Get(env.local(), v8_str("count"))
367 .ToLocalChecked()
368 ->Int32Value(env.local())
369 .FromJust());
370 CHECK_EQ(3, env->Global()
371 ->Get(env.local(), v8_str("result"))
372 .ToLocalChecked()
373 ->Int32Value(env.local())
374 .FromJust());
315 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate())); 375 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate()));
316 } 376 }
317 377
318 378
319 TEST(DeoptimizeConstructorMultiple) { 379 TEST(DeoptimizeConstructorMultiple) {
320 LocalContext env; 380 LocalContext env;
321 v8::HandleScope scope(env->GetIsolate()); 381 v8::HandleScope scope(env->GetIsolate());
322 382
323 { 383 {
324 AlwaysOptimizeAllowNativesSyntaxNoInlining options; 384 AlwaysOptimizeAllowNativesSyntaxNoInlining options;
325 CompileRun( 385 CompileRun(
326 "var count = 0;" 386 "var count = 0;"
327 "var result = 0;" 387 "var result = 0;"
328 "function g() { count++;" 388 "function g() { count++;"
329 " %DeoptimizeFunction(f1);" 389 " %DeoptimizeFunction(f1);"
330 " %DeoptimizeFunction(f2);" 390 " %DeoptimizeFunction(f2);"
331 " %DeoptimizeFunction(f3);" 391 " %DeoptimizeFunction(f3);"
332 " %DeoptimizeFunction(f4);}" 392 " %DeoptimizeFunction(f4);}"
333 "function f4(x) { this.result = x; g(); };" 393 "function f4(x) { this.result = x; g(); };"
334 "function f3(x, y, z) { this.result = new f4(x + y + z).result; };" 394 "function f3(x, y, z) { this.result = new f4(x + y + z).result; };"
335 "function f2(x, y) {" 395 "function f2(x, y) {"
336 " this.result = x + new f3(y + 1, y + 1, y + 1).result + y; };" 396 " this.result = x + new f3(y + 1, y + 1, y + 1).result + y; };"
337 "function f1(x) { this.result = new f2(x + 1, x + 1).result + x; };" 397 "function f1(x) { this.result = new f2(x + 1, x + 1).result + x; };"
338 "result = new f1(1).result;"); 398 "result = new f1(1).result;");
339 } 399 }
340 NonIncrementalGC(CcTest::i_isolate()); 400 NonIncrementalGC(CcTest::i_isolate());
341 401
342 CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value()); 402 CHECK_EQ(1, env->Global()
343 CHECK_EQ(14, env->Global()->Get(v8_str("result"))->Int32Value()); 403 ->Get(env.local(), v8_str("count"))
404 .ToLocalChecked()
405 ->Int32Value(env.local())
406 .FromJust());
407 CHECK_EQ(14, env->Global()
408 ->Get(env.local(), v8_str("result"))
409 .ToLocalChecked()
410 ->Int32Value(env.local())
411 .FromJust());
344 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate())); 412 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(CcTest::i_isolate()));
345 } 413 }
346 414
347 415
348 UNINITIALIZED_TEST(DeoptimizeBinaryOperationADDString) { 416 UNINITIALIZED_TEST(DeoptimizeBinaryOperationADDString) {
349 i::FLAG_concurrent_recompilation = false; 417 i::FLAG_concurrent_recompilation = false;
350 AllowNativesSyntaxNoInlining options; 418 AllowNativesSyntaxNoInlining options;
351 v8::Isolate::CreateParams create_params; 419 v8::Isolate::CreateParams create_params;
352 create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); 420 create_params.array_buffer_allocator = CcTest::array_buffer_allocator();
353 v8::Isolate* isolate = v8::Isolate::New(create_params); 421 v8::Isolate* isolate = v8::Isolate::New(create_params);
(...skipping 21 matching lines...) Expand all
375 CompileRun( 443 CompileRun(
376 "for (var i = 0; i < 5; i++) {" 444 "for (var i = 0; i < 5; i++) {"
377 " f('a+', new X());" 445 " f('a+', new X());"
378 "};"); 446 "};");
379 447
380 // Compile an optimized version of f. 448 // Compile an optimized version of f.
381 i::FLAG_always_opt = true; 449 i::FLAG_always_opt = true;
382 CompileRun(f_source); 450 CompileRun(f_source);
383 CompileRun("f('a+', new X());"); 451 CompileRun("f('a+', new X());");
384 CHECK(!i_isolate->use_crankshaft() || 452 CHECK(!i_isolate->use_crankshaft() ||
385 GetJSFunction(env->Global(), "f")->IsOptimized()); 453 GetJSFunction(env.local(), "f")->IsOptimized());
386 454
387 // Call f and force deoptimization while processing the binary operation. 455 // Call f and force deoptimization while processing the binary operation.
388 CompileRun( 456 CompileRun(
389 "deopt = true;" 457 "deopt = true;"
390 "var result = f('a+', new X());"); 458 "var result = f('a+', new X());");
391 } 459 }
392 NonIncrementalGC(i_isolate); 460 NonIncrementalGC(i_isolate);
393 461
394 CHECK(!GetJSFunction(env->Global(), "f")->IsOptimized()); 462 CHECK(!GetJSFunction(env.local(), "f")->IsOptimized());
395 CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value()); 463 CHECK_EQ(1, env->Global()
396 v8::Handle<v8::Value> result = env->Global()->Get(v8_str("result")); 464 ->Get(env.local(), v8_str("count"))
465 .ToLocalChecked()
466 ->Int32Value(env.local())
467 .FromJust());
468 v8::Local<v8::Value> result =
469 env->Global()->Get(env.local(), v8_str("result")).ToLocalChecked();
397 CHECK(result->IsString()); 470 CHECK(result->IsString());
398 v8::String::Utf8Value utf8(result); 471 v8::String::Utf8Value utf8(result);
399 CHECK_EQ(0, strcmp("a+an X", *utf8)); 472 CHECK_EQ(0, strcmp("a+an X", *utf8));
400 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(i_isolate)); 473 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(i_isolate));
401 } 474 }
402 isolate->Exit(); 475 isolate->Exit();
403 isolate->Dispose(); 476 isolate->Dispose();
404 } 477 }
405 478
406 479
(...skipping 25 matching lines...) Expand all
432 CompileRun(f_source); 505 CompileRun(f_source);
433 CompileRun("for (var i = 0; i < 5; i++) {" 506 CompileRun("for (var i = 0; i < 5; i++) {"
434 " f(8, new X());" 507 " f(8, new X());"
435 "};"); 508 "};");
436 509
437 // Compile an optimized version of f. 510 // Compile an optimized version of f.
438 i::FLAG_always_opt = true; 511 i::FLAG_always_opt = true;
439 CompileRun(f_source); 512 CompileRun(f_source);
440 CompileRun("f(7, new X());"); 513 CompileRun("f(7, new X());");
441 CHECK(!i_isolate->use_crankshaft() || 514 CHECK(!i_isolate->use_crankshaft() ||
442 GetJSFunction((*env)->Global(), "f")->IsOptimized()); 515 GetJSFunction((*env).local(), "f")->IsOptimized());
443 516
444 // Call f and force deoptimization while processing the binary operation. 517 // Call f and force deoptimization while processing the binary operation.
445 CompileRun("deopt = true;" 518 CompileRun("deopt = true;"
446 "var result = f(7, new X());"); 519 "var result = f(7, new X());");
447 NonIncrementalGC(i_isolate); 520 NonIncrementalGC(i_isolate);
448 CHECK(!GetJSFunction((*env)->Global(), "f")->IsOptimized()); 521 CHECK(!GetJSFunction((*env).local(), "f")->IsOptimized());
449 } 522 }
450 523
451 524
452 UNINITIALIZED_TEST(DeoptimizeBinaryOperationADD) { 525 UNINITIALIZED_TEST(DeoptimizeBinaryOperationADD) {
453 i::FLAG_concurrent_recompilation = false; 526 i::FLAG_concurrent_recompilation = false;
454 v8::Isolate::CreateParams create_params; 527 v8::Isolate::CreateParams create_params;
455 create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); 528 create_params.array_buffer_allocator = CcTest::array_buffer_allocator();
456 v8::Isolate* isolate = v8::Isolate::New(create_params); 529 v8::Isolate* isolate = v8::Isolate::New(create_params);
457 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); 530 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
458 isolate->Enter(); 531 isolate->Enter();
459 { 532 {
460 LocalContext env(isolate); 533 LocalContext env(isolate);
461 v8::HandleScope scope(env->GetIsolate()); 534 v8::HandleScope scope(env->GetIsolate());
462 535
463 TestDeoptimizeBinaryOpHelper(&env, "+"); 536 TestDeoptimizeBinaryOpHelper(&env, "+");
464 537
465 CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value()); 538 CHECK_EQ(1, env->Global()
466 CHECK_EQ(15, env->Global()->Get(v8_str("result"))->Int32Value()); 539 ->Get(env.local(), v8_str("count"))
540 .ToLocalChecked()
541 ->Int32Value(env.local())
542 .FromJust());
543 CHECK_EQ(15, env->Global()
544 ->Get(env.local(), v8_str("result"))
545 .ToLocalChecked()
546 ->Int32Value(env.local())
547 .FromJust());
467 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(i_isolate)); 548 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(i_isolate));
468 } 549 }
469 isolate->Exit(); 550 isolate->Exit();
470 isolate->Dispose(); 551 isolate->Dispose();
471 } 552 }
472 553
473 554
474 UNINITIALIZED_TEST(DeoptimizeBinaryOperationSUB) { 555 UNINITIALIZED_TEST(DeoptimizeBinaryOperationSUB) {
475 i::FLAG_concurrent_recompilation = false; 556 i::FLAG_concurrent_recompilation = false;
476 v8::Isolate::CreateParams create_params; 557 v8::Isolate::CreateParams create_params;
477 create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); 558 create_params.array_buffer_allocator = CcTest::array_buffer_allocator();
478 v8::Isolate* isolate = v8::Isolate::New(create_params); 559 v8::Isolate* isolate = v8::Isolate::New(create_params);
479 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); 560 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
480 isolate->Enter(); 561 isolate->Enter();
481 { 562 {
482 LocalContext env(isolate); 563 LocalContext env(isolate);
483 v8::HandleScope scope(env->GetIsolate()); 564 v8::HandleScope scope(env->GetIsolate());
484 565
485 TestDeoptimizeBinaryOpHelper(&env, "-"); 566 TestDeoptimizeBinaryOpHelper(&env, "-");
486 567
487 CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value()); 568 CHECK_EQ(1, env->Global()
488 CHECK_EQ(-1, env->Global()->Get(v8_str("result"))->Int32Value()); 569 ->Get(env.local(), v8_str("count"))
570 .ToLocalChecked()
571 ->Int32Value(env.local())
572 .FromJust());
573 CHECK_EQ(-1, env->Global()
574 ->Get(env.local(), v8_str("result"))
575 .ToLocalChecked()
576 ->Int32Value(env.local())
577 .FromJust());
489 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(i_isolate)); 578 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(i_isolate));
490 } 579 }
491 isolate->Exit(); 580 isolate->Exit();
492 isolate->Dispose(); 581 isolate->Dispose();
493 } 582 }
494 583
495 584
496 UNINITIALIZED_TEST(DeoptimizeBinaryOperationMUL) { 585 UNINITIALIZED_TEST(DeoptimizeBinaryOperationMUL) {
497 i::FLAG_concurrent_recompilation = false; 586 i::FLAG_concurrent_recompilation = false;
498 v8::Isolate::CreateParams create_params; 587 v8::Isolate::CreateParams create_params;
499 create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); 588 create_params.array_buffer_allocator = CcTest::array_buffer_allocator();
500 v8::Isolate* isolate = v8::Isolate::New(create_params); 589 v8::Isolate* isolate = v8::Isolate::New(create_params);
501 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); 590 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
502 isolate->Enter(); 591 isolate->Enter();
503 { 592 {
504 LocalContext env(isolate); 593 LocalContext env(isolate);
505 v8::HandleScope scope(env->GetIsolate()); 594 v8::HandleScope scope(env->GetIsolate());
506 595
507 TestDeoptimizeBinaryOpHelper(&env, "*"); 596 TestDeoptimizeBinaryOpHelper(&env, "*");
508 597
509 CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value()); 598 CHECK_EQ(1, env->Global()
510 CHECK_EQ(56, env->Global()->Get(v8_str("result"))->Int32Value()); 599 ->Get(env.local(), v8_str("count"))
600 .ToLocalChecked()
601 ->Int32Value(env.local())
602 .FromJust());
603 CHECK_EQ(56, env->Global()
604 ->Get(env.local(), v8_str("result"))
605 .ToLocalChecked()
606 ->Int32Value(env.local())
607 .FromJust());
511 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(i_isolate)); 608 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(i_isolate));
512 } 609 }
513 isolate->Exit(); 610 isolate->Exit();
514 isolate->Dispose(); 611 isolate->Dispose();
515 } 612 }
516 613
517 614
518 UNINITIALIZED_TEST(DeoptimizeBinaryOperationDIV) { 615 UNINITIALIZED_TEST(DeoptimizeBinaryOperationDIV) {
519 i::FLAG_concurrent_recompilation = false; 616 i::FLAG_concurrent_recompilation = false;
520 v8::Isolate::CreateParams create_params; 617 v8::Isolate::CreateParams create_params;
521 create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); 618 create_params.array_buffer_allocator = CcTest::array_buffer_allocator();
522 v8::Isolate* isolate = v8::Isolate::New(create_params); 619 v8::Isolate* isolate = v8::Isolate::New(create_params);
523 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); 620 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
524 isolate->Enter(); 621 isolate->Enter();
525 { 622 {
526 LocalContext env(isolate); 623 LocalContext env(isolate);
527 v8::HandleScope scope(env->GetIsolate()); 624 v8::HandleScope scope(env->GetIsolate());
528 625
529 TestDeoptimizeBinaryOpHelper(&env, "/"); 626 TestDeoptimizeBinaryOpHelper(&env, "/");
530 627
531 CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value()); 628 CHECK_EQ(1, env->Global()
532 CHECK_EQ(0, env->Global()->Get(v8_str("result"))->Int32Value()); 629 ->Get(env.local(), v8_str("count"))
630 .ToLocalChecked()
631 ->Int32Value(env.local())
632 .FromJust());
633 CHECK_EQ(0, env->Global()
634 ->Get(env.local(), v8_str("result"))
635 .ToLocalChecked()
636 ->Int32Value(env.local())
637 .FromJust());
533 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(i_isolate)); 638 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(i_isolate));
534 } 639 }
535 isolate->Exit(); 640 isolate->Exit();
536 isolate->Dispose(); 641 isolate->Dispose();
537 } 642 }
538 643
539 644
540 UNINITIALIZED_TEST(DeoptimizeBinaryOperationMOD) { 645 UNINITIALIZED_TEST(DeoptimizeBinaryOperationMOD) {
541 i::FLAG_concurrent_recompilation = false; 646 i::FLAG_concurrent_recompilation = false;
542 v8::Isolate::CreateParams create_params; 647 v8::Isolate::CreateParams create_params;
543 create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); 648 create_params.array_buffer_allocator = CcTest::array_buffer_allocator();
544 v8::Isolate* isolate = v8::Isolate::New(create_params); 649 v8::Isolate* isolate = v8::Isolate::New(create_params);
545 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); 650 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
546 isolate->Enter(); 651 isolate->Enter();
547 { 652 {
548 LocalContext env(isolate); 653 LocalContext env(isolate);
549 v8::HandleScope scope(env->GetIsolate()); 654 v8::HandleScope scope(env->GetIsolate());
550 655
551 TestDeoptimizeBinaryOpHelper(&env, "%"); 656 TestDeoptimizeBinaryOpHelper(&env, "%");
552 657
553 CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value()); 658 CHECK_EQ(1, env->Global()
554 CHECK_EQ(7, env->Global()->Get(v8_str("result"))->Int32Value()); 659 ->Get(env.local(), v8_str("count"))
660 .ToLocalChecked()
661 ->Int32Value(env.local())
662 .FromJust());
663 CHECK_EQ(7, env->Global()
664 ->Get(env.local(), v8_str("result"))
665 .ToLocalChecked()
666 ->Int32Value(env.local())
667 .FromJust());
555 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(i_isolate)); 668 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(i_isolate));
556 } 669 }
557 isolate->Exit(); 670 isolate->Exit();
558 isolate->Dispose(); 671 isolate->Dispose();
559 } 672 }
560 673
561 674
562 UNINITIALIZED_TEST(DeoptimizeCompare) { 675 UNINITIALIZED_TEST(DeoptimizeCompare) {
563 i::FLAG_concurrent_recompilation = false; 676 i::FLAG_concurrent_recompilation = false;
564 v8::Isolate::CreateParams create_params; 677 v8::Isolate::CreateParams create_params;
(...skipping 24 matching lines...) Expand all
589 CompileRun( 702 CompileRun(
590 "for (var i = 0; i < 5; i++) {" 703 "for (var i = 0; i < 5; i++) {"
591 " f('a', new X());" 704 " f('a', new X());"
592 "};"); 705 "};");
593 706
594 // Compile an optimized version of f. 707 // Compile an optimized version of f.
595 i::FLAG_always_opt = true; 708 i::FLAG_always_opt = true;
596 CompileRun(f_source); 709 CompileRun(f_source);
597 CompileRun("f('a', new X());"); 710 CompileRun("f('a', new X());");
598 CHECK(!i_isolate->use_crankshaft() || 711 CHECK(!i_isolate->use_crankshaft() ||
599 GetJSFunction(env->Global(), "f")->IsOptimized()); 712 GetJSFunction(env.local(), "f")->IsOptimized());
600 713
601 // Call f and force deoptimization while processing the comparison. 714 // Call f and force deoptimization while processing the comparison.
602 CompileRun( 715 CompileRun(
603 "deopt = true;" 716 "deopt = true;"
604 "var result = f('a', new X());"); 717 "var result = f('a', new X());");
605 } 718 }
606 NonIncrementalGC(i_isolate); 719 NonIncrementalGC(i_isolate);
607 720
608 CHECK(!GetJSFunction(env->Global(), "f")->IsOptimized()); 721 CHECK(!GetJSFunction(env.local(), "f")->IsOptimized());
609 CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value()); 722 CHECK_EQ(1, env->Global()
610 CHECK_EQ(true, env->Global()->Get(v8_str("result"))->BooleanValue()); 723 ->Get(env.local(), v8_str("count"))
724 .ToLocalChecked()
725 ->Int32Value(env.local())
726 .FromJust());
727 CHECK_EQ(true, env->Global()
728 ->Get(env.local(), v8_str("result"))
729 .ToLocalChecked()
730 ->BooleanValue(env.local())
731 .FromJust());
611 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(i_isolate)); 732 CHECK_EQ(0, Deoptimizer::GetDeoptimizedCodeCount(i_isolate));
612 } 733 }
613 isolate->Exit(); 734 isolate->Exit();
614 isolate->Dispose(); 735 isolate->Dispose();
615 } 736 }
616 737
617 738
618 UNINITIALIZED_TEST(DeoptimizeLoadICStoreIC) { 739 UNINITIALIZED_TEST(DeoptimizeLoadICStoreIC) {
619 i::FLAG_concurrent_recompilation = false; 740 i::FLAG_concurrent_recompilation = false;
620 v8::Isolate::CreateParams create_params; 741 v8::Isolate::CreateParams create_params;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
672 i::FLAG_always_opt = true; 793 i::FLAG_always_opt = true;
673 CompileRun(f1_source); 794 CompileRun(f1_source);
674 CompileRun(g1_source); 795 CompileRun(g1_source);
675 CompileRun(f2_source); 796 CompileRun(f2_source);
676 CompileRun(g2_source); 797 CompileRun(g2_source);
677 CompileRun("f1(new X());"); 798 CompileRun("f1(new X());");
678 CompileRun("g1(new X());"); 799 CompileRun("g1(new X());");
679 CompileRun("f2(new X(), 'z');"); 800 CompileRun("f2(new X(), 'z');");
680 CompileRun("g2(new X(), 'z');"); 801 CompileRun("g2(new X(), 'z');");
681 if (i_isolate->use_crankshaft()) { 802 if (i_isolate->use_crankshaft()) {
682 CHECK(GetJSFunction(env->Global(), "f1")->IsOptimized()); 803 CHECK(GetJSFunction(env.local(), "f1")->IsOptimized());
683 CHECK(GetJSFunction(env->Global(), "g1")->IsOptimized()); 804 CHECK(GetJSFunction(env.local(), "g1")->IsOptimized());
684 CHECK(GetJSFunction(env->Global(), "f2")->IsOptimized()); 805 CHECK(GetJSFunction(env.local(), "f2")->IsOptimized());
685 CHECK(GetJSFunction(env->Global(), "g2")->IsOptimized()); 806 CHECK(GetJSFunction(env.local(), "g2")->IsOptimized());
686 } 807 }
687 808
688 // Call functions and force deoptimization while processing the ics. 809 // Call functions and force deoptimization while processing the ics.
689 CompileRun( 810 CompileRun(
690 "deopt = true;" 811 "deopt = true;"
691 "var result = f1(new X());" 812 "var result = f1(new X());"
692 "g1(new X());" 813 "g1(new X());"
693 "f2(new X(), 'z');" 814 "f2(new X(), 'z');"
694 "g2(new X(), 'z');"); 815 "g2(new X(), 'z');");
695 } 816 }
696 NonIncrementalGC(i_isolate); 817 NonIncrementalGC(i_isolate);
697 818
698 CHECK(!GetJSFunction(env->Global(), "f1")->IsOptimized()); 819 CHECK(!GetJSFunction(env.local(), "f1")->IsOptimized());
699 CHECK(!GetJSFunction(env->Global(), "g1")->IsOptimized()); 820 CHECK(!GetJSFunction(env.local(), "g1")->IsOptimized());
700 CHECK(!GetJSFunction(env->Global(), "f2")->IsOptimized()); 821 CHECK(!GetJSFunction(env.local(), "f2")->IsOptimized());
701 CHECK(!GetJSFunction(env->Global(), "g2")->IsOptimized()); 822 CHECK(!GetJSFunction(env.local(), "g2")->IsOptimized());
702 CHECK_EQ(4, env->Global()->Get(v8_str("count"))->Int32Value()); 823 CHECK_EQ(4, env->Global()
703 CHECK_EQ(13, env->Global()->Get(v8_str("result"))->Int32Value()); 824 ->Get(env.local(), v8_str("count"))
825 .ToLocalChecked()
826 ->Int32Value(env.local())
827 .FromJust());
828 CHECK_EQ(13, env->Global()
829 ->Get(env.local(), v8_str("result"))
830 .ToLocalChecked()
831 ->Int32Value(env.local())
832 .FromJust());
704 } 833 }
705 isolate->Exit(); 834 isolate->Exit();
706 isolate->Dispose(); 835 isolate->Dispose();
707 } 836 }
708 837
709 838
710 UNINITIALIZED_TEST(DeoptimizeLoadICStoreICNested) { 839 UNINITIALIZED_TEST(DeoptimizeLoadICStoreICNested) {
711 i::FLAG_concurrent_recompilation = false; 840 i::FLAG_concurrent_recompilation = false;
712 v8::Isolate::CreateParams create_params; 841 v8::Isolate::CreateParams create_params;
713 create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); 842 create_params.array_buffer_allocator = CcTest::array_buffer_allocator();
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
768 i::FLAG_always_opt = true; 897 i::FLAG_always_opt = true;
769 CompileRun(f1_source); 898 CompileRun(f1_source);
770 CompileRun(g1_source); 899 CompileRun(g1_source);
771 CompileRun(f2_source); 900 CompileRun(f2_source);
772 CompileRun(g2_source); 901 CompileRun(g2_source);
773 CompileRun("f1(new X());"); 902 CompileRun("f1(new X());");
774 CompileRun("g1(new X());"); 903 CompileRun("g1(new X());");
775 CompileRun("f2(new X(), 'z');"); 904 CompileRun("f2(new X(), 'z');");
776 CompileRun("g2(new X(), 'z');"); 905 CompileRun("g2(new X(), 'z');");
777 if (i_isolate->use_crankshaft()) { 906 if (i_isolate->use_crankshaft()) {
778 CHECK(GetJSFunction(env->Global(), "f1")->IsOptimized()); 907 CHECK(GetJSFunction(env.local(), "f1")->IsOptimized());
779 CHECK(GetJSFunction(env->Global(), "g1")->IsOptimized()); 908 CHECK(GetJSFunction(env.local(), "g1")->IsOptimized());
780 CHECK(GetJSFunction(env->Global(), "f2")->IsOptimized()); 909 CHECK(GetJSFunction(env.local(), "f2")->IsOptimized());
781 CHECK(GetJSFunction(env->Global(), "g2")->IsOptimized()); 910 CHECK(GetJSFunction(env.local(), "g2")->IsOptimized());
782 } 911 }
783 912
784 // Call functions and force deoptimization while processing the ics. 913 // Call functions and force deoptimization while processing the ics.
785 CompileRun( 914 CompileRun(
786 "deopt = true;" 915 "deopt = true;"
787 "var result = f1(new X());"); 916 "var result = f1(new X());");
788 } 917 }
789 NonIncrementalGC(i_isolate); 918 NonIncrementalGC(i_isolate);
790 919
791 CHECK(!GetJSFunction(env->Global(), "f1")->IsOptimized()); 920 CHECK(!GetJSFunction(env.local(), "f1")->IsOptimized());
792 CHECK(!GetJSFunction(env->Global(), "g1")->IsOptimized()); 921 CHECK(!GetJSFunction(env.local(), "g1")->IsOptimized());
793 CHECK(!GetJSFunction(env->Global(), "f2")->IsOptimized()); 922 CHECK(!GetJSFunction(env.local(), "f2")->IsOptimized());
794 CHECK(!GetJSFunction(env->Global(), "g2")->IsOptimized()); 923 CHECK(!GetJSFunction(env.local(), "g2")->IsOptimized());
795 CHECK_EQ(1, env->Global()->Get(v8_str("count"))->Int32Value()); 924 CHECK_EQ(1, env->Global()
796 CHECK_EQ(13, env->Global()->Get(v8_str("result"))->Int32Value()); 925 ->Get(env.local(), v8_str("count"))
926 .ToLocalChecked()
927 ->Int32Value(env.local())
928 .FromJust());
929 CHECK_EQ(13, env->Global()
930 ->Get(env.local(), v8_str("result"))
931 .ToLocalChecked()
932 ->Int32Value(env.local())
933 .FromJust());
797 } 934 }
798 isolate->Exit(); 935 isolate->Exit();
799 isolate->Dispose(); 936 isolate->Dispose();
800 } 937 }
OLDNEW
« no previous file with comments | « test/cctest/test-compiler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698