Change TargetData::getIndexedOffset interface to not require indices
authorChris Lattner <sabre@nondot.org>
Sat, 10 Feb 2007 19:33:15 +0000 (19:33 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 10 Feb 2007 19:33:15 +0000 (19:33 +0000)
in a vector.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34153 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Target/TargetData.h
lib/Target/TargetData.cpp

index e462814def2b8b5308d84830714a1e874ccac5ae..d577de7c8a04588ae0a7a42ceda3efdb9c489d2e 100644 (file)
@@ -247,7 +247,12 @@ public:
   /// specified indices.  This is used to implement getelementptr.
   ///
   uint64_t getIndexedOffset(const Type *Ty,
-                            const std::vector<Value*> &Indices) const;
+                            Value* const* Indices, unsigned NumIndices) const;
+  
+  uint64_t getIndexedOffset(const Type *Ty,
+                            const std::vector<Value*> &Indices) const {
+    return getIndexedOffset(Ty, &Indices[0], Indices.size());
+  }
 
   /// getStructLayout - Return a StructLayout object, indicating the alignment
   /// of the struct, its size, and the offsets of its fields.  Note that this
index aa32530d4b5340d5d9cd8afa95cf5fdbd0b36d20..139ab0024178d239058a154384a589b0100e3c5c 100644 (file)
@@ -452,18 +452,18 @@ const Type *TargetData::getIntPtrType() const {
 }
 
 
-uint64_t TargetData::getIndexedOffset(const Type *ptrTy,
-                                      const std::vector<Value*> &Idx) const {
+uint64_t TargetData::getIndexedOffset(const Type *ptrTy, Value* const* Indices,
+                                      unsigned NumIndices) const {
   const Type *Ty = ptrTy;
   assert(isa<PointerType>(Ty) && "Illegal argument for getIndexedOffset()");
   uint64_t Result = 0;
 
-  generic_gep_type_iterator<std::vector<Value*>::const_iterator>
-    TI = gep_type_begin(ptrTy, Idx.begin(), Idx.end());
-  for (unsigned CurIDX = 0; CurIDX != Idx.size(); ++CurIDX, ++TI) {
+  generic_gep_type_iterator<Value* const*>
+    TI = gep_type_begin(ptrTy, Indices, Indices+NumIndices);
+  for (unsigned CurIDX = 0; CurIDX != NumIndices; ++CurIDX, ++TI) {
     if (const StructType *STy = dyn_cast<StructType>(*TI)) {
-      assert(Idx[CurIDX]->getType() == Type::Int32Ty && "Illegal struct idx");
-      unsigned FieldNo = cast<ConstantInt>(Idx[CurIDX])->getZExtValue();
+      assert(Indices[CurIDX]->getType() == Type::Int32Ty &&"Illegal struct idx");
+      unsigned FieldNo = cast<ConstantInt>(Indices[CurIDX])->getZExtValue();
 
       // Get structure layout information...
       const StructLayout *Layout = getStructLayout(STy);
@@ -479,7 +479,7 @@ uint64_t TargetData::getIndexedOffset(const Type *ptrTy,
       Ty = cast<SequentialType>(Ty)->getElementType();
 
       // Get the array index and the size of each array element.
-      int64_t arrayIdx = cast<ConstantInt>(Idx[CurIDX])->getSExtValue();
+      int64_t arrayIdx = cast<ConstantInt>(Indices[CurIDX])->getSExtValue();
       Result += arrayIdx * (int64_t)getTypeSize(Ty);
     }
   }