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

Duncan Sands baldrick at free.fr
Fri Sep 11 12:42:22 PDT 2009


Author: baldrick
Date: Fri Sep 11 14:42:21 2009
New Revision: 81554

URL: http://llvm.org/viewvc/llvm-project?rev=81554&view=rev
Log:
Condition the use of inbounds GEP rather than general
GEP on POINTER_TYPE_OVERFLOW_UNDEFINED, which is the
same thing as checking flag_strict_overflow.

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=81554&r1=81553&r2=81554&view=diff

==============================================================================
--- gcc-plugin/trunk/llvm-convert.cpp (original)
+++ gcc-plugin/trunk/llvm-convert.cpp Fri Sep 11 14:42:21 2009
@@ -3576,9 +3576,9 @@
         if (Opc == Instruction::Sub)
           EltOffset = -EltOffset;
         Constant *C = ConstantInt::get(Type::getInt64Ty(Context), EltOffset);
-        Value *V = flag_wrapv ?
-                   Builder.CreateGEP(LHS, C) :
-                   Builder.CreateInBoundsGEP(LHS, C);
+        Value *V = POINTER_TYPE_OVERFLOW_UNDEFINED ?
+                   Builder.CreateInBoundsGEP(LHS, C) :
+                   Builder.CreateGEP(LHS, C);
         return BitCastToType(V, ConvertType(TREE_TYPE(exp)));
       }
     }
@@ -3944,8 +3944,9 @@
     Ptr = Builder.CreateBitCast(Ptr, Type::getInt8Ty(Context)->getPointerTo());
   }
 
-  return Builder.CreateBitCast(Builder.CreateInBoundsGEP(Ptr, Idx),
-                               ConvertType(TREE_TYPE(exp)));
+  Value *GEP = POINTER_TYPE_OVERFLOW_UNDEFINED ?
+    Builder.CreateInBoundsGEP(Ptr, Idx) : Builder.CreateGEP(Ptr, Idx);
+  return Builder.CreateBitCast(GEP, ConvertType(TREE_TYPE(exp)));
 }
 
 //===----------------------------------------------------------------------===//
@@ -6611,9 +6612,9 @@
     if (TREE_CODE(ArrayTreeType) == ARRAY_TYPE)
       Idx.push_back(ConstantInt::get(IntPtrTy, 0));
     Idx.push_back(IndexVal);
-    Value *Ptr = flag_wrapv ?
-      Builder.CreateGEP(ArrayAddr, Idx.begin(), Idx.end()) :
-      Builder.CreateInBoundsGEP(ArrayAddr, Idx.begin(), Idx.end());
+    Value *Ptr = POINTER_TYPE_OVERFLOW_UNDEFINED ?
+      Builder.CreateInBoundsGEP(ArrayAddr, Idx.begin(), Idx.end()) :
+      Builder.CreateGEP(ArrayAddr, Idx.begin(), Idx.end());
 
     const Type *ElementTy = ConvertType(ElementType);
     unsigned Alignment = MinAlign(ArrayAlign, TD.getABITypeAlignment(ElementTy));
@@ -6638,9 +6639,9 @@
   if (isa<ConstantInt>(IndexVal))
     Alignment = MinAlign(ArrayAlign,
                          cast<ConstantInt>(IndexVal)->getZExtValue());
-  Value *Ptr = flag_wrapv ?
-    Builder.CreateGEP(ArrayAddr, IndexVal) :
-    Builder.CreateInBoundsGEP(ArrayAddr, IndexVal);
+  Value *Ptr = POINTER_TYPE_OVERFLOW_UNDEFINED ?
+    Builder.CreateInBoundsGEP(ArrayAddr, IndexVal) :
+    Builder.CreateGEP(ArrayAddr, IndexVal);
   return LValue(BitCastToType(Ptr,
                 PointerType::getUnqual(ConvertType(TREE_TYPE(exp)))),
                 Alignment);





More information about the llvm-commits mailing list