[opaque pointer type] Avoid creating (and then unwrapping) a pointer type to compute the result type of a GEP

llvm-svn: 235234
This commit is contained in:
David Blaikie 2015-04-17 22:32:16 +00:00
parent b4d9ca022a
commit 513ab6886b

View File

@ -924,12 +924,14 @@ public:
/// GetGEPReturnType - Returns the pointer type returned by the GEP /// GetGEPReturnType - Returns the pointer type returned by the GEP
/// instruction, which may be a vector of pointers. /// instruction, which may be a vector of pointers.
static Type *getGEPReturnType(Value *Ptr, ArrayRef<Value *> IdxList) { static Type *getGEPReturnType(Value *Ptr, ArrayRef<Value *> IdxList) {
Type *PtrTy = return getGEPReturnType(
PointerType::get(checkGEPType(getIndexedType( cast<PointerType>(Ptr->getType()->getScalarType())->getElementType(),
cast<PointerType>(Ptr->getType()->getScalarType()) Ptr, IdxList);
->getElementType(), }
IdxList)), static Type *getGEPReturnType(Type *ElTy, Value *Ptr,
Ptr->getType()->getPointerAddressSpace()); ArrayRef<Value *> IdxList) {
Type *PtrTy = PointerType::get(checkGEPType(getIndexedType(ElTy, IdxList)),
Ptr->getType()->getPointerAddressSpace());
// Vector GEP // Vector GEP
if (Ptr->getType()->isVectorTy()) { if (Ptr->getType()->isVectorTy()) {
unsigned NumElem = cast<VectorType>(Ptr->getType())->getNumElements(); unsigned NumElem = cast<VectorType>(Ptr->getType())->getNumElements();
@ -993,7 +995,9 @@ GetElementPtrInst::GetElementPtrInst(Type *PointeeType, Value *Ptr,
ArrayRef<Value *> IdxList, unsigned Values, ArrayRef<Value *> IdxList, unsigned Values,
const Twine &NameStr, const Twine &NameStr,
Instruction *InsertBefore) Instruction *InsertBefore)
: Instruction(getGEPReturnType(Ptr, IdxList), GetElementPtr, : Instruction(PointeeType ? getGEPReturnType(PointeeType, Ptr, IdxList)
: getGEPReturnType(Ptr, IdxList),
GetElementPtr,
OperandTraits<GetElementPtrInst>::op_end(this) - Values, OperandTraits<GetElementPtrInst>::op_end(this) - Values,
Values, InsertBefore) { Values, InsertBefore) {
init(Ptr, IdxList, NameStr); init(Ptr, IdxList, NameStr);