OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/flow_graph_inliner.h" | 5 #include "vm/flow_graph_inliner.h" |
6 | 6 |
7 #include "vm/aot_optimizer.h" | 7 #include "vm/aot_optimizer.h" |
8 #include "vm/block_scheduler.h" | 8 #include "vm/block_scheduler.h" |
9 #include "vm/branch_optimizer.h" | 9 #include "vm/branch_optimizer.h" |
10 #include "vm/compiler.h" | 10 #include "vm/compiler.h" |
(...skipping 1400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1411 // The call target is shared with a previous inlined variant. Share | 1411 // The call target is shared with a previous inlined variant. Share |
1412 // the graph. This requires a join block at the entry, and edge-split | 1412 // the graph. This requires a join block at the entry, and edge-split |
1413 // form requires a target for each branch. | 1413 // form requires a target for each branch. |
1414 // | 1414 // |
1415 // Represent the sharing by recording a fresh target for the first | 1415 // Represent the sharing by recording a fresh target for the first |
1416 // variant and the shared join for all later variants. | 1416 // variant and the shared join for all later variants. |
1417 if (inlined_entries_[i]->IsGraphEntry()) { | 1417 if (inlined_entries_[i]->IsGraphEntry()) { |
1418 // Convert the old target entry to a new join entry. | 1418 // Convert the old target entry to a new join entry. |
1419 TargetEntryInstr* old_target = | 1419 TargetEntryInstr* old_target = |
1420 inlined_entries_[i]->AsGraphEntry()->normal_entry(); | 1420 inlined_entries_[i]->AsGraphEntry()->normal_entry(); |
1421 // Unuse all inputs in the the old graph entry since it is not part of | 1421 // Unuse all inputs in the old graph entry since it is not part of |
1422 // the graph anymore. A new target be created instead. | 1422 // the graph anymore. A new target be created instead. |
1423 inlined_entries_[i]->AsGraphEntry()->UnuseAllInputs(); | 1423 inlined_entries_[i]->AsGraphEntry()->UnuseAllInputs(); |
1424 | 1424 |
1425 JoinEntryInstr* new_join = | 1425 JoinEntryInstr* new_join = |
1426 BranchSimplifier::ToJoinEntry(zone(), old_target); | 1426 BranchSimplifier::ToJoinEntry(zone(), old_target); |
1427 old_target->ReplaceAsPredecessorWith(new_join); | 1427 old_target->ReplaceAsPredecessorWith(new_join); |
1428 for (intptr_t j = 0; j < old_target->dominated_blocks().length(); ++j) { | 1428 for (intptr_t j = 0; j < old_target->dominated_blocks().length(); ++j) { |
1429 BlockEntryInstr* block = old_target->dominated_blocks()[j]; | 1429 BlockEntryInstr* block = old_target->dominated_blocks()[j]; |
1430 new_join->AddDominatedBlock(block); | 1430 new_join->AddDominatedBlock(block); |
1431 } | 1431 } |
(...skipping 1695 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3127 return InlineDoubleOp(flow_graph, Token::kMUL, call, entry, last); | 3127 return InlineDoubleOp(flow_graph, Token::kMUL, call, entry, last); |
3128 case MethodRecognizer::kDoubleDiv: | 3128 case MethodRecognizer::kDoubleDiv: |
3129 return InlineDoubleOp(flow_graph, Token::kDIV, call, entry, last); | 3129 return InlineDoubleOp(flow_graph, Token::kDIV, call, entry, last); |
3130 default: | 3130 default: |
3131 return false; | 3131 return false; |
3132 } | 3132 } |
3133 } | 3133 } |
3134 | 3134 |
3135 | 3135 |
3136 } // namespace dart | 3136 } // namespace dart |
OLD | NEW |