LLVM  6.0.0svn
UnrollLoop.h
Go to the documentation of this file.
1 //===- llvm/Transforms/Utils/UnrollLoop.h - Unrolling utilities -*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines some loop unrolling utilities. It does not define any
11 // actual pass or policy, but provides a single function to perform loop
12 // unrolling.
13 //
14 //===----------------------------------------------------------------------===//
15 
16 #ifndef LLVM_TRANSFORMS_UTILS_UNROLLLOOP_H
17 #define LLVM_TRANSFORMS_UTILS_UNROLLLOOP_H
18 
19 // Needed because we can't forward-declare the nested struct
20 // TargetTransformInfo::UnrollingPreferences
22 
23 namespace llvm {
24 
25 class StringRef;
26 class AssumptionCache;
27 class DominatorTree;
28 class Loop;
29 class LoopInfo;
30 class LPPassManager;
31 class MDNode;
32 class Pass;
33 class OptimizationRemarkEmitter;
35 
37 
38 const Loop* addClonedBlockToLoopInfo(BasicBlock *OriginalBB,
39  BasicBlock *ClonedBB, LoopInfo *LI,
40  NewLoopsMap &NewLoops);
41 
42 /// Represents the result of a \c UnrollLoop invocation.
43 enum class LoopUnrollResult {
44  /// The loop was not modified.
45  Unmodified,
46 
47  /// The loop was partially unrolled -- we still have a loop, but with a
48  /// smaller trip count. We may also have emitted epilogue loop if the loop
49  /// had a non-constant trip count.
51 
52  /// The loop was fully unrolled into straight-line code. We no longer have
53  /// any back-edges.
55 };
56 
57 LoopUnrollResult UnrollLoop(Loop *L, unsigned Count, unsigned TripCount,
58  bool Force, bool AllowRuntime,
59  bool AllowExpensiveTripCount, bool PreserveCondBr,
60  bool PreserveOnlyFirst, unsigned TripMultiple,
61  unsigned PeelCount, bool UnrollRemainder,
62  LoopInfo *LI, ScalarEvolution *SE,
64  OptimizationRemarkEmitter *ORE, bool PreserveLCSSA);
65 
66 bool UnrollRuntimeLoopRemainder(Loop *L, unsigned Count,
67  bool AllowExpensiveTripCount,
68  bool UseEpilogRemainder, bool UnrollRemainder,
69  LoopInfo *LI,
71  AssumptionCache *AC,
73  bool PreserveLCSSA);
74 
75 void computePeelCount(Loop *L, unsigned LoopSize,
77  unsigned &TripCount);
78 
79 bool peelLoop(Loop *L, unsigned PeelCount, LoopInfo *LI, ScalarEvolution *SE,
80  DominatorTree *DT, AssumptionCache *AC, bool PreserveLCSSA);
81 
83 }
84 
85 #endif
Compute iterated dominance frontiers using a linear time algorithm.
Definition: AllocatorList.h:24
The main scalar evolution driver.
A cache of .assume calls within a function.
Metadata node.
Definition: Metadata.h:862
SmallDenseMap< const Loop *, Loop *, 4 > NewLoopsMap
Definition: UnrollLoop.h:34
Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree...
Definition: Dominators.h:140
The loop was fully unrolled into straight-line code.
LLVM Basic Block Representation.
Definition: BasicBlock.h:59
bool peelLoop(Loop *L, unsigned PeelCount, LoopInfo *LI, ScalarEvolution *SE, DominatorTree *DT, AssumptionCache *AC, bool PreserveLCSSA)
Peel off the first PeelCount iterations of loop L.
bool UnrollRuntimeLoopRemainder(Loop *L, unsigned Count, bool AllowExpensiveTripCount, bool UseEpilogRemainder, bool UnrollRemainder, LoopInfo *LI, ScalarEvolution *SE, DominatorTree *DT, AssumptionCache *AC, OptimizationRemarkEmitter *ORE, bool PreserveLCSSA)
Insert code in the prolog/epilog code when unrolling a loop with a run-time trip-count.
void computePeelCount(Loop *L, unsigned LoopSize, TargetTransformInfo::UnrollingPreferences &UP, unsigned &TripCount)
The loop was partially unrolled – we still have a loop, but with a smaller trip count.
print lazy value Lazy Value Info Printer Pass
const Loop * addClonedBlockToLoopInfo(BasicBlock *OriginalBB, BasicBlock *ClonedBB, LoopInfo *LI, NewLoopsMap &NewLoops)
Adds ClonedBB to LoopInfo, creates a new loop for ClonedBB if necessary and adds a mapping from the o...
Definition: LoopUnroll.cpp:190
MDNode * GetUnrollMetadata(MDNode *LoopID, StringRef Name)
Given an llvm.loop loop id metadata node, returns the loop hint metadata node with the given name (fo...
Definition: LoopUnroll.cpp:875
Represents a single loop in the control flow graph.
Definition: LoopInfo.h:420
Parameters that control the generic loop unrolling transformation.
The loop was not modified.
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
This pass exposes codegen information to IR-level passes.
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)
Unroll the given loop by Count.
Definition: LoopUnroll.cpp:294
The optimization diagnostic interface.
LoopUnrollResult
Represents the result of a UnrollLoop invocation.
Definition: UnrollLoop.h:43