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:
PeeledIteration()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