Chromium Code Reviews| Index: src/compiler/bytecode-graph-builder.cc |
| diff --git a/src/compiler/bytecode-graph-builder.cc b/src/compiler/bytecode-graph-builder.cc |
| index 40549d9631da118cb6892bdf04a42f33458b0ab7..040b7f3ea1985f7cb19d269d906fc4a7aa9d3152 100644 |
| --- a/src/compiler/bytecode-graph-builder.cc |
| +++ b/src/compiler/bytecode-graph-builder.cc |
| @@ -82,9 +82,8 @@ class BytecodeGraphBuilder::Environment : public ZoneObject { |
| bool StateValuesRequireUpdate(Node** state_values, Node** values, int count); |
| void UpdateStateValues(Node** state_values, Node** values, int count); |
| - void UpdateStateValuesWithCache(Node** state_values, Node** values, int count, |
| - const BitVector* liveness, |
| - int liveness_offset); |
| + Node* GetStateValuesFromCache(Node** values, int count, |
| + const BitVector* liveness, int liveness_offset); |
| int RegisterToValuesIndex(interpreter::Register the_register) const; |
| @@ -105,8 +104,6 @@ class BytecodeGraphBuilder::Environment : public ZoneObject { |
| Node* effect_dependency_; |
| NodeVector values_; |
| Node* parameters_state_values_; |
| - Node* registers_state_values_; |
| - Node* accumulator_state_values_; |
| int register_base_; |
| int accumulator_base_; |
| }; |
| @@ -127,9 +124,7 @@ BytecodeGraphBuilder::Environment::Environment(BytecodeGraphBuilder* builder, |
| control_dependency_(control_dependency), |
| effect_dependency_(control_dependency), |
| values_(builder->local_zone()), |
| - parameters_state_values_(nullptr), |
| - registers_state_values_(nullptr), |
| - accumulator_state_values_(nullptr) { |
| + parameters_state_values_(nullptr) { |
| // The layout of values_ is: |
| // |
| // [receiver] [parameters] [registers] [accumulator] |
| @@ -165,9 +160,7 @@ BytecodeGraphBuilder::Environment::Environment( |
| control_dependency_(other->control_dependency_), |
| effect_dependency_(other->effect_dependency_), |
| values_(other->zone()), |
| - parameters_state_values_(nullptr), |
| - registers_state_values_(nullptr), |
| - accumulator_state_values_(nullptr), |
| + parameters_state_values_(other->parameters_state_values_), |
|
Jarin
2017/04/20 11:54:48
This line is the real fix, the rest is drive-by :-
|
| register_base_(other->register_base_), |
| accumulator_base_(other->accumulator_base_) { |
| values_ = other->values_; |
| @@ -411,10 +404,9 @@ void BytecodeGraphBuilder::Environment::UpdateStateValues(Node** state_values, |
| } |
| } |
| -void BytecodeGraphBuilder::Environment::UpdateStateValuesWithCache( |
| - Node** state_values, Node** values, int count, const BitVector* liveness, |
| - int liveness_offset) { |
| - *state_values = builder_->state_values_cache_.GetNodeForValues( |
| +Node* BytecodeGraphBuilder::Environment::GetStateValuesFromCache( |
| + Node** values, int count, const BitVector* liveness, int liveness_offset) { |
| + return builder_->state_values_cache_.GetNodeForValues( |
| values, static_cast<size_t>(count), liveness, liveness_offset); |
| } |
| @@ -424,37 +416,38 @@ Node* BytecodeGraphBuilder::Environment::Checkpoint( |
| if (parameter_count() == register_count()) { |
| // Re-use the state-value cache if the number of local registers happens |
| // to match the parameter count. |
| - UpdateStateValuesWithCache(¶meters_state_values_, &values()->at(0), |
| - parameter_count(), nullptr, 0); |
| + parameters_state_values_ = GetStateValuesFromCache( |
| + &values()->at(0), parameter_count(), nullptr, 0); |
| } else { |
| UpdateStateValues(¶meters_state_values_, &values()->at(0), |
| parameter_count()); |
| } |
| - UpdateStateValuesWithCache(®isters_state_values_, |
| - &values()->at(register_base()), register_count(), |
| - liveness ? &liveness->bit_vector() : nullptr, 0); |
| + Node* registers_state_values = |
| + GetStateValuesFromCache(&values()->at(register_base()), register_count(), |
| + liveness ? &liveness->bit_vector() : nullptr, 0); |
| bool accumulator_is_live = !liveness || liveness->AccumulatorIsLive(); |
| + Node* accumulator_state_values; |
| if (parameter_count() == 1 && accumulator_is_live && |
| values()->at(accumulator_base()) == values()->at(0)) { |
| // Re-use the parameter state values if there happens to only be one |
| // parameter and the accumulator is live and holds that parameter's value. |
| - accumulator_state_values_ = parameters_state_values_; |
| + accumulator_state_values = parameters_state_values_; |
| } else { |
| // Otherwise, use the state values cache to hopefully re-use local register |
| // state values (if there is only one local register), or at the very least |
| // re-use previous accumulator state values. |
| - UpdateStateValuesWithCache( |
| - &accumulator_state_values_, &values()->at(accumulator_base()), 1, |
| + accumulator_state_values = GetStateValuesFromCache( |
| + &values()->at(accumulator_base()), 1, |
| liveness ? &liveness->bit_vector() : nullptr, register_count()); |
| } |
| const Operator* op = common()->FrameState( |
| bailout_id, combine, builder()->frame_state_function_info()); |
| Node* result = graph()->NewNode( |
| - op, parameters_state_values_, registers_state_values_, |
| - accumulator_state_values_, Context(), builder()->GetFunctionClosure(), |
| + op, parameters_state_values_, registers_state_values, |
| + accumulator_state_values, Context(), builder()->GetFunctionClosure(), |
| builder()->graph()->start()); |
| return result; |