summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2015-04-17 22:32:16 +0000
committerDavid Blaikie <dblaikie@gmail.com>2015-04-17 22:32:16 +0000
commit09e3c8f7666b2175ae0b95b0f6fad12b4f5813d5 (patch)
treed5613acace1699ad4491b0b8be7cd4eefa35146f
parentd33bad3e87ea0b6f49e716e81a668349ce19208f (diff)
downloadbcm5719-llvm-09e3c8f7666b2175ae0b95b0f6fad12b4f5813d5.tar.gz
bcm5719-llvm-09e3c8f7666b2175ae0b95b0f6fad12b4f5813d5.zip
[opaque pointer type] Avoid creating (and then unwrapping) a pointer type to compute the result type of a GEP
llvm-svn: 235234
-rw-r--r--llvm/include/llvm/IR/Instructions.h18
1 files changed, 11 insertions, 7 deletions
diff --git a/llvm/include/llvm/IR/Instructions.h b/llvm/include/llvm/IR/Instructions.h
index 5d53b252c14..ff9254372ea 100644
--- a/llvm/include/llvm/IR/Instructions.h
+++ b/llvm/include/llvm/IR/Instructions.h
@@ -924,12 +924,14 @@ public:
/// GetGEPReturnType - Returns the pointer type returned by the GEP
/// instruction, which may be a vector of pointers.
static Type *getGEPReturnType(Value *Ptr, ArrayRef<Value *> IdxList) {
- Type *PtrTy =
- PointerType::get(checkGEPType(getIndexedType(
- cast<PointerType>(Ptr->getType()->getScalarType())
- ->getElementType(),
- IdxList)),
- Ptr->getType()->getPointerAddressSpace());
+ return getGEPReturnType(
+ cast<PointerType>(Ptr->getType()->getScalarType())->getElementType(),
+ Ptr, IdxList);
+ }
+ static Type *getGEPReturnType(Type *ElTy, Value *Ptr,
+ ArrayRef<Value *> IdxList) {
+ Type *PtrTy = PointerType::get(checkGEPType(getIndexedType(ElTy, IdxList)),
+ Ptr->getType()->getPointerAddressSpace());
// Vector GEP
if (Ptr->getType()->isVectorTy()) {
unsigned NumElem = cast<VectorType>(Ptr->getType())->getNumElements();
@@ -993,7 +995,9 @@ GetElementPtrInst::GetElementPtrInst(Type *PointeeType, Value *Ptr,
ArrayRef<Value *> IdxList, unsigned Values,
const Twine &NameStr,
Instruction *InsertBefore)
- : Instruction(getGEPReturnType(Ptr, IdxList), GetElementPtr,
+ : Instruction(PointeeType ? getGEPReturnType(PointeeType, Ptr, IdxList)
+ : getGEPReturnType(Ptr, IdxList),
+ GetElementPtr,
OperandTraits<GetElementPtrInst>::op_end(this) - Values,
Values, InsertBefore) {
init(Ptr, IdxList, NameStr);
OpenPOWER on IntegriCloud