summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2011-05-23 21:07:39 +0000
committerDan Gohman <gohman@apple.com>2011-05-23 21:07:39 +0000
commit6c4a3190889bc3b7ce842fc4429fa5dc3436e0a3 (patch)
tree37440414d82cef64e6916effc9ea235002204109 /llvm/lib/Transforms
parentbae9fee95fdc71d45eff4db70f0896c92c2501da (diff)
downloadbcm5719-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.cpp2
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;
OpenPOWER on IntegriCloud