diff options
| author | Eli Friedman <eli.friedman@gmail.com> | 2011-10-13 23:48:33 +0000 | 
|---|---|---|
| committer | Eli Friedman <eli.friedman@gmail.com> | 2011-10-13 23:48:33 +0000 | 
| commit | b46345d7c19d4586005133609a35134ad507e98b (patch) | |
| tree | f43572e842b9ab544082cbe2c99df29099a0c3af /llvm/lib | |
| parent | df4f7ca331f04c7e6a4af3a144a05d3a82f8770d (diff) | |
| download | bcm5719-llvm-b46345d7c19d4586005133609a35134ad507e98b.tar.gz bcm5719-llvm-b46345d7c19d4586005133609a35134ad507e98b.zip | |
Avoid undefined behavior in negation in LSR.  Patch by Ahmed Charles.
Someone more familiar with LSR should double-check that the extra cast is actually doing the right thing in the overflow cases; I'm not completely confident that's that case. 
llvm-svn: 141916
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp | 4 | 
1 files changed, 2 insertions, 2 deletions
| diff --git a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp index d03b86a7e9d..3e122c2a866 100644 --- a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp +++ b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp @@ -1205,7 +1205,7 @@ static bool isLegalUse(const TargetLowering::AddrMode &AM,      // If we have low-level target information, ask the target if it can fold an      // integer immediate on an icmp.      if (AM.BaseOffs != 0) { -      if (TLI) return TLI->isLegalICmpImmediate(-AM.BaseOffs); +      if (TLI) return TLI->isLegalICmpImmediate(-(uint64_t)AM.BaseOffs);        return false;      } @@ -3593,7 +3593,7 @@ Value *LSRInstance::Expand(const LSRFixup &LF,        // The other interesting way of "folding" with an ICmpZero is to use a        // negated immediate.        if (!ICmpScaledV) -        ICmpScaledV = ConstantInt::get(IntTy, -Offset); +        ICmpScaledV = ConstantInt::get(IntTy, -(uint64_t)Offset);        else {          Ops.push_back(SE.getUnknown(ICmpScaledV));          ICmpScaledV = ConstantInt::get(IntTy, Offset); | 

