Skip to content

Commit

Permalink
[opaque pointer types] [NFC] gep_type_{begin,end} now take source ele…
Browse files Browse the repository at this point in the history
…ment type and address space.

Reviewers: mjacob, dblaikie

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D16436

llvm-svn: 258474
  • Loading branch information
eddyb committed Jan 22, 2016
1 parent b008fd4 commit 093ae49
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 11 deletions.
2 changes: 1 addition & 1 deletion llvm/include/llvm/Analysis/TargetTransformInfoImpl.h
Expand Up @@ -423,7 +423,7 @@ class TargetTransformInfoImplCRTPBase : public TargetTransformInfoImplBase {
// Assumes the address space is 0 when Ptr is nullptr.
unsigned AS =
(Ptr == nullptr ? 0 : Ptr->getType()->getPointerAddressSpace());
auto GTI = gep_type_begin(PointerType::get(PointeeType, AS), Operands);
auto GTI = gep_type_begin(PointeeType, AS, Operands);
for (auto I = Operands.begin(); I != Operands.end(); ++I, ++GTI) {
// We assume that the cost of Scalar GEP with constant index and the
// cost of Vector GEP with splat constant index are the same.
Expand Down
12 changes: 3 additions & 9 deletions llvm/include/llvm/IR/GetElementPtrTypeIterator.h
Expand Up @@ -33,12 +33,6 @@ namespace llvm {
generic_gep_type_iterator() {}
public:

static generic_gep_type_iterator begin(Type *Ty, ItTy It) {
generic_gep_type_iterator I;
I.CurTy.setPointer(Ty);
I.OpIt = It;
return I;
}
static generic_gep_type_iterator begin(Type *Ty, unsigned AddrSpace,
ItTy It) {
generic_gep_type_iterator I;
Expand Down Expand Up @@ -125,13 +119,13 @@ namespace llvm {

template<typename T>
inline generic_gep_type_iterator<const T *>
gep_type_begin(Type *Op0, ArrayRef<T> A) {
return generic_gep_type_iterator<const T *>::begin(Op0, A.begin());
gep_type_begin(Type *Op0, unsigned AS, ArrayRef<T> A) {
return generic_gep_type_iterator<const T *>::begin(Op0, AS, A.begin());
}

template<typename T>
inline generic_gep_type_iterator<const T *>
gep_type_end(Type * /*Op0*/, ArrayRef<T> A) {
gep_type_end(Type * /*Op0*/, unsigned /*AS*/, ArrayRef<T> A) {
return generic_gep_type_iterator<const T *>::end(A.end());
}
} // end namespace llvm
Expand Down
5 changes: 4 additions & 1 deletion llvm/lib/IR/DataLayout.cpp
Expand Up @@ -729,8 +729,11 @@ uint64_t DataLayout::getIndexedOffset(Type *ptrTy,
assert(Ty->isPointerTy() && "Illegal argument for getIndexedOffset()");
uint64_t Result = 0;

// We can use 0 as the address space as we don't need
// to get pointer types back from gep_type_iterator.
unsigned AS = 0;
generic_gep_type_iterator<Value* const*>
TI = gep_type_begin(ptrTy, Indices);
TI = gep_type_begin(ptrTy->getPointerElementType(), AS, Indices);
for (unsigned CurIDX = 0, EndIDX = Indices.size(); CurIDX != EndIDX;
++CurIDX, ++TI) {
if (StructType *STy = dyn_cast<StructType>(*TI)) {
Expand Down

0 comments on commit 093ae49

Please sign in to comment.