#include "llvm/Analysis/LoopPass.h"
#include "llvm/Analysis/ScalarEvolution.h"
-#include <llvm/ADT/SmallVector.h>
+#include "llvm/ADT/SmallVector.h"
#include <map>
namespace llvm {
class DominatorTree;
class Instruction;
class Value;
-class IVUsersOfOneStride;
+struct IVUsersOfOneStride;
/// IVStrideUse - Keep track of one use of a strided induction variable, where
/// the stride is stored externally. The Offset member keeps track of the
class IVStrideUse : public CallbackVH, public ilist_node<IVStrideUse> {
public:
IVStrideUse(IVUsersOfOneStride *parent,
- const SCEV* offset,
+ const SCEV *offset,
Instruction* U, Value *O)
: CallbackVH(U), Parent(parent), Offset(offset),
OperandValToReplace(O),
/// getOffset - Return the offset to add to a theoeretical induction
/// variable that starts at zero and counts up by the stride to compute
/// the value for the use. This always has the same type as the stride.
- const SCEV* getOffset() const { return Offset; }
+ const SCEV *getOffset() const { return Offset; }
/// setOffset - Assign a new offset to this use.
- void setOffset(const SCEV* Val) {
+ void setOffset(const SCEV *Val) {
Offset = Val;
}
IVUsersOfOneStride *Parent;
/// Offset - The offset to add to the base induction expression.
- const SCEV* Offset;
+ const SCEV *Offset;
/// OperandValToReplace - The Value of the operand in the user instruction
/// that this IVStrideUse is representing.
/// initial value and the operand that uses the IV.
ilist<IVStrideUse> Users;
- void addUser(const SCEV* Offset, Instruction *User, Value *Operand) {
+ void addUser(const SCEV *Offset, Instruction *User, Value *Operand) {
Users.push_back(new IVStrideUse(this, Offset, User, Operand));
}
};
/// IVUsesByStride - A mapping from the strides in StrideOrder to the
/// uses in IVUses.
- std::map<const SCEV*, IVUsersOfOneStride*> IVUsesByStride;
+ std::map<const SCEV *, IVUsersOfOneStride*> IVUsesByStride;
/// StrideOrder - An ordering of the keys in IVUsesByStride that is stable:
/// We use this to iterate over the IVUsesByStride collection without being
/// dependent on random ordering of pointers in the process.
- SmallVector<const SCEV*, 16> StrideOrder;
+ SmallVector<const SCEV *, 16> StrideOrder;
private:
virtual void getAnalysisUsage(AnalysisUsage &AU) const;
/// getReplacementExpr - Return a SCEV expression which computes the
/// value of the OperandValToReplace of the given IVStrideUse.
- const SCEV* getReplacementExpr(const IVStrideUse &U) const;
+ const SCEV *getReplacementExpr(const IVStrideUse &U) const;
void print(raw_ostream &OS, const Module* = 0) const;
virtual void print(std::ostream &OS, const Module* = 0) const;