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

Unified Diff: runtime/vm/flow_graph.h

Issue 10857016: Refactored FlowGraphBuilder into a separate FlowGraph representation. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Revision based on Kevin's review. Created 8 years, 4 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
« no previous file with comments | « runtime/vm/compiler.cc ('k') | runtime/vm/flow_graph.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/flow_graph.h
diff --git a/runtime/vm/flow_graph.h b/runtime/vm/flow_graph.h
new file mode 100644
index 0000000000000000000000000000000000000000..8e75e07c6e573acca6b2c7fa2ce5006cd0d18bc1
--- /dev/null
+++ b/runtime/vm/flow_graph.h
@@ -0,0 +1,116 @@
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+#ifndef VM_FLOW_GRAPH_H_
+#define VM_FLOW_GRAPH_H_
+
+#include "vm/growable_array.h"
+#include "vm/parser.h"
+
+namespace dart {
+
+class BlockEntryInstr;
+class FlowGraphBuilder;
+class GraphEntryInstr;
+class PhiInstr;
+class Value;
+
+// Class to incapsulate the construction and manipulation of the flow graph.
+class FlowGraph: public ZoneAllocated {
+ public:
+ FlowGraph(const FlowGraphBuilder& builder, GraphEntryInstr* graph_entry);
+
+ // Function properties.
+ const ParsedFunction& parsed_function() const {
+ return parsed_function_;
+ }
+ intptr_t parameter_count() const {
+ return copied_parameter_count_ + non_copied_parameter_count_;
+ }
+ intptr_t variable_count() const {
+ return parameter_count() + stack_local_count_;
+ }
+ intptr_t stack_local_count() const {
+ return stack_local_count_;
+ }
+ intptr_t copied_parameter_count() const {
+ return copied_parameter_count_;
+ }
+ intptr_t non_copied_parameter_count() const {
+ return non_copied_parameter_count_;
+ }
+
+ // Flow graph orders.
+ const GrowableArray<BlockEntryInstr*>& preorder() const {
+ return preorder_;
+ }
+ const GrowableArray<BlockEntryInstr*>& postorder() const {
+ return postorder_;
+ }
+ const GrowableArray<BlockEntryInstr*>& reverse_postorder() const {
+ return reverse_postorder_;
+ }
+
+ intptr_t max_virtual_register_number() const {
+ return current_ssa_temp_index();
+ }
+
+ // Operations on the flow graph.
+ void ComputeSSA();
+
+ // TODO(zerny): Once the SSA is feature complete this should be removed.
+ void Bailout(const char* reason) const;
+
+ private:
+ void DiscoverBlocks();
+
+ // SSA transformation methods and fields.
+ void ComputeDominators(
+ GrowableArray<BlockEntryInstr*>* preorder,
+ GrowableArray<intptr_t>* parent,
+ GrowableArray<BitVector*>* dominance_frontier);
+
+ void CompressPath(
+ intptr_t start_index,
+ intptr_t current_index,
+ GrowableArray<intptr_t>* parent,
+ GrowableArray<intptr_t>* label);
+
+ void Rename(GrowableArray<PhiInstr*>* live_phis);
+ void RenameRecursive(
+ BlockEntryInstr* block_entry,
+ GrowableArray<Value*>* env,
+ GrowableArray<PhiInstr*>* live_phis);
+
+ void InsertPhis(
+ const GrowableArray<BlockEntryInstr*>& preorder,
+ const GrowableArray<BitVector*>& assigned_vars,
+ const GrowableArray<BitVector*>& dom_frontier);
+
+ void MarkLivePhis(GrowableArray<PhiInstr*>* live_phis);
+
+ intptr_t current_ssa_temp_index() const { return current_ssa_temp_index_; }
+ intptr_t alloc_ssa_temp_index() { return current_ssa_temp_index_++; }
+
+ // DiscoverBlocks computes parent_ and assigned_vars_ which are then used
+ // if/when computing SSA.
+ GrowableArray<intptr_t> parent_;
+ GrowableArray<BitVector*> assigned_vars_;
+
+ intptr_t current_ssa_temp_index_;
+
+ // Flow graph fields.
+ const ParsedFunction& parsed_function_;
+ const intptr_t copied_parameter_count_;
+ const intptr_t non_copied_parameter_count_;
+ const intptr_t stack_local_count_;
+ GraphEntryInstr* graph_entry_;
+ GrowableArray<BlockEntryInstr*> preorder_;
+ GrowableArray<BlockEntryInstr*> postorder_;
+ GrowableArray<BlockEntryInstr*> reverse_postorder_;
+};
+
+} // namespace dart
+
+#endif // VM_FLOW_GRAPH_H_
« no previous file with comments | « runtime/vm/compiler.cc ('k') | runtime/vm/flow_graph.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698