diff options
Diffstat (limited to 'include/llvm/Analysis/LoopDependenceAnalysis.h')
| -rw-r--r-- | include/llvm/Analysis/LoopDependenceAnalysis.h | 124 | 
1 files changed, 0 insertions, 124 deletions
diff --git a/include/llvm/Analysis/LoopDependenceAnalysis.h b/include/llvm/Analysis/LoopDependenceAnalysis.h deleted file mode 100644 index f195d2782418..000000000000 --- a/include/llvm/Analysis/LoopDependenceAnalysis.h +++ /dev/null @@ -1,124 +0,0 @@ -//===- llvm/Analysis/LoopDependenceAnalysis.h --------------- -*- C++ -*---===// -// -//                     The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// LoopDependenceAnalysis is an LLVM pass that analyses dependences in memory -// accesses in loops. -// -// Please note that this is work in progress and the interface is subject to -// change. -// -// TODO: adapt as interface progresses -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_ANALYSIS_LOOP_DEPENDENCE_ANALYSIS_H -#define LLVM_ANALYSIS_LOOP_DEPENDENCE_ANALYSIS_H - -#include "llvm/ADT/DenseSet.h" -#include "llvm/ADT/FoldingSet.h" -#include "llvm/ADT/SmallVector.h" -#include "llvm/Analysis/LoopPass.h" -#include "llvm/Support/Allocator.h" - -namespace llvm { - -class AliasAnalysis; -class AnalysisUsage; -class ScalarEvolution; -class SCEV; -class Value; -class raw_ostream; - -class LoopDependenceAnalysis : public LoopPass { -  AliasAnalysis *AA; -  ScalarEvolution *SE; - -  /// L - The loop we are currently analysing. -  Loop *L; - -  /// TODO: doc -  enum DependenceResult { Independent = 0, Dependent = 1, Unknown = 2 }; - -  /// TODO: doc -  struct Subscript { -    /// TODO: Add distance, direction, breaking conditions, ... -  }; - -  /// DependencePair - Represents a data dependence relation between to memory -  /// reference instructions. -  struct DependencePair : public FastFoldingSetNode { -    Value *A; -    Value *B; -    DependenceResult Result; -    SmallVector<Subscript, 4> Subscripts; - -    DependencePair(const FoldingSetNodeID &ID, Value *a, Value *b) : -        FastFoldingSetNode(ID), A(a), B(b), Result(Unknown), Subscripts() {} -  }; - -  /// findOrInsertDependencePair - Return true if a DependencePair for the -  /// given Values already exists, false if a new DependencePair had to be -  /// created. The third argument is set to the pair found or created. -  bool findOrInsertDependencePair(Value*, Value*, DependencePair*&); - -  /// getLoops - Collect all loops of the loop nest L in which -  /// a given SCEV is variant. -  void getLoops(const SCEV*, DenseSet<const Loop*>*) const; - -  /// isLoopInvariant - True if a given SCEV is invariant in all loops of the -  /// loop nest starting at the innermost loop L. -  bool isLoopInvariant(const SCEV*) const; - -  /// isAffine - An SCEV is affine with respect to the loop nest starting at -  /// the innermost loop L if it is of the form A+B*X where A, B are invariant -  /// in the loop nest and X is a induction variable in the loop nest. -  bool isAffine(const SCEV*) const; - -  /// TODO: doc -  bool isZIVPair(const SCEV*, const SCEV*) const; -  bool isSIVPair(const SCEV*, const SCEV*) const; -  DependenceResult analyseZIV(const SCEV*, const SCEV*, Subscript*) const; -  DependenceResult analyseSIV(const SCEV*, const SCEV*, Subscript*) const; -  DependenceResult analyseMIV(const SCEV*, const SCEV*, Subscript*) const; -  DependenceResult analyseSubscript(const SCEV*, const SCEV*, Subscript*) const; -  DependenceResult analysePair(DependencePair*) const; - -public: -  static char ID; // Class identification, replacement for typeinfo -  LoopDependenceAnalysis() : LoopPass(ID) { -    initializeLoopDependenceAnalysisPass(*PassRegistry::getPassRegistry()); -  } - -  /// isDependencePair - Check whether two values can possibly give rise to -  /// a data dependence: that is the case if both are instructions accessing -  /// memory and at least one of those accesses is a write. -  bool isDependencePair(const Value*, const Value*) const; - -  /// depends - Return a boolean indicating if there is a data dependence -  /// between two instructions. -  bool depends(Value*, Value*); - -  bool runOnLoop(Loop*, LPPassManager&); -  virtual void releaseMemory(); -  virtual void getAnalysisUsage(AnalysisUsage&) const; -  void print(raw_ostream&, const Module* = 0) const; - -private: -  FoldingSet<DependencePair> Pairs; -  BumpPtrAllocator PairAllocator; -}; // class LoopDependenceAnalysis - -// createLoopDependenceAnalysisPass - This creates an instance of the -// LoopDependenceAnalysis pass. -// -LoopPass *createLoopDependenceAnalysisPass(); - -} // namespace llvm - -#endif /* LLVM_ANALYSIS_LOOP_DEPENDENCE_ANALYSIS_H */  | 
