-//===- 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;
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:
// Classify Induction
static enum iType Classify(const Value *Start, const Value *Step,
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