Index: src/compiler/machine-operator-reducer.cc |
diff --git a/src/compiler/machine-operator-reducer.cc b/src/compiler/machine-operator-reducer.cc |
index 19ea06205361fef01f29d5a2dc22e6067de10554..7271503d46fdcc4f363d0de135e8cc43b636a876 100644 |
--- a/src/compiler/machine-operator-reducer.cc |
+++ b/src/compiler/machine-operator-reducer.cc |
@@ -419,8 +419,12 @@ Reduction MachineOperatorReducer::Reduce(Node* node) { |
if (m.HasValue()) return ReplaceInt64(static_cast<uint64_t>(m.Value())); |
break; |
} |
- case IrOpcode::kTruncateFloat64ToInt32: |
- return ReduceTruncateFloat64ToInt32(node); |
+ case IrOpcode::kTruncateFloat64ToWord32: { |
+ Float64Matcher m(node->InputAt(0)); |
+ if (m.HasValue()) return ReplaceInt32(DoubleToInt32(m.Value())); |
+ if (m.IsChangeInt32ToFloat64()) return Replace(m.node()->InputAt(0)); |
+ return NoChange(); |
+ } |
case IrOpcode::kTruncateInt64ToInt32: { |
Int64Matcher m(node->InputAt(0)); |
if (m.HasValue()) return ReplaceInt32(static_cast<int32_t>(m.Value())); |
@@ -433,6 +437,12 @@ Reduction MachineOperatorReducer::Reduce(Node* node) { |
if (m.IsChangeFloat32ToFloat64()) return Replace(m.node()->InputAt(0)); |
break; |
} |
+ case IrOpcode::kRoundFloat64ToInt32: { |
+ Float64Matcher m(node->InputAt(0)); |
+ if (m.HasValue()) return ReplaceInt32(static_cast<int32_t>(m.Value())); |
+ if (m.IsChangeInt32ToFloat64()) return Replace(m.node()->InputAt(0)); |
+ break; |
+ } |
case IrOpcode::kFloat64InsertLowWord32: |
return ReduceFloat64InsertLowWord32(node); |
case IrOpcode::kFloat64InsertHighWord32: |
@@ -645,37 +655,6 @@ Reduction MachineOperatorReducer::ReduceUint32Mod(Node* node) { |
} |
-Reduction MachineOperatorReducer::ReduceTruncateFloat64ToInt32(Node* node) { |
- Float64Matcher m(node->InputAt(0)); |
- if (m.HasValue()) return ReplaceInt32(DoubleToInt32(m.Value())); |
- if (m.IsChangeInt32ToFloat64()) return Replace(m.node()->InputAt(0)); |
- if (m.IsPhi()) { |
- Node* const phi = m.node(); |
- DCHECK_EQ(MachineRepresentation::kFloat64, PhiRepresentationOf(phi->op())); |
- if (phi->OwnedBy(node)) { |
- // TruncateFloat64ToInt32[mode](Phi[Float64](x1,...,xn)) |
- // => Phi[Int32](TruncateFloat64ToInt32[mode](x1), |
- // ..., |
- // TruncateFloat64ToInt32[mode](xn)) |
- const int value_input_count = phi->InputCount() - 1; |
- for (int i = 0; i < value_input_count; ++i) { |
- Node* input = graph()->NewNode(node->op(), phi->InputAt(i)); |
- // TODO(bmeurer): Reschedule input for reduction once we have Revisit() |
- // instead of recursing into ReduceTruncateFloat64ToInt32() here. |
- Reduction reduction = ReduceTruncateFloat64ToInt32(input); |
- if (reduction.Changed()) input = reduction.replacement(); |
- phi->ReplaceInput(i, input); |
- } |
- NodeProperties::ChangeOp( |
- phi, |
- common()->Phi(MachineRepresentation::kWord32, value_input_count)); |
- return Replace(phi); |
- } |
- } |
- return NoChange(); |
-} |
- |
- |
Reduction MachineOperatorReducer::ReduceStore(Node* node) { |
MachineRepresentation const rep = |
StoreRepresentationOf(node->op()).representation(); |