aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-01-31 04:39:29 +0000
committerChris Lattner <sabre@nondot.org>2007-01-31 04:39:29 +0000
commitfb11053815ee4b3c6593c12aff06fefea96d7d0a (patch)
treed5c7b59a25bd7a6452eb4d1e7c909e9ec67cd0ea
parent0c61584d05894a5543f690803191a8b0da05b8fc (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.h16
-rw-r--r--include/llvm/Instructions.h14
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);