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