| Index: runtime/vm/aot_optimizer.cc
|
| diff --git a/runtime/vm/aot_optimizer.cc b/runtime/vm/aot_optimizer.cc
|
| index a193dcfc0ef72a6939864661bab421e2d471ce60..97b51f8f13896dd26dcae26fcf22e997450fe6ac 100644
|
| --- a/runtime/vm/aot_optimizer.cc
|
| +++ b/runtime/vm/aot_optimizer.cc
|
| @@ -2743,4 +2743,26 @@ bool AotOptimizer::TryInlineInstanceSetter(InstanceCallInstr* instr,
|
| }
|
|
|
|
|
| +void AotOptimizer::ReplaceArrayBoundChecks() {
|
| + for (BlockIterator block_it = flow_graph_->reverse_postorder_iterator();
|
| + !block_it.Done();
|
| + block_it.Advance()) {
|
| + ForwardInstructionIterator it(block_it.Current());
|
| + current_iterator_ = ⁢
|
| + for (; !it.Done(); it.Advance()) {
|
| + CheckArrayBoundInstr* check = it.Current()->AsCheckArrayBound();
|
| + if (check != NULL) {
|
| + GenericCheckBoundInstr* new_check = new(Z) GenericCheckBoundInstr(
|
| + new(Z) Value(check->length()->definition()),
|
| + new(Z) Value(check->index()->definition()),
|
| + check->deopt_id());
|
| + flow_graph_->InsertBefore(check, new_check,
|
| + check->env(), FlowGraph::kEffect);
|
| + current_iterator()->RemoveCurrentFromGraph();
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +
|
| } // namespace dart
|
|
|