| Index: src/compiler/simplified-lowering.cc
|
| diff --git a/src/compiler/simplified-lowering.cc b/src/compiler/simplified-lowering.cc
|
| index 00ebd13fcf26deefa6de0ced34a6ca3f5fc429d7..d216009e4e563d68b2c1b84aee3776c832c36a53 100644
|
| --- a/src/compiler/simplified-lowering.cc
|
| +++ b/src/compiler/simplified-lowering.cc
|
| @@ -250,28 +250,21 @@ class RepresentationSelector {
|
| }
|
|
|
| // The default, most general visitation case. For {node}, process all value,
|
| - // context, effect, and control inputs, assuming that value inputs should have
|
| - // {kRepTagged} representation and can observe all output values {kTypeAny}.
|
| + // context, frame state, effect, and control inputs, assuming that value
|
| + // inputs should have {kRepTagged} representation and can observe all output
|
| + // values {kTypeAny}.
|
| void VisitInputs(Node* node) {
|
| - auto i = node->input_edges().begin();
|
| - for (int j = node->op()->ValueInputCount(); j > 0; ++i, j--) {
|
| - ProcessInput(node, (*i).index(), kMachAnyTagged); // Value inputs
|
| + int tagged_count = node->op()->ValueInputCount() +
|
| + OperatorProperties::GetContextInputCount(node->op());
|
| + // Visit value and context inputs as tagged.
|
| + for (int i = 0; i < tagged_count; i++) {
|
| + ProcessInput(node, i, kMachAnyTagged);
|
| }
|
| - for (int j = OperatorProperties::GetContextInputCount(node->op()); j > 0;
|
| - ++i, j--) {
|
| - ProcessInput(node, (*i).index(), kMachAnyTagged); // Context inputs
|
| + // Only enqueue other inputs (framestates, effects, control).
|
| + for (int i = tagged_count; i < node->InputCount(); i++) {
|
| + Enqueue(node->InputAt(i));
|
| }
|
| - for (int j = OperatorProperties::GetFrameStateInputCount(node->op()); j > 0;
|
| - ++i, j--) {
|
| - Enqueue((*i).to()); // FrameState inputs: just visit
|
| - }
|
| - for (int j = node->op()->EffectInputCount(); j > 0; ++i, j--) {
|
| - Enqueue((*i).to()); // Effect inputs: just visit
|
| - }
|
| - for (int j = node->op()->ControlInputCount(); j > 0; ++i, j--) {
|
| - Enqueue((*i).to()); // Control inputs: just visit
|
| - }
|
| - DCHECK(i == node->input_edges().end());
|
| + // Assume the output is tagged.
|
| SetOutput(node, kMachAnyTagged);
|
| }
|
|
|
| @@ -407,19 +400,15 @@ class RepresentationSelector {
|
| }
|
|
|
| // Convert inputs to the output representation of this phi.
|
| - for (Edge const edge : node->input_edges()) {
|
| - // TODO(titzer): it'd be nice to have distinguished edge kinds here.
|
| - ProcessInput(node, edge.index(), values > 0 ? output_type : 0);
|
| - values--;
|
| + for (int i = 0; i < node->InputCount(); i++) {
|
| + ProcessInput(node, i, i < values ? output_type : 0);
|
| }
|
| } else {
|
| // Propagate {use} of the phi to value inputs, and 0 to control.
|
| MachineType use_type =
|
| static_cast<MachineType>((use & kTypeMask) | output);
|
| - for (Edge const edge : node->input_edges()) {
|
| - // TODO(titzer): it'd be nice to have distinguished edge kinds here.
|
| - ProcessInput(node, edge.index(), values > 0 ? use_type : 0);
|
| - values--;
|
| + for (int i = 0; i < node->InputCount(); i++) {
|
| + ProcessInput(node, i, i < values ? use_type : 0);
|
| }
|
| }
|
| }
|
|
|