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.

llvm-svn: 33691
This commit is contained in:
Chris Lattner 2007-01-31 04:39:29 +00:00
parent 0ee9a27976
commit 677cab8ef3
2 changed files with 24 additions and 6 deletions

View File

@ -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,9 +577,17 @@ 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);

View File

@ -348,6 +348,10 @@ 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.
@ -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);