OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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.h" | 5 #include "vm/flow_graph.h" |
6 | 6 |
7 #include "vm/bit_vector.h" | 7 #include "vm/bit_vector.h" |
8 #include "vm/flow_graph_builder.h" | 8 #include "vm/flow_graph_builder.h" |
9 #include "vm/intermediate_language.h" | 9 #include "vm/intermediate_language.h" |
10 #include "vm/longjump.h" | 10 #include "vm/longjump.h" |
(...skipping 24 matching lines...) Expand all Loading... |
35 postorder_(), | 35 postorder_(), |
36 reverse_postorder_(), | 36 reverse_postorder_(), |
37 optimized_block_order_(), | 37 optimized_block_order_(), |
38 constant_null_(NULL), | 38 constant_null_(NULL), |
39 constant_dead_(NULL), | 39 constant_dead_(NULL), |
40 block_effects_(NULL), | 40 block_effects_(NULL), |
41 licm_allowed_(true), | 41 licm_allowed_(true), |
42 use_far_branches_(false), | 42 use_far_branches_(false), |
43 loop_headers_(NULL), | 43 loop_headers_(NULL), |
44 loop_invariant_loads_(NULL), | 44 loop_invariant_loads_(NULL), |
45 guarded_fields_(builder.guarded_fields()) { | 45 guarded_fields_(builder.guarded_fields()), |
| 46 deferred_prefixes_(builder.deferred_prefixes()) { |
46 DiscoverBlocks(); | 47 DiscoverBlocks(); |
47 } | 48 } |
48 | 49 |
49 | 50 |
50 void FlowGraph::AddToGuardedFields( | 51 void FlowGraph::AddToGuardedFields( |
51 ZoneGrowableArray<const Field*>* array, | 52 ZoneGrowableArray<const Field*>* array, |
52 const Field* field) { | 53 const Field* field) { |
53 if ((field->guarded_cid() == kDynamicCid) || | 54 if ((field->guarded_cid() == kDynamicCid) || |
54 (field->guarded_cid() == kIllegalCid)) { | 55 (field->guarded_cid() == kIllegalCid)) { |
55 return; | 56 return; |
56 } | 57 } |
57 for (intptr_t j = 0; j < array->length(); j++) { | 58 for (intptr_t j = 0; j < array->length(); j++) { |
58 if ((*array)[j]->raw() == field->raw()) { | 59 if ((*array)[j]->raw() == field->raw()) { |
59 return; | 60 return; |
60 } | 61 } |
61 } | 62 } |
62 array->Add(field); | 63 array->Add(field); |
63 } | 64 } |
64 | 65 |
65 | 66 |
| 67 void FlowGraph::AddToDeferredPrefixes( |
| 68 ZoneGrowableArray<const LibraryPrefix*>* from) { |
| 69 ZoneGrowableArray<const LibraryPrefix*>* to = deferred_prefixes(); |
| 70 for (intptr_t i = 0; i < from->length(); i++) { |
| 71 const LibraryPrefix* prefix = (*from)[i]; |
| 72 for (intptr_t j = 0; j < to->length(); j++) { |
| 73 if ((*to)[j]->raw() == prefix->raw()) { |
| 74 return; |
| 75 } |
| 76 } |
| 77 to->Add(prefix); |
| 78 } |
| 79 } |
| 80 |
| 81 |
66 bool FlowGraph::ShouldReorderBlocks(const Function& function, | 82 bool FlowGraph::ShouldReorderBlocks(const Function& function, |
67 bool is_optimized) { | 83 bool is_optimized) { |
68 return is_optimized && FLAG_reorder_basic_blocks && !function.is_intrinsic(); | 84 return is_optimized && FLAG_reorder_basic_blocks && !function.is_intrinsic(); |
69 } | 85 } |
70 | 86 |
71 | 87 |
72 GrowableArray<BlockEntryInstr*>* FlowGraph::CodegenBlockOrder( | 88 GrowableArray<BlockEntryInstr*>* FlowGraph::CodegenBlockOrder( |
73 bool is_optimized) { | 89 bool is_optimized) { |
74 return ShouldReorderBlocks(parsed_function().function(), is_optimized) | 90 return ShouldReorderBlocks(parsed_function().function(), is_optimized) |
75 ? &optimized_block_order_ | 91 ? &optimized_block_order_ |
(...skipping 1158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1234 } | 1250 } |
1235 | 1251 |
1236 | 1252 |
1237 bool BlockEffects::IsSideEffectFreePath(BlockEntryInstr* from, | 1253 bool BlockEffects::IsSideEffectFreePath(BlockEntryInstr* from, |
1238 BlockEntryInstr* to) const { | 1254 BlockEntryInstr* to) const { |
1239 return available_at_[to->postorder_number()]->Contains( | 1255 return available_at_[to->postorder_number()]->Contains( |
1240 from->postorder_number()); | 1256 from->postorder_number()); |
1241 } | 1257 } |
1242 | 1258 |
1243 } // namespace dart | 1259 } // namespace dart |
OLD | NEW |