Index: runtime/vm/flow_graph_compiler_ia32.cc |
diff --git a/runtime/vm/flow_graph_compiler_ia32.cc b/runtime/vm/flow_graph_compiler_ia32.cc |
index efb9b7b1d9c88e93f8999f384cbfcf0e15996ace..b39fdbdc8a5d9715ed06a1b758331041154d3ae0 100644 |
--- a/runtime/vm/flow_graph_compiler_ia32.cc |
+++ b/runtime/vm/flow_graph_compiler_ia32.cc |
@@ -24,6 +24,7 @@ DEFINE_FLAG(bool, unbox_mints, true, "Optimize 64-bit integer arithmetic."); |
DECLARE_FLAG(int, optimization_counter_threshold); |
DECLARE_FLAG(bool, print_ast); |
DECLARE_FLAG(bool, print_scopes); |
+DECLARE_FLAG(bool, eliminate_type_checks); |
FlowGraphCompiler::~FlowGraphCompiler() { |
@@ -561,6 +562,16 @@ void FlowGraphCompiler::GenerateAssertAssignable(intptr_t token_pos, |
__ cmpl(EAX, raw_null); |
__ j(EQUAL, &is_assignable); |
+ if (!FLAG_eliminate_type_checks) { |
+ // If type checks are not eliminated during the graph building then |
+ // a transition sentinel can be seen here. |
+ const Immediate& raw_transition_sentinel = |
+ Immediate(reinterpret_cast<intptr_t>( |
+ Object::transition_sentinel().raw())); |
+ __ cmpl(EAX, raw_transition_sentinel); |
+ __ j(EQUAL, &is_assignable); |
+ } |
+ |
// Generate throw new TypeError() if the type is malformed. |
if (dst_type.IsMalformed()) { |
const Error& error = Error::Handle(dst_type.malformed_error()); |