Added LLVM copyright header (for lack of a better term).
[oota-llvm.git] / include / llvm / Analysis / InductionVariable.h
index 02fa6deedd58481ff647bd3ba559fd24f824f271..26deb832f80770098ce14397cf6c8f8a98f8a3c1 100644 (file)
@@ -1,4 +1,11 @@
-//===- llvm/Analysis/InductionVariable.h - Induction variable ----*- C++ -*--=//
+//===- llvm/Analysis/InductionVariable.h - Induction variables --*- C++ -*-===//
+// 
+//                     The LLVM Compiler Infrastructure
+//
+// This file was developed by the LLVM research group and is distributed under
+// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// 
+//===----------------------------------------------------------------------===//
 //
 // This interface is used to identify and classify induction variables that
 // exist in the program.  Induction variables must contain a PHI node that
 #ifndef LLVM_ANALYSIS_INDUCTIONVARIABLE_H
 #define LLVM_ANALYSIS_INDUCTIONVARIABLE_H
 
+#include <iosfwd>
 class Value;
 class PHINode;
 class Instruction;
-namespace cfg { class LoopInfo; class Loop; }
+class LoopInfo; class Loop;
 
 class InductionVariable {
 public:
   enum iType {               // Identify the type of this induction variable
-    Cannonical,              // Starts at 0, counts by 1
+    Canonical,               // Starts at 0, counts by 1
     SimpleLinear,            // Simple linear: Constant start, constant step
     Linear,                  // General linear:  loop invariant start, and step
     Unknown,                 // Unknown type.  Start & Step are null
   } InductionType;
   
-  Value *Start, *Step;       // Start and step expressions for this indvar
+  Value *Start, *Step, *End; // Start, step, and end expressions for this indvar
   PHINode *Phi;              // The PHI node that corresponds to this indvar
 public:
 
   // Create an induction variable for the specified value.  If it is a PHI, and
   // if it's recognizable, classify it and fill in instance variables.
   //
-  InductionVariable(Instruction *V, cfg::LoopInfo *LoopInfo = 0);
-
+  InductionVariable(PHINode *PN, LoopInfo *LoopInfo = 0);
 
   // Classify Induction
   static enum iType Classify(const Value *Start, const Value *Step,
-                            const cfg::Loop *L = 0);
-                                             
+                            const Loop *L = 0);
+
+  // Get number of times this loop will execute. Returns NULL if unpredictable.
+  Value* getExecutionCount(LoopInfo *LoopInfo);
 
+  void print(std::ostream &OS) const;
 };
 
 #endif