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_COMMON_OPERATOR_REDUCER_H_ 6#define V8_COMPILER_COMMON_OPERATOR_REDUCER_H_ 7 8#include "src/base/compiler-specific.h" 9#include "src/compiler/graph-reducer.h" 10#include "src/globals.h" 11 12namespace v8 { 13namespace internal { 14namespace compiler { 15 16// Forward declarations. 17class CommonOperatorBuilder; 18class Graph; 19class MachineOperatorBuilder; 20class Operator; 21 22 23// Performs strength reduction on nodes that have common operators. 24class V8_EXPORT_PRIVATE CommonOperatorReducer final 25 : public NON_EXPORTED_BASE(AdvancedReducer) { 26 public: 27 CommonOperatorReducer(Editor* editor, Graph* graph, 28 CommonOperatorBuilder* common, 29 MachineOperatorBuilder* machine); 30 ~CommonOperatorReducer() final {} 31 32 Reduction Reduce(Node* node) final; 33 34 private: 35 Reduction ReduceBranch(Node* node); 36 Reduction ReduceDeoptimizeConditional(Node* node); 37 Reduction ReduceMerge(Node* node); 38 Reduction ReduceEffectPhi(Node* node); 39 Reduction ReducePhi(Node* node); 40 Reduction ReduceReturn(Node* node); 41 Reduction ReduceSelect(Node* node); 42 43 Reduction Change(Node* node, Operator const* op, Node* a); 44 Reduction Change(Node* node, Operator const* op, Node* a, Node* b); 45 46 Graph* graph() const { return graph_; } 47 CommonOperatorBuilder* common() const { return common_; } 48 MachineOperatorBuilder* machine() const { return machine_; } 49 Node* dead() const { return dead_; } 50 51 Graph* const graph_; 52 CommonOperatorBuilder* const common_; 53 MachineOperatorBuilder* const machine_; 54 Node* const dead_; 55}; 56 57} // namespace compiler 58} // namespace internal 59} // namespace v8 60 61#endif // V8_COMPILER_COMMON_OPERATOR_REDUCER_H_ 62