Index: runtime/vm/flow_graph_compiler_x64.cc |
diff --git a/runtime/vm/flow_graph_compiler_x64.cc b/runtime/vm/flow_graph_compiler_x64.cc |
index 76e976e4666ab1cd9e16afb7a7a254b912776273..2930ea4ad88aa723829e8ac97c1a31fdf673b86a 100644 |
--- a/runtime/vm/flow_graph_compiler_x64.cc |
+++ b/runtime/vm/flow_graph_compiler_x64.cc |
@@ -23,7 +23,7 @@ DEFINE_FLAG(bool, trap_on_deoptimization, false, "Trap on deoptimization."); |
DECLARE_FLAG(int, optimization_counter_threshold); |
DECLARE_FLAG(bool, print_ast); |
DECLARE_FLAG(bool, print_scopes); |
-DECLARE_FLAG(bool, use_sse41); |
+DECLARE_FLAG(bool, eliminate_type_checks); |
FlowGraphCompiler::~FlowGraphCompiler() { |
@@ -561,6 +561,13 @@ void FlowGraphCompiler::GenerateAssertAssignable(intptr_t token_pos, |
__ cmpq(RAX, 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. |
+ __ CompareObject(RAX, Object::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()); |