14 if (node->opcode() != IrOpcode::kLoop)
return NoChange();
15 if (node->InputCount() <= 2)
return NoChange();
18 node->InputAt(0), node);
24 for (
Edge edge : node->use_edges()) {
25 Node* use = edge.from();
33 use, use->opcode() == IrOpcode::kPhi
35 use->InputCount() - 1)
39 use->opcode() == IrOpcode::kPhi
42 dominating_input, use, new_loop);
49 for (
Edge edge : control_uses) {
50 if (edge.from() != new_loop) {
51 edge.from()->ReplaceInput(edge.index(), new_loop);
void emplace_back(Args &&... args)
void ReplaceWithValue(Node *node, Node *value, Node *effect=nullptr, Node *control=nullptr)
const Operator * Phi(MachineRepresentation representation, int value_input_count)
const Operator * Loop(int control_input_count)
const Operator * EffectPhi(int effect_input_count)
const Operator * Merge(int control_input_count)
CommonOperatorBuilder * common() const
static void ChangeOp(Node *node, const Operator *new_op)
static bool IsPhi(Node *node)
void ReplaceInput(int index, Node *new_to)
Node * InputAt(int index) const
Node * RemoveInput(int index)
static Reduction NoChange()
MachineGraph *const mcgraph_
Reduction Reduce(Node *node) final
Node * NewNode(const Operator *op, int input_count, Node *const *inputs, bool incomplete=false)
MachineRepresentation PhiRepresentationOf(const Operator *const op)