From fb11053815ee4b3c6593c12aff06fefea96d7d0a Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 31 Jan 2007 04:39:29 +0000 Subject: [PATCH] Revise APIs for creating constantexpr GEPs to not require the use of vectors. This allows us to eliminate many temporary vectors, and their associated malloc/free pairs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33691 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Constants.h | 16 ++++++++++++---- include/llvm/Instructions.h | 14 ++++++++++++-- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/include/llvm/Constants.h b/include/llvm/Constants.h index c92229e8793..e502a71f539 100644 --- a/include/llvm/Constants.h +++ b/include/llvm/Constants.h @@ -447,7 +447,7 @@ protected: static Constant *getSelectTy(const Type *Ty, Constant *C1, Constant *C2, Constant *C3); static Constant *getGetElementPtrTy(const Type *Ty, Constant *C, - const std::vector &IdxList); + Value* const *Idxs, unsigned NumIdxs); static Constant *getExtractElementTy(const Type *Ty, Constant *Val, Constant *Idx); static Constant *getInsertElementTy(const Type *Ty, Constant *Val, @@ -577,10 +577,18 @@ public: /// all elements must be Constant's. /// static Constant *getGetElementPtr(Constant *C, - const std::vector &IdxList); + Constant* const *IdxList, unsigned NumIdx); static Constant *getGetElementPtr(Constant *C, - const std::vector &IdxList); - + Value* const *IdxList, unsigned NumIdx); + static Constant *getGetElementPtr(Constant *C, + const std::vector &IdxList) { + return getGetElementPtr(C, &IdxList[0], IdxList.size()); + } + static Constant *getGetElementPtr(Constant *C, + const std::vector &IdxList) { + return getGetElementPtr(C, &IdxList[0], IdxList.size()); + } + static Constant *getExtractElement(Constant *Vec, Constant *Idx); static Constant *getInsertElement(Constant *Vec, Constant *Elt,Constant *Idx); static Constant *getShuffleVector(Constant *V1, Constant *V2, Constant *Mask); diff --git a/include/llvm/Instructions.h b/include/llvm/Instructions.h index 3a88b990749..99ed63ba6d3 100644 --- a/include/llvm/Instructions.h +++ b/include/llvm/Instructions.h @@ -348,7 +348,11 @@ public: const std::string &Name = "", Instruction *InsertBefore =0); GetElementPtrInst(Value *Ptr, const std::vector &Idx, const std::string &Name, BasicBlock *InsertAtEnd); - + GetElementPtrInst(Value *Ptr, Value* const *Idx, unsigned NumIdx, + const std::string &Name = "", Instruction *InsertBefore =0); + GetElementPtrInst(Value *Ptr, Value* const *Idx, unsigned NumIdx, + const std::string &Name, BasicBlock *InsertAtEnd); + /// Constructors - These two constructors are convenience methods because one /// and two index getelementptr instructions are so common. GetElementPtrInst(Value *Ptr, Value *Idx, @@ -375,8 +379,14 @@ public: /// pointer type. /// static const Type *getIndexedType(const Type *Ptr, - const std::vector &Indices, + Value* const *Idx, unsigned NumIdx, bool AllowStructLeaf = false); + + static const Type *getIndexedType(const Type *Ptr, + const std::vector &Indices, + bool AllowStructLeaf = false) { + return getIndexedType(Ptr, &Indices[0], Indices.size(), AllowStructLeaf); + } static const Type *getIndexedType(const Type *Ptr, Value *Idx0, Value *Idx1, bool AllowStructLeaf = false); static const Type *getIndexedType(const Type *Ptr, Value *Idx);