Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(32)

Unified Diff: runtime/vm/flow_graph_compiler_ia32.cc

Issue 12260008: Reapply r18377 it was reverted due to the unrelated bug it surfaced. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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());

Powered by Google App Engine
This is Rietveld 408576698