[llvm-commits] [llvm] r141916 - /llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp

Eli Friedman eli.friedman at gmail.com
Thu Oct 13 16:48:33 PDT 2011


Author: efriedma
Date: Thu Oct 13 18:48:33 2011
New Revision: 141916

URL: http://llvm.org/viewvc/llvm-project?rev=141916&view=rev
Log:
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. 


Modified:
    llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp?rev=141916&r1=141915&r2=141916&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp Thu Oct 13 18:48:33 2011
@@ -1205,7 +1205,7 @@
     // 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 @@
       // 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);





More information about the llvm-commits mailing list