diff options
Diffstat (limited to 'include/llvm/Transforms/Utils/UnrollLoop.h')
| -rw-r--r-- | include/llvm/Transforms/Utils/UnrollLoop.h | 48 | 
1 files changed, 33 insertions, 15 deletions
| diff --git a/include/llvm/Transforms/Utils/UnrollLoop.h b/include/llvm/Transforms/Utils/UnrollLoop.h index a3115ad16914..12aa3bc6e770 100644 --- a/include/llvm/Transforms/Utils/UnrollLoop.h +++ b/include/llvm/Transforms/Utils/UnrollLoop.h @@ -16,40 +16,57 @@  #ifndef LLVM_TRANSFORMS_UTILS_UNROLLLOOP_H  #define LLVM_TRANSFORMS_UTILS_UNROLLLOOP_H -// Needed because we can't forward-declare the nested struct -// TargetTransformInfo::UnrollingPreferences +#include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/StringRef.h"  #include "llvm/Analysis/TargetTransformInfo.h"  namespace llvm { -class StringRef;  class AssumptionCache; +class BasicBlock;  class DominatorTree;  class Loop;  class LoopInfo; -class LPPassManager;  class MDNode; -class Pass;  class OptimizationRemarkEmitter;  class ScalarEvolution; -typedef SmallDenseMap<const Loop *, Loop *, 4> NewLoopsMap; +using NewLoopsMap = SmallDenseMap<const Loop *, Loop *, 4>;  const Loop* addClonedBlockToLoopInfo(BasicBlock *OriginalBB,                                       BasicBlock *ClonedBB, LoopInfo *LI,                                       NewLoopsMap &NewLoops); -bool UnrollLoop(Loop *L, unsigned Count, unsigned TripCount, bool Force, -                bool AllowRuntime, bool AllowExpensiveTripCount, -                bool PreserveCondBr, bool PreserveOnlyFirst, -                unsigned TripMultiple, unsigned PeelCount, LoopInfo *LI, -                ScalarEvolution *SE, DominatorTree *DT, AssumptionCache *AC, -                OptimizationRemarkEmitter *ORE, bool PreserveLCSSA); +/// Represents the result of a \c UnrollLoop invocation. +enum class LoopUnrollResult { +  /// The loop was not modified. +  Unmodified, + +  /// The loop was partially unrolled -- we still have a loop, but with a +  /// smaller trip count.  We may also have emitted epilogue loop if the loop +  /// had a non-constant trip count. +  PartiallyUnrolled, + +  /// The loop was fully unrolled into straight-line code.  We no longer have +  /// any back-edges. +  FullyUnrolled +}; + +LoopUnrollResult UnrollLoop(Loop *L, unsigned Count, unsigned TripCount, +                            bool Force, bool AllowRuntime, +                            bool AllowExpensiveTripCount, bool PreserveCondBr, +                            bool PreserveOnlyFirst, unsigned TripMultiple, +                            unsigned PeelCount, bool UnrollRemainder, +                            LoopInfo *LI, ScalarEvolution *SE, +                            DominatorTree *DT, AssumptionCache *AC, +                            OptimizationRemarkEmitter *ORE, bool PreserveLCSSA);  bool UnrollRuntimeLoopRemainder(Loop *L, unsigned Count,                                  bool AllowExpensiveTripCount, -                                bool UseEpilogRemainder, LoopInfo *LI, +                                bool UseEpilogRemainder, bool UnrollRemainder, +                                LoopInfo *LI,                                  ScalarEvolution *SE, DominatorTree *DT, +                                AssumptionCache *AC,                                  bool PreserveLCSSA);  void computePeelCount(Loop *L, unsigned LoopSize, @@ -60,6 +77,7 @@ bool peelLoop(Loop *L, unsigned PeelCount, LoopInfo *LI, ScalarEvolution *SE,                DominatorTree *DT, AssumptionCache *AC, bool PreserveLCSSA);  MDNode *GetUnrollMetadata(MDNode *LoopID, StringRef Name); -} -#endif +} // end namespace llvm + +#endif // LLVM_TRANSFORMS_UTILS_UNROLLLOOP_H | 
