diff options
| author | Dan Gohman <gohman@apple.com> | 2010-05-20 20:00:41 +0000 |
|---|---|---|
| committer | Dan Gohman <gohman@apple.com> | 2010-05-20 20:00:41 +0000 |
| commit | b6532a6b6d7d416edda72539bff00a628b5660c4 (patch) | |
| tree | 24c0ed2f711854c0e11dd1416109559cadec1b74 /lib/Transforms/Scalar/LoopStrengthReduce.cpp | |
| parent | 423f6422b48b387d0eed7219419a14af9a9f99eb (diff) | |
| download | external_llvm-b6532a6b6d7d416edda72539bff00a628b5660c4.zip external_llvm-b6532a6b6d7d416edda72539bff00a628b5660c4.tar.gz external_llvm-b6532a6b6d7d416edda72539bff00a628b5660c4.tar.bz2 | |
Add some comments.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104268 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/LoopStrengthReduce.cpp')
| -rw-r--r-- | lib/Transforms/Scalar/LoopStrengthReduce.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/lib/Transforms/Scalar/LoopStrengthReduce.cpp index 3c94616..f99e303 100644 --- a/lib/Transforms/Scalar/LoopStrengthReduce.cpp +++ b/lib/Transforms/Scalar/LoopStrengthReduce.cpp @@ -2811,6 +2811,9 @@ void LSRInstance::NarrowSearchSpaceUsingHeuristics() { bool Any = false; for (size_t i = 0, e = LU.Formulae.size(); i != e; ++i) { Formula &F = LU.Formulae[i]; + // Look for a formula with a constant or GV in a register. If the use + // also has a formula with that same value in an immediate field, + // delete the one that uses a register. for (SmallVectorImpl<const SCEV *>::const_iterator I = F.BaseRegs.begin(), E = F.BaseRegs.end(); I != E; ++I) { if (const SCEVConstant *C = dyn_cast<SCEVConstant>(*I)) { @@ -2861,6 +2864,8 @@ void LSRInstance::NarrowSearchSpaceUsingHeuristics() { "separated by a constant offset will use the same " "registers.\n"); + // This is especially useful for unrolled loops. + for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) { LSRUse &LU = Uses[LUIdx]; for (size_t FIdx = 0, NumForms = LU.Formulae.size(); @@ -3074,6 +3079,7 @@ void LSRInstance::Solve(SmallVectorImpl<const Formula *> &Solution) const { DenseSet<const SCEV *> VisitedRegs; Workspace.reserve(Uses.size()); + // SolveRecurse does all the work. SolveRecurse(Solution, SolutionCost, Workspace, CurCost, CurRegs, VisitedRegs); |
