| 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); | 
| } | 
| } | 
| } | 
|  |