Index: llvm/trunk/lib/Analysis/ValueTracking.cpp =================================================================== --- llvm/trunk/lib/Analysis/ValueTracking.cpp +++ llvm/trunk/lib/Analysis/ValueTracking.cpp @@ -1342,7 +1342,7 @@ AllocaInst *AI = cast(I); unsigned Align = AI->getAlignment(); if (Align == 0) - Align = Q.DL.getABITypeAlignment(AI->getType()->getElementType()); + Align = Q.DL.getABITypeAlignment(AI->getAllocatedType()); if (Align > 0) KnownZero = APInt::getLowBitsSet(BitWidth, countTrailingZeros(Align)); Index: llvm/trunk/lib/CodeGen/GCRootLowering.cpp =================================================================== --- llvm/trunk/lib/CodeGen/GCRootLowering.cpp +++ llvm/trunk/lib/CodeGen/GCRootLowering.cpp @@ -170,8 +170,7 @@ for (AllocaInst **I = Roots, **E = Roots + Count; I != E; ++I) if (!InitedRoots.count(*I)) { StoreInst *SI = new StoreInst( - ConstantPointerNull::get(cast( - cast((*I)->getType())->getElementType())), + ConstantPointerNull::get(cast((*I)->getAllocatedType())), *I); SI->insertAfter(*I); MadeChange = true; Index: llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp =================================================================== --- llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp +++ llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp @@ -2568,7 +2568,7 @@ DEBUG(dbgs() << "Found an array alloca. Can not evaluate.\n"); return false; // Cannot handle array allocs. } - Type *Ty = AI->getType()->getElementType(); + Type *Ty = AI->getAllocatedType(); AllocaTmps.push_back( make_unique(Ty, false, GlobalValue::InternalLinkage, UndefValue::get(Ty), AI->getName())); Index: llvm/trunk/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp =================================================================== --- llvm/trunk/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp +++ llvm/trunk/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp @@ -1777,8 +1777,7 @@ auto InsertClobbersAt = [&](Instruction *IP) { for (auto *AI : ToClobber) { - auto AIType = cast(AI->getType()); - auto PT = cast(AIType->getElementType()); + auto PT = cast(AI->getAllocatedType()); Constant *CPN = ConstantPointerNull::get(PT); StoreInst *Store = new StoreInst(CPN, AI); Store->insertBefore(IP); Index: llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp =================================================================== --- llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp +++ llvm/trunk/lib/Transforms/Scalar/ScalarReplAggregates.cpp @@ -710,7 +710,7 @@ PointerType* SPTy = cast(SrcPtr->getType()); PointerType* AIPTy = cast(NewAI->getType()); if (SPTy->getAddressSpace() != AIPTy->getAddressSpace()) { - AIPTy = PointerType::get(AIPTy->getElementType(), + AIPTy = PointerType::get(NewAI->getAllocatedType(), SPTy->getAddressSpace()); } SrcPtr = Builder.CreateBitCast(SrcPtr, AIPTy); @@ -727,7 +727,7 @@ PointerType* DPTy = cast(MTI->getDest()->getType()); PointerType* AIPTy = cast(NewAI->getType()); if (DPTy->getAddressSpace() != AIPTy->getAddressSpace()) { - AIPTy = PointerType::get(AIPTy->getElementType(), + AIPTy = PointerType::get(NewAI->getAllocatedType(), DPTy->getAddressSpace()); } Value *DstPtr = Builder.CreateBitCast(MTI->getDest(), AIPTy); @@ -1357,7 +1357,7 @@ continue; } - Type *LoadTy = cast(PN->getType())->getElementType(); + Type *LoadTy = AI->getAllocatedType(); PHINode *NewPN = PHINode::Create(LoadTy, PN->getNumIncomingValues(), PN->getName()+".ld", PN); @@ -2210,8 +2210,7 @@ // If the pointer is not the right type, insert a bitcast to the right // type. - Type *NewTy = - PointerType::get(AI->getType()->getElementType(), AddrSpace); + Type *NewTy = PointerType::get(AI->getAllocatedType(), AddrSpace); if (OtherPtr->getType() != NewTy) OtherPtr = new BitCastInst(OtherPtr, NewTy, OtherPtr->getName(), MI); @@ -2235,8 +2234,8 @@ OtherPtr->getName()+"."+Twine(i), MI); uint64_t EltOffset; - PointerType *OtherPtrTy = cast(OtherPtr->getType()); - Type *OtherTy = OtherPtrTy->getElementType(); + assert(AI->getType() == OtherPtr->getType()); + Type *OtherTy = AI->getAllocatedType(); if (StructType *ST = dyn_cast(OtherTy)) { EltOffset = DL.getStructLayout(ST)->getElementOffset(i); } else { @@ -2252,8 +2251,8 @@ OtherEltAlign = (unsigned)MinAlign(OtherEltAlign, EltOffset); } - Value *EltPtr = NewElts[i]; - Type *EltTy = cast(EltPtr->getType())->getElementType(); + AllocaInst *EltPtr = NewElts[i]; + Type *EltTy = EltPtr->getAllocatedType(); // If we got down to a scalar, insert a load or store as appropriate. if (EltTy->isSingleValueType()) { @@ -2485,8 +2484,7 @@ // Load the value from the alloca. If the NewElt is an aggregate, cast // the pointer to an integer of the same size before doing the load. Value *SrcField = NewElts[i]; - Type *FieldTy = - cast(SrcField->getType())->getElementType(); + Type *FieldTy = NewElts[i]->getAllocatedType(); uint64_t FieldSizeBits = DL.getTypeSizeInBits(FieldTy); // Ignore zero sized fields like {}, they obviously contain no data.