Index: runtime/vm/flow_graph_optimizer.cc |
=================================================================== |
--- runtime/vm/flow_graph_optimizer.cc (revision 20999) |
+++ runtime/vm/flow_graph_optimizer.cc (working copy) |
@@ -21,6 +21,9 @@ |
DEFINE_FLAG(bool, array_bounds_check_elimination, true, |
"Eliminate redundant bounds checks."); |
+// TODO(srdjan): Enable/remove flag once it works. |
+DEFINE_FLAG(bool, inline_getter_with_guarded_cid, false, |
+ "Inline implict getter using guarded cid"); |
DEFINE_FLAG(bool, load_cse, true, "Use redundant load elimination."); |
DEFINE_FLAG(int, max_polymorphic_checks, 4, |
"Maximum number of polymorphic check, otherwise it is megamorphic."); |
@@ -1196,12 +1199,10 @@ |
AbstractType::ZoneHandle(field.type()), |
field.is_final()); |
if (field.guarded_cid() != kIllegalCid) { |
- Field* the_field = &Field::ZoneHandle(field.raw()); |
if (!field.is_nullable() || (field.guarded_cid() == kNullCid)) { |
load->set_result_cid(field.guarded_cid()); |
- guarded_fields_->Add(the_field); |
} |
- load->set_field(the_field); |
+ load->set_field(&Field::ZoneHandle(field.raw())); |
} |
load->set_field_name(String::Handle(field.name()).ToCString()); |
@@ -1210,12 +1211,14 @@ |
call->RemoveEnvironment(); |
ReplaceCall(call, load); |
- if (load->result_cid() != kDynamicCid) { |
- // Reset value types if guarded_cid was used. |
- for (Value::Iterator it(load->input_use_list()); |
- !it.Done(); |
- it.Advance()) { |
- it.Current()->SetReachingType(NULL); |
+ if (FLAG_inline_getter_with_guarded_cid) { |
+ if (load->result_cid() != kDynamicCid) { |
+ // Reset value types if guarded_cid was used. |
+ for (Value::Iterator it(load->input_use_list()); |
+ !it.Done(); |
+ it.Advance()) { |
+ it.Current()->SetReachingType(NULL); |
+ } |
} |
} |
} |