1 // Copyright 2014 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_SELECT_LOWERING_H_ 6 #define V8_COMPILER_SELECT_LOWERING_H_ 7 8 #include <map> 9 10 #include "src/compiler/graph-reducer.h" 11 #include "src/zone-allocator.h" 12 13 namespace v8 { 14 namespace internal { 15 namespace compiler { 16 17 // Forward declarations. 18 class CommonOperatorBuilder; 19 class Graph; 20 21 22 // Lowers Select nodes to diamonds. 23 class SelectLowering final : public Reducer { 24 public: 25 SelectLowering(Graph* graph, CommonOperatorBuilder* common); 26 ~SelectLowering(); 27 28 Reduction Reduce(Node* node) override; 29 30 private: 31 typedef std::multimap<Node*, Node*, std::less<Node*>, 32 zone_allocator<std::pair<Node* const, Node*>>> Merges; 33 34 bool ReachableFrom(Node* const sink, Node* const source); 35 common()36 CommonOperatorBuilder* common() const { return common_; } graph()37 Graph* graph() const { return graph_; } 38 39 CommonOperatorBuilder* common_; 40 Graph* graph_; 41 Merges merges_; 42 }; 43 44 } // namespace compiler 45 } // namespace internal 46 } // namespace v8 47 48 #endif // V8_COMPILER_SELECT_LOWERING_H_ 49