| Index: src/compiler/bytecode-graph-builder.h
|
| diff --git a/src/compiler/bytecode-graph-builder.h b/src/compiler/bytecode-graph-builder.h
|
| index ccb6d1e3de28acf1cdddbd2ce6001dfaf55d5ba3..9c22251e0f478a248cfc227d82d14e059937d43a 100644
|
| --- a/src/compiler/bytecode-graph-builder.h
|
| +++ b/src/compiler/bytecode-graph-builder.h
|
| @@ -28,11 +28,6 @@ class BytecodeGraphBuilder {
|
| Graph* graph() const { return jsgraph_->graph(); }
|
|
|
| private:
|
| - enum class AccumulatorUpdateMode {
|
| - kOutputIgnored,
|
| - kOutputInAccumulator,
|
| - };
|
| -
|
| class Environment;
|
| class FrameStateBeforeAndAfter;
|
|
|
| @@ -263,14 +258,17 @@ class BytecodeGraphBuilder::Environment : public ZoneObject {
|
| int parameter_count() const { return parameter_count_; }
|
| int register_count() const { return register_count_; }
|
|
|
| - void BindRegister(interpreter::Register the_register, Node* node);
|
| + Node* LookupAccumulator() const;
|
| Node* LookupRegister(interpreter::Register the_register) const;
|
| +
|
| void ExchangeRegisters(interpreter::Register reg0,
|
| interpreter::Register reg1);
|
|
|
| void BindAccumulator(Node* node, FrameStateBeforeAndAfter* states = nullptr);
|
| - Node* LookupAccumulator() const;
|
| -
|
| + void BindRegister(interpreter::Register the_register, Node* node,
|
| + FrameStateBeforeAndAfter* states = nullptr);
|
| + void BindRegistersToProjections(interpreter::Register first_reg, Node* node,
|
| + FrameStateBeforeAndAfter* states = nullptr);
|
| void RecordAfterState(Node* node, FrameStateBeforeAndAfter* states);
|
|
|
| bool IsMarkedAsUnreachable() const;
|
| @@ -284,12 +282,11 @@ class BytecodeGraphBuilder::Environment : public ZoneObject {
|
|
|
| // Preserve a checkpoint of the environment for the IR graph. Any
|
| // further mutation of the environment will not affect checkpoints.
|
| - Node* Checkpoint(BailoutId ast_id, AccumulatorUpdateMode update_mode);
|
| + Node* Checkpoint(BailoutId bytecode_offset, OutputFrameStateCombine combine);
|
|
|
| // Returns true if the state values are up to date with the current
|
| - // environment. If update_mode is AccumulatorUpdateMode::kOutputInAccumulator
|
| - // then accumulator state can be different from the environment.
|
| - bool StateValuesAreUpToDate(AccumulatorUpdateMode update_mode);
|
| + // environment.
|
| + bool StateValuesAreUpToDate(int output_poke_offset, int output_poke_count);
|
|
|
| // Control dependency tracked by this environment.
|
| Node* GetControlDependency() const { return control_dependency_; }
|
| @@ -307,6 +304,8 @@ class BytecodeGraphBuilder::Environment : public ZoneObject {
|
| private:
|
| explicit Environment(const Environment* copy);
|
| void PrepareForLoop();
|
| + bool StateValuesAreUpToDate(Node** state_values, int offset, int count,
|
| + int output_poke_start, int output_poke_end);
|
| bool StateValuesRequireUpdate(Node** state_values, int offset, int count);
|
| void UpdateStateValues(Node** state_values, int offset, int count);
|
|
|
|
|