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

Side by Side Diff: src/compiler/instruction-selector.h

Issue 889843003: [turbofan] Don't allocate UnallocatedOperands in Zone memory during instruction selection (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « src/compiler/instruction.cc ('k') | src/compiler/instruction-selector.cc » ('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 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 #ifndef V8_COMPILER_INSTRUCTION_SELECTOR_H_ 5 #ifndef V8_COMPILER_INSTRUCTION_SELECTOR_H_
6 #define V8_COMPILER_INSTRUCTION_SELECTOR_H_ 6 #define V8_COMPILER_INSTRUCTION_SELECTOR_H_
7 7
8 #include <map> 8 #include <map>
9 9
10 #include "src/compiler/common-operator.h" 10 #include "src/compiler/common-operator.h"
11 #include "src/compiler/instruction.h" 11 #include "src/compiler/instruction.h"
12 #include "src/compiler/machine-operator.h" 12 #include "src/compiler/machine-operator.h"
13 #include "src/compiler/node.h" 13 #include "src/compiler/node.h"
14 #include "src/zone-containers.h" 14 #include "src/zone-containers.h"
15 15
16 namespace v8 { 16 namespace v8 {
17 namespace internal { 17 namespace internal {
18 namespace compiler { 18 namespace compiler {
19 19
20 // Forward declarations. 20 // Forward declarations.
21 struct CallBuffer; // TODO(bmeurer): Remove this. 21 struct CallBuffer; // TODO(bmeurer): Remove this.
22 class FlagsContinuation; 22 class FlagsContinuation;
23 class Linkage; 23 class Linkage;
24 24
25 25
26 typedef ZoneVector<InstructionOperand> InstructionOperandVector;
27
28
26 // Instruction selection generates an InstructionSequence for a given Schedule. 29 // Instruction selection generates an InstructionSequence for a given Schedule.
27 class InstructionSelector FINAL { 30 class InstructionSelector FINAL {
28 public: 31 public:
29 // Forward declarations. 32 // Forward declarations.
30 class Features; 33 class Features;
31 34
32 InstructionSelector(Zone* zone, size_t node_count, Linkage* linkage, 35 InstructionSelector(Zone* zone, size_t node_count, Linkage* linkage,
33 InstructionSequence* sequence, Schedule* schedule, 36 InstructionSequence* sequence, Schedule* schedule,
34 SourcePositionTable* source_positions, 37 SourcePositionTable* source_positions,
35 Features features = SupportedFeatures()); 38 Features features = SupportedFeatures());
36 39
37 // Visit code for the entire graph with the included schedule. 40 // Visit code for the entire graph with the included schedule.
38 void SelectInstructions(); 41 void SelectInstructions();
39 42
40 // =========================================================================== 43 // ===========================================================================
41 // ============= Architecture-independent code emission methods. ============= 44 // ============= Architecture-independent code emission methods. =============
42 // =========================================================================== 45 // ===========================================================================
43 46
44 Instruction* Emit(InstructionCode opcode, InstructionOperand* output, 47 Instruction* Emit(InstructionCode opcode, InstructionOperand output,
45 size_t temp_count = 0, InstructionOperand* *temps = NULL); 48 size_t temp_count = 0, InstructionOperand* temps = NULL);
46 Instruction* Emit(InstructionCode opcode, InstructionOperand* output, 49 Instruction* Emit(InstructionCode opcode, InstructionOperand output,
47 InstructionOperand* a, size_t temp_count = 0, 50 InstructionOperand a, size_t temp_count = 0,
48 InstructionOperand* *temps = NULL); 51 InstructionOperand* temps = NULL);
49 Instruction* Emit(InstructionCode opcode, InstructionOperand* output, 52 Instruction* Emit(InstructionCode opcode, InstructionOperand output,
50 InstructionOperand* a, InstructionOperand* b, 53 InstructionOperand a, InstructionOperand b,
51 size_t temp_count = 0, InstructionOperand* *temps = NULL); 54 size_t temp_count = 0, InstructionOperand* temps = NULL);
52 Instruction* Emit(InstructionCode opcode, InstructionOperand* output, 55 Instruction* Emit(InstructionCode opcode, InstructionOperand output,
53 InstructionOperand* a, InstructionOperand* b, 56 InstructionOperand a, InstructionOperand b,
54 InstructionOperand* c, size_t temp_count = 0, 57 InstructionOperand c, size_t temp_count = 0,
55 InstructionOperand* *temps = NULL); 58 InstructionOperand* temps = NULL);
56 Instruction* Emit(InstructionCode opcode, InstructionOperand* output, 59 Instruction* Emit(InstructionCode opcode, InstructionOperand output,
57 InstructionOperand* a, InstructionOperand* b, 60 InstructionOperand a, InstructionOperand b,
58 InstructionOperand* c, InstructionOperand* d, 61 InstructionOperand c, InstructionOperand d,
59 size_t temp_count = 0, InstructionOperand* *temps = NULL); 62 size_t temp_count = 0, InstructionOperand* temps = NULL);
60 Instruction* Emit(InstructionCode opcode, InstructionOperand* output, 63 Instruction* Emit(InstructionCode opcode, InstructionOperand output,
61 InstructionOperand* a, InstructionOperand* b, 64 InstructionOperand a, InstructionOperand b,
62 InstructionOperand* c, InstructionOperand* d, 65 InstructionOperand c, InstructionOperand d,
63 InstructionOperand* e, size_t temp_count = 0, 66 InstructionOperand e, size_t temp_count = 0,
64 InstructionOperand* *temps = NULL); 67 InstructionOperand* temps = NULL);
65 Instruction* Emit(InstructionCode opcode, InstructionOperand* output, 68 Instruction* Emit(InstructionCode opcode, InstructionOperand output,
66 InstructionOperand* a, InstructionOperand* b, 69 InstructionOperand a, InstructionOperand b,
67 InstructionOperand* c, InstructionOperand* d, 70 InstructionOperand c, InstructionOperand d,
68 InstructionOperand* e, InstructionOperand* f, 71 InstructionOperand e, InstructionOperand f,
69 size_t temp_count = 0, InstructionOperand* *temps = NULL); 72 size_t temp_count = 0, InstructionOperand* temps = NULL);
70 Instruction* Emit(InstructionCode opcode, size_t output_count, 73 Instruction* Emit(InstructionCode opcode, size_t output_count,
71 InstructionOperand** outputs, size_t input_count, 74 InstructionOperand* outputs, size_t input_count,
72 InstructionOperand** inputs, size_t temp_count = 0, 75 InstructionOperand* inputs, size_t temp_count = 0,
73 InstructionOperand* *temps = NULL); 76 InstructionOperand* temps = NULL);
74 Instruction* Emit(Instruction* instr); 77 Instruction* Emit(Instruction* instr);
75 78
76 // =========================================================================== 79 // ===========================================================================
77 // ============== Architecture-independent CPU feature methods. ============== 80 // ============== Architecture-independent CPU feature methods. ==============
78 // =========================================================================== 81 // ===========================================================================
79 82
80 class Features FINAL { 83 class Features FINAL {
81 public: 84 public:
82 Features() : bits_(0) {} 85 Features() : bits_(0) {}
83 explicit Features(unsigned bits) : bits_(bits) {} 86 explicit Features(unsigned bits) : bits_(bits) {}
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 150
148 // Inform the register allocator of a reference result. 151 // Inform the register allocator of a reference result.
149 void MarkAsReference(Node* node); 152 void MarkAsReference(Node* node);
150 153
151 // Inform the register allocation of the representation of the value produced 154 // Inform the register allocation of the representation of the value produced
152 // by {node}. 155 // by {node}.
153 void MarkAsRepresentation(MachineType rep, Node* node); 156 void MarkAsRepresentation(MachineType rep, Node* node);
154 157
155 // Inform the register allocation of the representation of the unallocated 158 // Inform the register allocation of the representation of the unallocated
156 // operand {op}. 159 // operand {op}.
157 void MarkAsRepresentation(MachineType rep, InstructionOperand* op); 160 void MarkAsRepresentation(MachineType rep, const InstructionOperand& op);
158 161
159 // Initialize the call buffer with the InstructionOperands, nodes, etc, 162 // Initialize the call buffer with the InstructionOperands, nodes, etc,
160 // corresponding 163 // corresponding
161 // to the inputs and outputs of the call. 164 // to the inputs and outputs of the call.
162 // {call_code_immediate} to generate immediate operands to calls of code. 165 // {call_code_immediate} to generate immediate operands to calls of code.
163 // {call_address_immediate} to generate immediate operands to address calls. 166 // {call_address_immediate} to generate immediate operands to address calls.
164 void InitializeCallBuffer(Node* call, CallBuffer* buffer, 167 void InitializeCallBuffer(Node* call, CallBuffer* buffer,
165 bool call_code_immediate, 168 bool call_code_immediate,
166 bool call_address_immediate); 169 bool call_address_immediate);
167 170
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 BoolVector defined_; 227 BoolVector defined_;
225 BoolVector used_; 228 BoolVector used_;
226 IntVector virtual_registers_; 229 IntVector virtual_registers_;
227 }; 230 };
228 231
229 } // namespace compiler 232 } // namespace compiler
230 } // namespace internal 233 } // namespace internal
231 } // namespace v8 234 } // namespace v8
232 235
233 #endif // V8_COMPILER_INSTRUCTION_SELECTOR_H_ 236 #endif // V8_COMPILER_INSTRUCTION_SELECTOR_H_
OLDNEW
« no previous file with comments | « src/compiler/instruction.cc ('k') | src/compiler/instruction-selector.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698