| Index: runtime/vm/flow_graph_optimizer.cc
|
| diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
|
| index 3b505442a95c3a3973240cb1ddf6beaecbfe801c..feac93eb05c4c3ceb3e624467bcffde7cfe34c6e 100644
|
| --- a/runtime/vm/flow_graph_optimizer.cc
|
| +++ b/runtime/vm/flow_graph_optimizer.cc
|
| @@ -3277,6 +3277,26 @@ bool FlowGraphOptimizer::TryInlineFloat64x2Method(
|
| ReplaceCall(call, zeroArg);
|
| return true;
|
| }
|
| + case MethodRecognizer::kFloat64x2Scale:
|
| + case MethodRecognizer::kFloat64x2WithX:
|
| + case MethodRecognizer::kFloat64x2WithY:
|
| + case MethodRecognizer::kFloat64x2Min:
|
| + case MethodRecognizer::kFloat64x2Max: {
|
| + Definition* left = call->ArgumentAt(0);
|
| + Definition* right = call->ArgumentAt(1);
|
| + // Type check left.
|
| + AddCheckClass(left,
|
| + ICData::ZoneHandle(
|
| + call->ic_data()->AsUnaryClassChecksForArgNr(0)),
|
| + call->deopt_id(),
|
| + call->env(),
|
| + call);
|
| + Float64x2OneArgInstr* zeroArg =
|
| + new Float64x2OneArgInstr(recognized_kind, new Value(left),
|
| + new Value(right), call->deopt_id());
|
| + ReplaceCall(call, zeroArg);
|
| + return true;
|
| + }
|
| default:
|
| return false;
|
| }
|
| @@ -7982,12 +8002,19 @@ void ConstantPropagator::VisitFloat64x2Constructor(
|
| SetValue(instr, non_constant_);
|
| }
|
|
|
| +
|
| void ConstantPropagator::VisitFloat64x2ZeroArg(Float64x2ZeroArgInstr* instr) {
|
| // TODO(johnmccutchan): Implement constant propagation.
|
| SetValue(instr, non_constant_);
|
| }
|
|
|
|
|
| +void ConstantPropagator::VisitFloat64x2OneArg(Float64x2OneArgInstr* instr) {
|
| + // TODO(johnmccutchan): Implement constant propagation.
|
| + SetValue(instr, non_constant_);
|
| +}
|
| +
|
| +
|
| void ConstantPropagator::VisitMathUnary(MathUnaryInstr* instr) {
|
| const Object& value = instr->value()->definition()->constant_value();
|
| if (IsNonConstant(value)) {
|
|
|