[llvm-commits] [gcc-plugin] r82863 - /gcc-plugin/trunk/llvm-convert.cpp

Duncan Sands baldrick at free.fr
Sat Sep 26 08:45:28 PDT 2009


Author: baldrick
Date: Sat Sep 26 10:45:27 2009
New Revision: 82863

URL: http://llvm.org/viewvc/llvm-project?rev=82863&view=rev
Log:
Use NSW subtraction when subtracting off the array lower
bound (if it is signed).

Modified:
    gcc-plugin/trunk/llvm-convert.cpp

Modified: gcc-plugin/trunk/llvm-convert.cpp
URL: http://llvm.org/viewvc/llvm-project/gcc-plugin/trunk/llvm-convert.cpp?rev=82863&r1=82862&r2=82863&view=diff

==============================================================================
--- gcc-plugin/trunk/llvm-convert.cpp (original)
+++ gcc-plugin/trunk/llvm-convert.cpp Sat Sep 26 10:45:27 2009
@@ -5788,7 +5788,9 @@
   Value *IndexVal = Emit(Index, 0);
   tree LowerBound = array_ref_low_bound(exp);
   if (!integer_zerop(LowerBound))
-    IndexVal = Builder.CreateSub(IndexVal, Emit(array_ref_low_bound(exp), 0));
+    IndexVal = TYPE_UNSIGNED(TREE_TYPE(Index)) ?
+      Builder.CreateSub(IndexVal, Emit(LowerBound, 0)) :
+      Builder.CreateNSWSub(IndexVal, Emit(LowerBound, 0));
 
   LValue ArrayAddrLV = EmitLV(Array);
   assert(!ArrayAddrLV.isBitfield() && "Arrays cannot be bitfields!");
@@ -7333,7 +7335,10 @@
   Constant *IndexVal = Convert(Index);
   tree LowerBound = array_ref_low_bound(exp);
   if (!integer_zerop(LowerBound))
-    IndexVal = TheFolder->CreateSub(IndexVal, Convert(LowerBound));
+    IndexVal = TYPE_UNSIGNED(TREE_TYPE(Index)) ?
+      TheFolder->CreateSub(IndexVal, Convert(LowerBound)) :
+      TheFolder->CreateNSWSub(IndexVal, Convert(LowerBound));
+
   ArrayAddr = EmitLV(Array);
 
   const Type *IntPtrTy = getTargetData().getIntPtrType(Context);





More information about the llvm-commits mailing list