diff options
author | Chris Lattner <sabre@nondot.org> | 2007-01-31 04:39:29 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-01-31 04:39:29 +0000 |
commit | fb11053815ee4b3c6593c12aff06fefea96d7d0a (patch) | |
tree | d5c7b59a25bd7a6452eb4d1e7c909e9ec67cd0ea | |
parent | 0c61584d05894a5543f690803191a8b0da05b8fc (diff) |
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
-rw-r--r-- | include/llvm/Constants.h | 16 | ||||
-rw-r--r-- | 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 c92229e879..e502a71f53 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<Value*> &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<Constant*> &IdxList); + Constant* const *IdxList, unsigned NumIdx); static Constant *getGetElementPtr(Constant *C, - const std::vector<Value*> &IdxList); - + Value* const *IdxList, unsigned NumIdx); + static Constant *getGetElementPtr(Constant *C, + const std::vector<Constant*> &IdxList) { + return getGetElementPtr(C, &IdxList[0], IdxList.size()); + } + static Constant *getGetElementPtr(Constant *C, + const std::vector<Value*> &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 3a88b99074..99ed63ba6d 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<Value*> &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<Value*> &Indices, + Value* const *Idx, unsigned NumIdx, bool AllowStructLeaf = false); + + static const Type *getIndexedType(const Type *Ptr, + const std::vector<Value*> &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); |