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

Side by Side Diff: test/unittests/interpreter/bytecode-array-builder-unittest.cc

Issue 1587033002: [Interpreter] Ensure we always have an outer register allocation scope. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@int_mythri
Patch Set: Similarity 20 Created 4 years, 11 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
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/interpreter/bytecode-array-builder.h" 7 #include "src/interpreter/bytecode-array-builder.h"
8 #include "src/interpreter/bytecode-array-iterator.h" 8 #include "src/interpreter/bytecode-array-iterator.h"
9 #include "src/interpreter/bytecode-register-allocator.h"
9 #include "test/unittests/test-utils.h" 10 #include "test/unittests/test-utils.h"
10 11
11 namespace v8 { 12 namespace v8 {
12 namespace internal { 13 namespace internal {
13 namespace interpreter { 14 namespace interpreter {
14 15
15 class BytecodeArrayBuilderTest : public TestWithIsolateAndZone { 16 class BytecodeArrayBuilderTest : public TestWithIsolateAndZone {
16 public: 17 public:
17 BytecodeArrayBuilderTest() {} 18 BytecodeArrayBuilderTest() {}
18 ~BytecodeArrayBuilderTest() override {} 19 ~BytecodeArrayBuilderTest() override {}
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 311
311 TEST_F(BytecodeArrayBuilderTest, FrameSizesLookGood) { 312 TEST_F(BytecodeArrayBuilderTest, FrameSizesLookGood) {
312 for (int locals = 0; locals < 5; locals++) { 313 for (int locals = 0; locals < 5; locals++) {
313 for (int contexts = 0; contexts < 4; contexts++) { 314 for (int contexts = 0; contexts < 4; contexts++) {
314 for (int temps = 0; temps < 3; temps++) { 315 for (int temps = 0; temps < 3; temps++) {
315 BytecodeArrayBuilder builder(isolate(), zone()); 316 BytecodeArrayBuilder builder(isolate(), zone());
316 builder.set_parameter_count(0); 317 builder.set_parameter_count(0);
317 builder.set_locals_count(locals); 318 builder.set_locals_count(locals);
318 builder.set_context_count(contexts); 319 builder.set_context_count(contexts);
319 320
320 TemporaryRegisterScope temporaries(&builder); 321 BytecodeRegisterAllocator temporaries(&builder);
321 for (int i = 0; i < temps; i++) { 322 for (int i = 0; i < temps; i++) {
322 builder.StoreAccumulatorInRegister(temporaries.NewRegister()); 323 builder.StoreAccumulatorInRegister(temporaries.NewRegister());
323 } 324 }
324 builder.Return(); 325 builder.Return();
325 326
326 Handle<BytecodeArray> the_array = builder.ToBytecodeArray(); 327 Handle<BytecodeArray> the_array = builder.ToBytecodeArray();
327 int total_registers = locals + contexts + temps; 328 int total_registers = locals + contexts + temps;
328 CHECK_EQ(the_array->frame_size(), total_registers * kPointerSize); 329 CHECK_EQ(the_array->frame_size(), total_registers * kPointerSize);
329 } 330 }
330 } 331 }
331 } 332 }
332 } 333 }
333 334
334 335
335 TEST_F(BytecodeArrayBuilderTest, TemporariesRecycled) {
336 BytecodeArrayBuilder builder(isolate(), zone());
337 builder.set_parameter_count(0);
338 builder.set_locals_count(0);
339 builder.set_context_count(0);
340 builder.Return();
341
342 int first;
343 {
344 TemporaryRegisterScope temporaries(&builder);
345 first = temporaries.NewRegister().index();
346 temporaries.NewRegister();
347 temporaries.NewRegister();
348 temporaries.NewRegister();
349 }
350
351 int second;
352 {
353 TemporaryRegisterScope temporaries(&builder);
354 second = temporaries.NewRegister().index();
355 }
356
357 CHECK_EQ(first, second);
358 }
359
360
361 TEST_F(BytecodeArrayBuilderTest, RegisterValues) { 336 TEST_F(BytecodeArrayBuilderTest, RegisterValues) {
362 int index = 1; 337 int index = 1;
363 uint8_t operand = static_cast<uint8_t>(-index); 338 uint8_t operand = static_cast<uint8_t>(-index);
364 339
365 Register the_register(index); 340 Register the_register(index);
366 CHECK_EQ(the_register.index(), index); 341 CHECK_EQ(the_register.index(), index);
367 342
368 int actual_operand = the_register.ToOperand(); 343 int actual_operand = the_register.ToOperand();
369 CHECK_EQ(actual_operand, operand); 344 CHECK_EQ(actual_operand, operand);
370 345
(...skipping 13 matching lines...) Expand all
384 CHECK_EQ(param9.index() - param0.index(), 9); 359 CHECK_EQ(param9.index() - param0.index(), 9);
385 } 360 }
386 361
387 362
388 TEST_F(BytecodeArrayBuilderTest, RegisterType) { 363 TEST_F(BytecodeArrayBuilderTest, RegisterType) {
389 BytecodeArrayBuilder builder(isolate(), zone()); 364 BytecodeArrayBuilder builder(isolate(), zone());
390 builder.set_parameter_count(10); 365 builder.set_parameter_count(10);
391 builder.set_locals_count(3); 366 builder.set_locals_count(3);
392 builder.set_context_count(0); 367 builder.set_context_count(0);
393 368
394 TemporaryRegisterScope temporary_register_scope(&builder); 369 BytecodeRegisterAllocator register_allocator(&builder);
395 Register temp0 = temporary_register_scope.NewRegister(); 370 Register temp0 = register_allocator.NewRegister();
396 Register param0(builder.Parameter(0)); 371 Register param0(builder.Parameter(0));
397 Register param9(builder.Parameter(9)); 372 Register param9(builder.Parameter(9));
398 Register temp1 = temporary_register_scope.NewRegister(); 373 Register temp1 = register_allocator.NewRegister();
399 Register reg0(0); 374 Register reg0(0);
400 Register reg1(1); 375 Register reg1(1);
401 Register reg2(2); 376 Register reg2(2);
402 Register temp2 = temporary_register_scope.NewRegister(); 377 Register temp2 = register_allocator.NewRegister();
403 CHECK_EQ(builder.RegisterIsParameterOrLocal(temp0), false); 378 CHECK_EQ(builder.RegisterIsParameterOrLocal(temp0), false);
404 CHECK_EQ(builder.RegisterIsParameterOrLocal(temp1), false); 379 CHECK_EQ(builder.RegisterIsParameterOrLocal(temp1), false);
405 CHECK_EQ(builder.RegisterIsParameterOrLocal(temp2), false); 380 CHECK_EQ(builder.RegisterIsParameterOrLocal(temp2), false);
406 CHECK_EQ(builder.RegisterIsParameterOrLocal(param0), true); 381 CHECK_EQ(builder.RegisterIsParameterOrLocal(param0), true);
407 CHECK_EQ(builder.RegisterIsParameterOrLocal(param9), true); 382 CHECK_EQ(builder.RegisterIsParameterOrLocal(param9), true);
408 CHECK_EQ(builder.RegisterIsParameterOrLocal(reg0), true); 383 CHECK_EQ(builder.RegisterIsParameterOrLocal(reg0), true);
409 CHECK_EQ(builder.RegisterIsParameterOrLocal(reg1), true); 384 CHECK_EQ(builder.RegisterIsParameterOrLocal(reg1), true);
410 CHECK_EQ(builder.RegisterIsParameterOrLocal(reg2), true); 385 CHECK_EQ(builder.RegisterIsParameterOrLocal(reg2), true);
411 } 386 }
412 387
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
708 } 683 }
709 CHECK_EQ(iterator.current_bytecode(), Bytecode::kReturn); 684 CHECK_EQ(iterator.current_bytecode(), Bytecode::kReturn);
710 iterator.Advance(); 685 iterator.Advance();
711 CHECK(iterator.done()); 686 CHECK(iterator.done());
712 } 687 }
713 688
714 689
715 } // namespace interpreter 690 } // namespace interpreter
716 } // namespace internal 691 } // namespace internal
717 } // namespace v8 692 } // namespace v8
OLDNEW
« no previous file with comments | « test/mjsunit/mjsunit.status ('k') | test/unittests/interpreter/bytecode-register-allocator-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698