diff options
| author | Andrew Trick <atrick@apple.com> | 2012-07-13 23:33:10 +0000 |
|---|---|---|
| committer | Andrew Trick <atrick@apple.com> | 2012-07-13 23:33:10 +0000 |
| commit | 653513b8ddade624a517531445010762a94f839a (patch) | |
| tree | 602a652b63e84bd6968a0b08af12bc6c8f5dfd46 /llvm/lib/Transforms | |
| parent | ee76065b7a249f6de1ce44a8db0d7da7591efec0 (diff) | |
| download | bcm5719-llvm-653513b8ddade624a517531445010762a94f839a.tar.gz bcm5719-llvm-653513b8ddade624a517531445010762a94f839a.zip | |
LSR Fix: check SCEV expression safety before expansion.
All SCEV expressions used by LSR formulae must be safe to
expand. i.e. they may not contain UDiv unless we can prove nonzero
denominator.
Fixes PR11356: LSR hoists UDiv.
llvm-svn: 160205
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp index 4ba969e6750..c0cb13de73d 100644 --- a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp +++ b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp @@ -2836,7 +2836,7 @@ void LSRInstance::CollectFixupsAndInitialFormulae() { // x == y --> x - y == 0 const SCEV *N = SE.getSCEV(NV); - if (SE.isLoopInvariant(N, L)) { + if (SE.isLoopInvariant(N, L) && isSafeToExpand(N)) { // S is normalized, so normalize N before folding it into S // to keep the result normalized. N = TransformForPostIncUse(Normalize, N, CI, 0, |

