diff options
| author | Dan Gohman <gohman@apple.com> | 2011-05-23 21:07:39 +0000 | 
|---|---|---|
| committer | Dan Gohman <gohman@apple.com> | 2011-05-23 21:07:39 +0000 | 
| commit | 6c4a3190889bc3b7ce842fc4429fa5dc3436e0a3 (patch) | |
| tree | 37440414d82cef64e6916effc9ea235002204109 /llvm/lib/Transforms | |
| parent | bae9fee95fdc71d45eff4db70f0896c92c2501da (diff) | |
| download | bcm5719-llvm-6c4a3190889bc3b7ce842fc4429fa5dc3436e0a3.tar.gz bcm5719-llvm-6c4a3190889bc3b7ce842fc4429fa5dc3436e0a3.zip | |
When checking for signed multiplication overflow, watch out for INT_MIN and -1.
This fixes PR9845.
llvm-svn: 131919
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp | 2 | 
1 files changed, 2 insertions, 0 deletions
| diff --git a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp index 204ce36b8a4..73ebd618a0c 100644 --- a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp +++ b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp @@ -2522,6 +2522,8 @@ void LSRInstance::GenerateICmpZeroScales(LSRUse &LU, unsigned LUIdx,      // Check that multiplying with the unfolded offset doesn't overflow.      if (F.UnfoldedOffset != 0) { +      if (F.UnfoldedOffset == INT64_MIN && Factor == -1) +        continue;        F.UnfoldedOffset = (uint64_t)F.UnfoldedOffset * Factor;        if (F.UnfoldedOffset / Factor != Base.UnfoldedOffset)          continue; | 

