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_DEAD_CODE_ELIMINATION_H_ 6 #define V8_COMPILER_DEAD_CODE_ELIMINATION_H_ 7 8 #include "src/compiler/graph-reducer.h" 9 10 namespace v8 { 11 namespace internal { 12 namespace compiler { 13 14 // Forward declarations. 15 class CommonOperatorBuilder; 16 17 18 // Propagates {Dead} control through the graph and thereby removes dead code. 19 // Note that this does not include trimming dead uses from the graph, and it 20 // also does not include detecting dead code by any other means than seeing a 21 // {Dead} control input; that is left to other reducers. 22 class DeadCodeElimination final : public AdvancedReducer { 23 public: 24 DeadCodeElimination(Editor* editor, Graph* graph, 25 CommonOperatorBuilder* common); ~DeadCodeElimination()26 ~DeadCodeElimination() final {} 27 28 Reduction Reduce(Node* node) final; 29 30 private: 31 Reduction ReduceEnd(Node* node); 32 Reduction ReduceLoopOrMerge(Node* node); 33 Reduction ReduceNode(Node* node); 34 35 void TrimMergeOrPhi(Node* node, int size); 36 graph()37 Graph* graph() const { return graph_; } common()38 CommonOperatorBuilder* common() const { return common_; } dead()39 Node* dead() const { return dead_; } 40 41 Graph* const graph_; 42 CommonOperatorBuilder* const common_; 43 Node* const dead_; 44 45 DISALLOW_COPY_AND_ASSIGN(DeadCodeElimination); 46 }; 47 48 } // namespace compiler 49 } // namespace internal 50 } // namespace v8 51 52 #endif // V8_COMPILER_DEAD_CODE_ELIMINATION_H_ 53