1 // Copyright 2015 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef V8_COMPILER_CONTROL_FLOW_OPTIMIZER_H_ 6 #define V8_COMPILER_CONTROL_FLOW_OPTIMIZER_H_ 7 8 #include "src/compiler/node-marker.h" 9 #include "src/zone-containers.h" 10 11 namespace v8 { 12 namespace internal { 13 namespace compiler { 14 15 // Forward declarations. 16 class CommonOperatorBuilder; 17 class Graph; 18 class MachineOperatorBuilder; 19 class Node; 20 21 22 class ControlFlowOptimizer final { 23 public: 24 ControlFlowOptimizer(Graph* graph, CommonOperatorBuilder* common, 25 MachineOperatorBuilder* machine, Zone* zone); 26 27 void Optimize(); 28 29 private: 30 void Enqueue(Node* node); 31 void VisitNode(Node* node); 32 void VisitBranch(Node* node); 33 34 bool TryBuildSwitch(Node* node); 35 bool TryCloneBranch(Node* node); 36 37 Graph* graph() const { return graph_; } 38 CommonOperatorBuilder* common() const { return common_; } 39 MachineOperatorBuilder* machine() const { return machine_; } 40 Zone* zone() const { return zone_; } 41 42 Graph* const graph_; 43 CommonOperatorBuilder* const common_; 44 MachineOperatorBuilder* const machine_; 45 ZoneQueue<Node*> queue_; 46 NodeMarker<bool> queued_; 47 Zone* const zone_; 48 49 DISALLOW_COPY_AND_ASSIGN(ControlFlowOptimizer); 50 }; 51 52 } // namespace compiler 53 } // namespace internal 54 } // namespace v8 55 56 #endif // V8_COMPILER_CONTROL_FLOW_OPTIMIZER_H_ 57