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 | 1b58d4536a561f28bf935dcb29b483c52a6bf4c6 (patch) | |
tree | 80e36c471ebb01345cc1c381f1c526c8f9af5546 /lib/Transforms/Scalar/LoopStrengthReduce.cpp | |
parent | 95ae09afdedcb8de3d20307c7ee924079d12c68a (diff) |
When checking for signed multiplication overflow, watch out for INT_MIN and -1.
This fixes PR9845.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131919 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/LoopStrengthReduce.cpp')
-rw-r--r-- | lib/Transforms/Scalar/LoopStrengthReduce.cpp | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/lib/Transforms/Scalar/LoopStrengthReduce.cpp index 204ce36b8a..73ebd618a0 100644 --- a/lib/Transforms/Scalar/LoopStrengthReduce.cpp +++ b/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; |