-//===----------------------------------------------------------------------===//
-// MemAccessInst Implementation
-//===----------------------------------------------------------------------===//
-
-// getIndexedType - Returns the type of the element that would be loaded with
-// a load instruction with the specified parameters.
-//
-// A null type is returned if the indices are invalid for the specified
-// pointer type.
-//
-const Type* MemAccessInst::getIndexedType(const Type *Ptr,
- const std::vector<Value*> &Idx,
- bool AllowCompositeLeaf) {
- if (!isa<PointerType>(Ptr)) return 0; // Type isn't a pointer type!
-
- // Handle the special case of the empty set index set...
- if (Idx.empty()) return cast<PointerType>(Ptr)->getElementType();
-
- unsigned CurIDX = 0;
- while (const CompositeType *CT = dyn_cast<CompositeType>(Ptr)) {
- if (Idx.size() == CurIDX) {
- if (AllowCompositeLeaf || CT->isFirstClassType()) return Ptr;
- return 0; // Can't load a whole structure or array!?!?
- }
-
- Value *Index = Idx[CurIDX++];
- if (!CT->indexValid(Index)) return 0;
- Ptr = CT->getTypeAtIndex(Index);
- }
- return CurIDX == Idx.size() ? Ptr : 0;
-}
-
-