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

Unified Diff: runtime/vm/flow_graph_compiler_shared.cc

Issue 10538024: Implemented missing instructions in ia32, more sharing, removed bailouts, enable optimiziations on … (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 6 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_shared.cc
===================================================================
--- runtime/vm/flow_graph_compiler_shared.cc (revision 8338)
+++ runtime/vm/flow_graph_compiler_shared.cc (working copy)
@@ -5,6 +5,7 @@
#include "vm/flow_graph_compiler_shared.h"
#include "vm/debugger.h"
+#include "vm/il_printer.h"
#include "vm/intermediate_language.h"
#include "vm/intrinsifier.h"
#include "vm/longjump.h"
@@ -13,6 +14,7 @@
namespace dart {
+DECLARE_FLAG(bool, code_comments);
DECLARE_FLAG(bool, enable_type_checks);
DECLARE_FLAG(bool, intrinsify);
DECLARE_FLAG(int, optimization_counter_threshold);
@@ -325,6 +327,44 @@
assembler()->Bind(&unknown);
}
+
+
+void FlowGraphCompilerShared::EmitComment(Instruction* instr) {
+ char buffer[80];
+ BufferFormatter f(buffer, sizeof(buffer));
+ instr->PrintTo(&f);
+ assembler()->Comment("@%d: %s", instr->cid(), buffer);
+}
+
+
+void FlowGraphCompilerShared::VisitBlocks() {
+ for (intptr_t i = 0; i < block_order().length(); ++i) {
+ assembler()->Comment("B%d", i);
+ // Compile the block entry.
+ set_current_block(block_order()[i]);
+ current_block()->PrepareEntry(this);
+ Instruction* instr = current_block()->StraightLineSuccessor();
+ // Compile all successors until an exit, branch, or a block entry.
+ while ((instr != NULL) && !instr->IsBlockEntry()) {
+ if (FLAG_code_comments) EmitComment(instr);
+ ASSERT(instr->locs() != NULL);
+ EmitInstructionPrologue(instr);
+ instr->EmitNativeCode(this);
+ instr = instr->StraightLineSuccessor();
+ }
+ BlockEntryInstr* successor =
+ (instr == NULL) ? NULL : instr->AsBlockEntry();
+ if (successor != NULL) {
+ // Block ended with a "goto". We can fall through if it is the
+ // next block in the list. Otherwise, we need a jump.
+ if ((i == block_order().length() - 1) ||
+ (block_order()[i + 1] != successor)) {
+ assembler()->jmp(GetBlockLabel(successor));
+ }
+ }
+ }
+}
+
} // namespace dart

Powered by Google App Engine
This is Rietveld 408576698