Index: src/compiler/machine-operator-reducer.cc |
diff --git a/src/compiler/machine-operator-reducer.cc b/src/compiler/machine-operator-reducer.cc |
index b70eef5ccf0a44ca8f5989797a7af05b8d28d31f..c174da2f7f2d6d3fcbf684749c29be71348ba338 100644 |
--- a/src/compiler/machine-operator-reducer.cc |
+++ b/src/compiler/machine-operator-reducer.cc |
@@ -213,14 +213,14 @@ Reduction MachineOperatorReducer::Reduce(Node* node) { |
return ReplaceInt32(m.left().Value() * m.right().Value()); |
} |
if (m.right().Is(-1)) { // x * -1 => 0 - x |
- node->set_op(machine()->Int32Sub()); |
node->ReplaceInput(0, Int32Constant(0)); |
node->ReplaceInput(1, m.left().node()); |
+ NodeProperties::ChangeOp(node, machine()->Int32Sub()); |
return Changed(node); |
} |
if (m.right().IsPowerOf2()) { // x * 2^n => x << n |
- node->set_op(machine()->Word32Shl()); |
node->ReplaceInput(1, Int32Constant(WhichPowerOf2(m.right().Value()))); |
+ NodeProperties::ChangeOp(node, machine()->Word32Shl()); |
Reduction reduction = ReduceWord32Shl(node); |
return reduction.Changed() ? reduction : Changed(node); |
} |
@@ -338,9 +338,9 @@ Reduction MachineOperatorReducer::Reduce(Node* node) { |
case IrOpcode::kFloat64Mul: { |
Float64BinopMatcher m(node); |
if (m.right().Is(-1)) { // x * -1.0 => -0.0 - x |
- node->set_op(machine()->Float64Sub()); |
node->ReplaceInput(0, Float64Constant(-0.0)); |
node->ReplaceInput(1, m.left().node()); |
+ NodeProperties::ChangeOp(node, machine()->Float64Sub()); |
return Changed(node); |
} |
if (m.right().Is(1)) return Replace(m.left().node()); // x * 1.0 => x |
@@ -461,9 +461,9 @@ Reduction MachineOperatorReducer::ReduceInt32Add(Node* node) { |
if (m.left().IsInt32Sub()) { |
Int32BinopMatcher mleft(m.left().node()); |
if (mleft.left().Is(0)) { // (0 - x) + y => y - x |
- node->set_op(machine()->Int32Sub()); |
node->ReplaceInput(0, m.right().node()); |
node->ReplaceInput(1, mleft.right().node()); |
+ NodeProperties::ChangeOp(node, machine()->Int32Sub()); |
Reduction const reduction = ReduceInt32Sub(node); |
return reduction.Changed() ? reduction : Changed(node); |
} |
@@ -471,8 +471,8 @@ Reduction MachineOperatorReducer::ReduceInt32Add(Node* node) { |
if (m.right().IsInt32Sub()) { |
Int32BinopMatcher mright(m.right().node()); |
if (mright.left().Is(0)) { // y + (0 - x) => y - x |
- node->set_op(machine()->Int32Sub()); |
node->ReplaceInput(1, mright.right().node()); |
+ NodeProperties::ChangeOp(node, machine()->Int32Sub()); |
Reduction const reduction = ReduceInt32Sub(node); |
return reduction.Changed() ? reduction : Changed(node); |
} |
@@ -491,8 +491,8 @@ Reduction MachineOperatorReducer::ReduceInt32Sub(Node* node) { |
} |
if (m.LeftEqualsRight()) return ReplaceInt32(0); // x - x => 0 |
if (m.right().HasValue()) { // x - K => x + -K |
- node->set_op(machine()->Int32Add()); |
node->ReplaceInput(1, Int32Constant(-m.right().Value())); |
+ NodeProperties::ChangeOp(node, machine()->Int32Add()); |
Reduction const reduction = ReduceInt32Add(node); |
return reduction.Changed() ? reduction : Changed(node); |
} |
@@ -514,10 +514,10 @@ Reduction MachineOperatorReducer::ReduceInt32Div(Node* node) { |
return Replace(Word32Equal(Word32Equal(m.left().node(), zero), zero)); |
} |
if (m.right().Is(-1)) { // x / -1 => 0 - x |
- node->set_op(machine()->Int32Sub()); |
node->ReplaceInput(0, Int32Constant(0)); |
node->ReplaceInput(1, m.left().node()); |
node->TrimInputCount(2); |
+ NodeProperties::ChangeOp(node, machine()->Int32Sub()); |
return Changed(node); |
} |
if (m.right().HasValue()) { |
@@ -536,10 +536,10 @@ Reduction MachineOperatorReducer::ReduceInt32Div(Node* node) { |
quotient = Int32Div(quotient, Abs(divisor)); |
} |
if (divisor < 0) { |
- node->set_op(machine()->Int32Sub()); |
node->ReplaceInput(0, Int32Constant(0)); |
node->ReplaceInput(1, quotient); |
node->TrimInputCount(2); |
+ NodeProperties::ChangeOp(node, machine()->Int32Sub()); |
return Changed(node); |
} |
return Replace(quotient); |
@@ -565,9 +565,9 @@ Reduction MachineOperatorReducer::ReduceUint32Div(Node* node) { |
Node* const dividend = m.left().node(); |
uint32_t const divisor = m.right().Value(); |
if (base::bits::IsPowerOfTwo32(divisor)) { // x / 2^n => x >> n |
- node->set_op(machine()->Word32Shr()); |
node->ReplaceInput(1, Uint32Constant(WhichPowerOf2(m.right().Value()))); |
node->TrimInputCount(2); |
+ NodeProperties::ChangeOp(node, machine()->Word32Shr()); |
return Changed(node); |
} else { |
return Replace(Uint32Div(dividend, divisor)); |
@@ -594,18 +594,19 @@ Reduction MachineOperatorReducer::ReduceInt32Mod(Node* node) { |
if (base::bits::IsPowerOfTwo32(divisor)) { |
uint32_t const mask = divisor - 1; |
Node* const zero = Int32Constant(0); |
- node->set_op(common()->Select(kMachInt32, BranchHint::kFalse)); |
node->ReplaceInput( |
0, graph()->NewNode(machine()->Int32LessThan(), dividend, zero)); |
node->ReplaceInput( |
1, Int32Sub(zero, Word32And(Int32Sub(zero, dividend), mask))); |
node->ReplaceInput(2, Word32And(dividend, mask)); |
+ NodeProperties::ChangeOp( |
+ node, common()->Select(kMachInt32, BranchHint::kFalse)); |
} else { |
Node* quotient = Int32Div(dividend, divisor); |
- node->set_op(machine()->Int32Sub()); |
DCHECK_EQ(dividend, node->InputAt(0)); |
node->ReplaceInput(1, Int32Mul(quotient, Int32Constant(divisor))); |
node->TrimInputCount(2); |
+ NodeProperties::ChangeOp(node, machine()->Int32Sub()); |
} |
return Changed(node); |
} |
@@ -627,15 +628,16 @@ Reduction MachineOperatorReducer::ReduceUint32Mod(Node* node) { |
Node* const dividend = m.left().node(); |
uint32_t const divisor = m.right().Value(); |
if (base::bits::IsPowerOfTwo32(divisor)) { // x % 2^n => x & 2^n-1 |
- node->set_op(machine()->Word32And()); |
node->ReplaceInput(1, Uint32Constant(m.right().Value() - 1)); |
+ node->TrimInputCount(2); |
+ NodeProperties::ChangeOp(node, machine()->Word32And()); |
} else { |
Node* quotient = Uint32Div(dividend, divisor); |
- node->set_op(machine()->Int32Sub()); |
DCHECK_EQ(dividend, node->InputAt(0)); |
node->ReplaceInput(1, Int32Mul(quotient, Uint32Constant(divisor))); |
+ node->TrimInputCount(2); |
+ NodeProperties::ChangeOp(node, machine()->Int32Sub()); |
} |
- node->TrimInputCount(2); |
return Changed(node); |
} |
return NoChange(); |
@@ -663,7 +665,8 @@ Reduction MachineOperatorReducer::ReduceTruncateFloat64ToInt32(Node* node) { |
if (reduction.Changed()) input = reduction.replacement(); |
phi->ReplaceInput(i, input); |
} |
- phi->set_op(common()->Phi(kMachInt32, value_input_count)); |
+ NodeProperties::ChangeOp(phi, |
+ common()->Phi(kMachInt32, value_input_count)); |
return Replace(phi); |
} |
} |
@@ -776,10 +779,10 @@ Reduction MachineOperatorReducer::ReduceWord32Shl(Node* node) { |
if (m.left().IsWord32Sar() || m.left().IsWord32Shr()) { |
Int32BinopMatcher mleft(m.left().node()); |
if (mleft.right().Is(m.right().Value())) { |
- node->set_op(machine()->Word32And()); |
node->ReplaceInput(0, mleft.left().node()); |
node->ReplaceInput(1, |
Uint32Constant(~((1U << m.right().Value()) - 1U))); |
+ NodeProperties::ChangeOp(node, machine()->Word32And()); |
Reduction reduction = ReduceWord32And(node); |
return reduction.Changed() ? reduction : Changed(node); |
} |
@@ -800,9 +803,9 @@ Reduction MachineOperatorReducer::ReduceWord32Sar(Node* node) { |
if (mleft.left().IsComparison()) { |
if (m.right().Is(31) && mleft.right().Is(31)) { |
// Comparison << 31 >> 31 => 0 - Comparison |
- node->set_op(machine()->Int32Sub()); |
node->ReplaceInput(0, Int32Constant(0)); |
node->ReplaceInput(1, mleft.left().node()); |
+ NodeProperties::ChangeOp(node, machine()->Int32Sub()); |
Reduction const reduction = ReduceInt32Sub(node); |
return reduction.Changed() ? reduction : Changed(node); |
} |
@@ -859,9 +862,9 @@ Reduction MachineOperatorReducer::ReduceWord32And(Node* node) { |
if (mleft.right().HasValue() && |
(mleft.right().Value() & mask) == mleft.right().Value()) { |
// (x + (K << L)) & (-1 << L) => (x & (-1 << L)) + (K << L) |
- node->set_op(machine()->Int32Add()); |
node->ReplaceInput(0, Word32And(mleft.left().node(), m.right().node())); |
node->ReplaceInput(1, mleft.right().node()); |
+ NodeProperties::ChangeOp(node, machine()->Int32Add()); |
Reduction const reduction = ReduceInt32Add(node); |
return reduction.Changed() ? reduction : Changed(node); |
} |
@@ -869,10 +872,10 @@ Reduction MachineOperatorReducer::ReduceWord32And(Node* node) { |
Int32BinopMatcher mleftleft(mleft.left().node()); |
if (mleftleft.right().IsMultipleOf(-mask)) { |
// (y * (K << L) + x) & (-1 << L) => (x & (-1 << L)) + y * (K << L) |
- node->set_op(machine()->Int32Add()); |
node->ReplaceInput(0, |
Word32And(mleft.right().node(), m.right().node())); |
node->ReplaceInput(1, mleftleft.node()); |
+ NodeProperties::ChangeOp(node, machine()->Int32Add()); |
Reduction const reduction = ReduceInt32Add(node); |
return reduction.Changed() ? reduction : Changed(node); |
} |
@@ -881,10 +884,10 @@ Reduction MachineOperatorReducer::ReduceWord32And(Node* node) { |
Int32BinopMatcher mleftright(mleft.right().node()); |
if (mleftright.right().IsMultipleOf(-mask)) { |
// (x + y * (K << L)) & (-1 << L) => (x & (-1 << L)) + y * (K << L) |
- node->set_op(machine()->Int32Add()); |
node->ReplaceInput(0, |
Word32And(mleft.left().node(), m.right().node())); |
node->ReplaceInput(1, mleftright.node()); |
+ NodeProperties::ChangeOp(node, machine()->Int32Add()); |
Reduction const reduction = ReduceInt32Add(node); |
return reduction.Changed() ? reduction : Changed(node); |
} |
@@ -893,10 +896,10 @@ Reduction MachineOperatorReducer::ReduceWord32And(Node* node) { |
Int32BinopMatcher mleftleft(mleft.left().node()); |
if (mleftleft.right().Is(base::bits::CountTrailingZeros32(mask))) { |
// (y << L + x) & (-1 << L) => (x & (-1 << L)) + y << L |
- node->set_op(machine()->Int32Add()); |
node->ReplaceInput(0, |
Word32And(mleft.right().node(), m.right().node())); |
node->ReplaceInput(1, mleftleft.node()); |
+ NodeProperties::ChangeOp(node, machine()->Int32Add()); |
Reduction const reduction = ReduceInt32Add(node); |
return reduction.Changed() ? reduction : Changed(node); |
} |
@@ -905,10 +908,10 @@ Reduction MachineOperatorReducer::ReduceWord32And(Node* node) { |
Int32BinopMatcher mleftright(mleft.right().node()); |
if (mleftright.right().Is(base::bits::CountTrailingZeros32(mask))) { |
// (x + y << L) & (-1 << L) => (x & (-1 << L)) + y << L |
- node->set_op(machine()->Int32Add()); |
node->ReplaceInput(0, |
Word32And(mleft.left().node(), m.right().node())); |
node->ReplaceInput(1, mleftright.node()); |
+ NodeProperties::ChangeOp(node, machine()->Int32Add()); |
Reduction const reduction = ReduceInt32Add(node); |
return reduction.Changed() ? reduction : Changed(node); |
} |
@@ -975,9 +978,9 @@ Reduction MachineOperatorReducer::ReduceWord32Or(Node* node) { |
if (!msub.left().Is(32) || msub.right().node() != y) return NoChange(); |
} |
- node->set_op(machine()->Word32Ror()); |
node->ReplaceInput(0, mshl.left().node()); |
node->ReplaceInput(1, mshr.right().node()); |
+ NodeProperties::ChangeOp(node, machine()->Word32Ror()); |
return Changed(node); |
} |
@@ -1040,13 +1043,13 @@ Reduction MachineOperatorReducer::ReduceFloat64Compare(Node* node) { |
m.right().IsChangeFloat32ToFloat64())) { |
switch (node->opcode()) { |
case IrOpcode::kFloat64Equal: |
- node->set_op(machine()->Float32Equal()); |
+ NodeProperties::ChangeOp(node, machine()->Float32Equal()); |
break; |
case IrOpcode::kFloat64LessThan: |
- node->set_op(machine()->Float32LessThan()); |
+ NodeProperties::ChangeOp(node, machine()->Float32LessThan()); |
break; |
case IrOpcode::kFloat64LessThanOrEqual: |
- node->set_op(machine()->Float32LessThanOrEqual()); |
+ NodeProperties::ChangeOp(node, machine()->Float32LessThanOrEqual()); |
break; |
default: |
return NoChange(); |