blob: 062032216295d132df24e6e91a7bc03463414640 [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// 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
3// found in the LICENSE file.
4
5#include "src/v8.h"
6
7#include "src/interpreter/bytecode-array-builder.h"
8#include "src/interpreter/bytecode-register-allocator.h"
9#include "test/unittests/test-utils.h"
10
11namespace v8 {
12namespace internal {
13namespace interpreter {
14
15class BytecodeRegisterAllocatorTest : public TestWithIsolateAndZone {
16 public:
17 BytecodeRegisterAllocatorTest() {}
18 ~BytecodeRegisterAllocatorTest() override {}
19};
20
21
22TEST_F(BytecodeRegisterAllocatorTest, TemporariesRecycled) {
23 BytecodeArrayBuilder builder(isolate(), zone());
24 builder.set_parameter_count(0);
25 builder.set_locals_count(0);
26 builder.set_context_count(0);
27
28 int first;
29 {
30 BytecodeRegisterAllocator temporaries(&builder);
31 first = temporaries.NewRegister().index();
32 temporaries.NewRegister();
33 temporaries.NewRegister();
34 temporaries.NewRegister();
35 }
36
37 int second;
38 {
39 BytecodeRegisterAllocator temporaries(&builder);
40 second = temporaries.NewRegister().index();
41 }
42
43 CHECK_EQ(first, second);
44}
45
46
47TEST_F(BytecodeRegisterAllocatorTest, ConsecutiveRegisters) {
48 BytecodeArrayBuilder builder(isolate(), zone());
49 builder.set_parameter_count(0);
50 builder.set_locals_count(0);
51 builder.set_context_count(0);
52
53 BytecodeRegisterAllocator temporaries(&builder);
54 temporaries.PrepareForConsecutiveAllocations(4);
55 Register reg0 = temporaries.NextConsecutiveRegister();
56 Register other = temporaries.NewRegister();
57 Register reg1 = temporaries.NextConsecutiveRegister();
58 Register reg2 = temporaries.NextConsecutiveRegister();
59 Register reg3 = temporaries.NextConsecutiveRegister();
60 USE(other);
61
62 CHECK(Register::AreContiguous(reg0, reg1, reg2, reg3));
63}
64
65} // namespace interpreter
66} // namespace internal
67} // namespace v8