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_LOOP_PEELING_H_ 6 #define V8_COMPILER_LOOP_PEELING_H_ 7 8 #include "src/compiler/loop-analysis.h" 9 10 namespace v8 { 11 namespace internal { 12 namespace compiler { 13 14 // Represents the output of peeling a loop, which is basically the mapping 15 // from the body of the loop to the corresponding nodes in the peeled 16 // iteration. 17 class PeeledIteration : public ZoneObject { 18 public: 19 // Maps {node} to its corresponding copy in the peeled iteration, if 20 // the node was part of the body of the loop. Returns {node} otherwise. 21 Node* map(Node* node); 22 23 protected: 24 PeeledIteration() {} 25 }; 26 27 class CommonOperatorBuilder; 28 29 // Implements loop peeling. 30 class LoopPeeler { 31 public: 32 static bool CanPeel(LoopTree* loop_tree, LoopTree::Loop* loop); 33 static PeeledIteration* Peel(Graph* graph, CommonOperatorBuilder* common, 34 LoopTree* loop_tree, LoopTree::Loop* loop, 35 Zone* tmp_zone); 36 }; 37 38 39 } // namespace compiler 40 } // namespace internal 41 } // namespace v8 42 43 #endif // V8_COMPILER_LOOP_PEELING_H_ 44