mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-13 14:35:54 +00:00
[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:
parent
b4d9ca022a
commit
513ab6886b
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user