diff options
author | Dan Gohman <gohman@apple.com> | 2011-05-18 21:02:18 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2011-05-18 21:02:18 +0000 |
commit | 673968ae78f26bd78337d8bbb212fd280839fc12 (patch) | |
tree | fe8473f30be7eb38ef3393f8e650d3d2206343d5 /lib/Transforms/Scalar/LoopStrengthReduce.cpp | |
parent | 2d48ad67cd3c18098edd9ed14437139bdf5b5f53 (diff) |
When forming an ICmpZero LSRUse, normalize the non-IV operand
of the comparison, so that the resulting expression is fully
normalized. This fixes PR9939.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131576 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/LoopStrengthReduce.cpp')
-rw-r--r-- | lib/Transforms/Scalar/LoopStrengthReduce.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/lib/Transforms/Scalar/LoopStrengthReduce.cpp index 0d617bf8b1..886e1432ac 100644 --- a/lib/Transforms/Scalar/LoopStrengthReduce.cpp +++ b/lib/Transforms/Scalar/LoopStrengthReduce.cpp @@ -2073,6 +2073,10 @@ void LSRInstance::CollectFixupsAndInitialFormulae() { // x == y --> x - y == 0 const SCEV *N = SE.getSCEV(NV); if (SE.isLoopInvariant(N, L)) { + // S is normalized, so normalize N before folding it into S + // to keep the result normalized. + N = TransformForPostIncUse(Normalize, N, CI, 0, + LF.PostIncLoops, SE, DT); Kind = LSRUse::ICmpZero; S = SE.getMinusSCEV(N, S); } |