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

Side by Side Diff: src/compiler/bytecode-graph-builder.h

Issue 1570623007: [Interpreter] Add support for CallRuntimeForPair to Bytecode Graph Builder. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@int_eval
Patch Set: Fix test flags 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
« no previous file with comments | « no previous file | src/compiler/bytecode-graph-builder.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 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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_BYTECODE_GRAPH_BUILDER_H_ 5 #ifndef V8_COMPILER_BYTECODE_GRAPH_BUILDER_H_
6 #define V8_COMPILER_BYTECODE_GRAPH_BUILDER_H_ 6 #define V8_COMPILER_BYTECODE_GRAPH_BUILDER_H_
7 7
8 #include "src/compiler.h" 8 #include "src/compiler.h"
9 #include "src/compiler/bytecode-branch-analysis.h" 9 #include "src/compiler/bytecode-branch-analysis.h"
10 #include "src/compiler/js-graph.h" 10 #include "src/compiler/js-graph.h"
(...skipping 10 matching lines...) Expand all
21 public: 21 public:
22 BytecodeGraphBuilder(Zone* local_zone, CompilationInfo* info, 22 BytecodeGraphBuilder(Zone* local_zone, CompilationInfo* info,
23 JSGraph* jsgraph); 23 JSGraph* jsgraph);
24 24
25 // Creates a graph by visiting bytecodes. 25 // Creates a graph by visiting bytecodes.
26 bool CreateGraph(bool stack_check = true); 26 bool CreateGraph(bool stack_check = true);
27 27
28 Graph* graph() const { return jsgraph_->graph(); } 28 Graph* graph() const { return jsgraph_->graph(); }
29 29
30 private: 30 private:
31 enum class AccumulatorUpdateMode {
32 kOutputIgnored,
33 kOutputInAccumulator,
34 };
35
36 class Environment; 31 class Environment;
37 class FrameStateBeforeAndAfter; 32 class FrameStateBeforeAndAfter;
38 33
39 void CreateGraphBody(bool stack_check); 34 void CreateGraphBody(bool stack_check);
40 void VisitBytecodes(); 35 void VisitBytecodes();
41 36
42 Node* LoadAccumulator(Node* value); 37 Node* LoadAccumulator(Node* value);
43 38
44 // Get or create the node that represents the outer function closure. 39 // Get or create the node that represents the outer function closure.
45 Node* GetFunctionClosure(); 40 Node* GetFunctionClosure();
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 251
257 252
258 class BytecodeGraphBuilder::Environment : public ZoneObject { 253 class BytecodeGraphBuilder::Environment : public ZoneObject {
259 public: 254 public:
260 Environment(BytecodeGraphBuilder* builder, int register_count, 255 Environment(BytecodeGraphBuilder* builder, int register_count,
261 int parameter_count, Node* control_dependency, Node* context); 256 int parameter_count, Node* control_dependency, Node* context);
262 257
263 int parameter_count() const { return parameter_count_; } 258 int parameter_count() const { return parameter_count_; }
264 int register_count() const { return register_count_; } 259 int register_count() const { return register_count_; }
265 260
266 void BindRegister(interpreter::Register the_register, Node* node); 261 Node* LookupAccumulator() const;
267 Node* LookupRegister(interpreter::Register the_register) const; 262 Node* LookupRegister(interpreter::Register the_register) const;
263
268 void ExchangeRegisters(interpreter::Register reg0, 264 void ExchangeRegisters(interpreter::Register reg0,
269 interpreter::Register reg1); 265 interpreter::Register reg1);
270 266
271 void BindAccumulator(Node* node, FrameStateBeforeAndAfter* states = nullptr); 267 void BindAccumulator(Node* node, FrameStateBeforeAndAfter* states = nullptr);
272 Node* LookupAccumulator() const; 268 void BindRegister(interpreter::Register the_register, Node* node,
273 269 FrameStateBeforeAndAfter* states = nullptr);
270 void BindRegistersToProjections(interpreter::Register first_reg, Node* node,
271 FrameStateBeforeAndAfter* states = nullptr);
274 void RecordAfterState(Node* node, FrameStateBeforeAndAfter* states); 272 void RecordAfterState(Node* node, FrameStateBeforeAndAfter* states);
275 273
276 bool IsMarkedAsUnreachable() const; 274 bool IsMarkedAsUnreachable() const;
277 void MarkAsUnreachable(); 275 void MarkAsUnreachable();
278 276
279 // Effect dependency tracked by this environment. 277 // Effect dependency tracked by this environment.
280 Node* GetEffectDependency() { return effect_dependency_; } 278 Node* GetEffectDependency() { return effect_dependency_; }
281 void UpdateEffectDependency(Node* dependency) { 279 void UpdateEffectDependency(Node* dependency) {
282 effect_dependency_ = dependency; 280 effect_dependency_ = dependency;
283 } 281 }
284 282
285 // Preserve a checkpoint of the environment for the IR graph. Any 283 // Preserve a checkpoint of the environment for the IR graph. Any
286 // further mutation of the environment will not affect checkpoints. 284 // further mutation of the environment will not affect checkpoints.
287 Node* Checkpoint(BailoutId ast_id, AccumulatorUpdateMode update_mode); 285 Node* Checkpoint(BailoutId bytecode_offset, OutputFrameStateCombine combine);
288 286
289 // Returns true if the state values are up to date with the current 287 // Returns true if the state values are up to date with the current
290 // environment. If update_mode is AccumulatorUpdateMode::kOutputInAccumulator 288 // environment.
291 // then accumulator state can be different from the environment. 289 bool StateValuesAreUpToDate(int output_poke_offset, int output_poke_count);
292 bool StateValuesAreUpToDate(AccumulatorUpdateMode update_mode);
293 290
294 // Control dependency tracked by this environment. 291 // Control dependency tracked by this environment.
295 Node* GetControlDependency() const { return control_dependency_; } 292 Node* GetControlDependency() const { return control_dependency_; }
296 void UpdateControlDependency(Node* dependency) { 293 void UpdateControlDependency(Node* dependency) {
297 control_dependency_ = dependency; 294 control_dependency_ = dependency;
298 } 295 }
299 296
300 Node* Context() const { return context_; } 297 Node* Context() const { return context_; }
301 void SetContext(Node* new_context) { context_ = new_context; } 298 void SetContext(Node* new_context) { context_ = new_context; }
302 299
303 Environment* CopyForConditional() const; 300 Environment* CopyForConditional() const;
304 Environment* CopyForLoop(); 301 Environment* CopyForLoop();
305 void Merge(Environment* other); 302 void Merge(Environment* other);
306 303
307 private: 304 private:
308 explicit Environment(const Environment* copy); 305 explicit Environment(const Environment* copy);
309 void PrepareForLoop(); 306 void PrepareForLoop();
307 bool StateValuesAreUpToDate(Node** state_values, int offset, int count,
308 int output_poke_start, int output_poke_end);
310 bool StateValuesRequireUpdate(Node** state_values, int offset, int count); 309 bool StateValuesRequireUpdate(Node** state_values, int offset, int count);
311 void UpdateStateValues(Node** state_values, int offset, int count); 310 void UpdateStateValues(Node** state_values, int offset, int count);
312 311
313 int RegisterToValuesIndex(interpreter::Register the_register) const; 312 int RegisterToValuesIndex(interpreter::Register the_register) const;
314 313
315 Zone* zone() const { return builder_->local_zone(); } 314 Zone* zone() const { return builder_->local_zone(); }
316 Graph* graph() const { return builder_->graph(); } 315 Graph* graph() const { return builder_->graph(); }
317 CommonOperatorBuilder* common() const { return builder_->common(); } 316 CommonOperatorBuilder* common() const { return builder_->common(); }
318 BytecodeGraphBuilder* builder() const { return builder_; } 317 BytecodeGraphBuilder* builder() const { return builder_; }
319 const NodeVector* values() const { return &values_; } 318 const NodeVector* values() const { return &values_; }
(...skipping 13 matching lines...) Expand all
333 Node* accumulator_state_values_; 332 Node* accumulator_state_values_;
334 int register_base_; 333 int register_base_;
335 int accumulator_base_; 334 int accumulator_base_;
336 }; 335 };
337 336
338 } // namespace compiler 337 } // namespace compiler
339 } // namespace internal 338 } // namespace internal
340 } // namespace v8 339 } // namespace v8
341 340
342 #endif // V8_COMPILER_BYTECODE_GRAPH_BUILDER_H_ 341 #endif // V8_COMPILER_BYTECODE_GRAPH_BUILDER_H_
OLDNEW
« no previous file with comments | « no previous file | src/compiler/bytecode-graph-builder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698