diff options
Diffstat (limited to 'deps/v8/src/compiler/scheduler.h')
-rw-r--r-- | deps/v8/src/compiler/scheduler.h | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/deps/v8/src/compiler/scheduler.h b/deps/v8/src/compiler/scheduler.h index 9da0b6daa4..269c271ae5 100644 --- a/deps/v8/src/compiler/scheduler.h +++ b/deps/v8/src/compiler/scheduler.h @@ -5,8 +5,8 @@ #ifndef V8_COMPILER_SCHEDULER_H_ #define V8_COMPILER_SCHEDULER_H_ -#include "src/v8.h" - +#include "src/base/flags.h" +#include "src/compiler/node.h" #include "src/compiler/opcodes.h" #include "src/compiler/schedule.h" #include "src/compiler/zone-pool.h" @@ -16,17 +16,24 @@ namespace v8 { namespace internal { namespace compiler { +// Forward declarations. class CFGBuilder; class ControlEquivalence; +class Graph; class SpecialRPONumberer; + // Computes a schedule from a graph, placing nodes into basic blocks and // ordering the basic blocks in the special RPO order. class Scheduler { public: + // Flags that control the mode of operation. + enum Flag { kNoFlags = 0u, kSplitNodes = 1u << 1 }; + typedef base::Flags<Flag> Flags; + // The complete scheduling algorithm. Creates a new schedule and places all // nodes from the graph into it. - static Schedule* ComputeSchedule(Zone* zone, Graph* graph); + static Schedule* ComputeSchedule(Zone* zone, Graph* graph, Flags flags); // Compute the RPO of blocks in an existing schedule. static BasicBlockVector* ComputeSpecialRPO(Zone* zone, Schedule* schedule); @@ -56,6 +63,7 @@ class Scheduler { Zone* zone_; Graph* graph_; Schedule* schedule_; + Flags flags_; NodeVectorVector scheduled_nodes_; // Per-block list of nodes in reverse. NodeVector schedule_root_nodes_; // Fixed root nodes seed the worklist. ZoneQueue<Node*> schedule_queue_; // Worklist of schedulable nodes. @@ -64,7 +72,7 @@ class Scheduler { SpecialRPONumberer* special_rpo_; // Special RPO numbering of blocks. ControlEquivalence* equivalence_; // Control dependence equivalence. - Scheduler(Zone* zone, Graph* graph, Schedule* schedule); + Scheduler(Zone* zone, Graph* graph, Schedule* schedule, Flags flags); inline SchedulerData DefaultSchedulerData(); inline SchedulerData* GetData(Node* node); @@ -76,7 +84,6 @@ class Scheduler { void IncrementUnscheduledUseCount(Node* node, int index, Node* from); void DecrementUnscheduledUseCount(Node* node, int index, Node* from); - BasicBlock* GetCommonDominator(BasicBlock* b1, BasicBlock* b2); void PropagateImmediateDominators(BasicBlock* block); // Phase 1: Build control-flow graph. @@ -107,6 +114,9 @@ class Scheduler { void MovePlannedNodes(BasicBlock* from, BasicBlock* to); }; + +DEFINE_OPERATORS_FOR_FLAGS(Scheduler::Flags) + } // namespace compiler } // namespace internal } // namespace v8 |