Index: runtime/vm/flow_graph.cc |
diff --git a/runtime/vm/flow_graph.cc b/runtime/vm/flow_graph.cc |
index 4eb78fa1c45086e2b268e62b565709f38d45ee23..16ed1ebacf2ba492cc0366c771511fe4e3790cf0 100644 |
--- a/runtime/vm/flow_graph.cc |
+++ b/runtime/vm/flow_graph.cc |
@@ -2052,7 +2052,6 @@ void FlowGraph::TryOptimizePatterns() { |
} |
} |
TryMergeTruncDivMod(&div_mod_merge); |
- TryMergeMathUnary(&sin_cos_merge); |
} |
} |
@@ -2225,63 +2224,6 @@ void FlowGraph::TryMergeTruncDivMod( |
} |
-// Tries to merge MathUnary operations, in this case sine and cosine. |
-void FlowGraph::TryMergeMathUnary( |
- GrowableArray<InvokeMathCFunctionInstr*>* merge_candidates) { |
- if (!FlowGraphCompiler::SupportsSinCos() || !CanUnboxDouble() || |
- !FLAG_merge_sin_cos) { |
- return; |
- } |
- if (merge_candidates->length() < 2) { |
- // Need at least a SIN and a COS. |
- return; |
- } |
- for (intptr_t i = 0; i < merge_candidates->length(); i++) { |
- InvokeMathCFunctionInstr* curr_instr = (*merge_candidates)[i]; |
- if (curr_instr == NULL) { |
- // Instruction was merged already. |
- continue; |
- } |
- const MethodRecognizer::Kind kind = curr_instr->recognized_kind(); |
- ASSERT((kind == MethodRecognizer::kMathSin) || |
- (kind == MethodRecognizer::kMathCos)); |
- // Check if there is sin/cos binop with same inputs. |
- const MethodRecognizer::Kind other_kind = |
- (kind == MethodRecognizer::kMathSin) ? MethodRecognizer::kMathCos |
- : MethodRecognizer::kMathSin; |
- Definition* def = curr_instr->InputAt(0)->definition(); |
- for (intptr_t k = i + 1; k < merge_candidates->length(); k++) { |
- InvokeMathCFunctionInstr* other_op = (*merge_candidates)[k]; |
- // 'other_op' can be NULL if it was already merged. |
- if ((other_op != NULL) && (other_op->recognized_kind() == other_kind) && |
- (other_op->InputAt(0)->definition() == def)) { |
- (*merge_candidates)[k] = NULL; // Clear it. |
- ASSERT(curr_instr->HasUses()); |
- AppendExtractNthOutputForMerged(curr_instr, |
- MergedMathInstr::OutputIndexOf(kind), |
- kUnboxedDouble, kDoubleCid); |
- ASSERT(other_op->HasUses()); |
- AppendExtractNthOutputForMerged( |
- other_op, MergedMathInstr::OutputIndexOf(other_kind), |
- kUnboxedDouble, kDoubleCid); |
- ZoneGrowableArray<Value*>* args = new (Z) ZoneGrowableArray<Value*>(1); |
- args->Add(new (Z) Value(curr_instr->InputAt(0)->definition())); |
- // Replace with SinCos. |
- MergedMathInstr* sin_cos = new (Z) MergedMathInstr( |
- args, curr_instr->DeoptimizationTarget(), MergedMathInstr::kSinCos); |
- curr_instr->ReplaceWith(sin_cos, NULL); |
- other_op->ReplaceUsesWith(sin_cos); |
- other_op->RemoveFromGraph(); |
- // Only one merge possible. Because canonicalization happens later, |
- // more candidates are possible. |
- // TODO(srdjan): Allow merging of sin/cos into sincos. |
- break; |
- } |
- } |
- } |
-} |
- |
- |
void FlowGraph::AppendExtractNthOutputForMerged(Definition* instr, |
intptr_t index, |
Representation rep, |