Home | History | Annotate | Download | only in compiler
      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