Lines Matching refs:LI
747 void visitLoadInst(LoadInst &LI) { in visitLoadInst() argument
748 assert((!LI.isSimple() || LI.getType()->isSingleValueType()) && in visitLoadInst()
752 return PI.setAborted(&LI); in visitLoadInst()
754 const DataLayout &DL = LI.getModule()->getDataLayout(); in visitLoadInst()
755 uint64_t Size = DL.getTypeStoreSize(LI.getType()); in visitLoadInst()
756 return handleLoadOrStore(LI.getType(), LI, Offset, Size, LI.isVolatile()); in visitLoadInst()
912 if (LoadInst *LI = dyn_cast<LoadInst>(I)) { in hasUnsafePHIOrSelectUse() local
913 Size = std::max(Size, DL.getTypeStoreSize(LI->getType())); in hasUnsafePHIOrSelectUse()
1122 if (LoadInst *LI = dyn_cast<LoadInst>(I)) in isInstInList() local
1123 Ptr = LI->getOperand(0); in isInstInList()
1151 else if (LoadInst *LI = dyn_cast<LoadInst>(Inst)) in updateDebugInfo() local
1152 ConvertDebugDeclareToDebugValue(DDI, LI, DIB); in updateDebugInfo()
1164 } else if (LoadInst *LI = dyn_cast<LoadInst>(Inst)) { in updateDebugInfo() local
1165 Arg = LI->getPointerOperand(); in updateDebugInfo()
1304 if (LoadInst *LI = dyn_cast<LoadInst>(U->getUser())) { in INITIALIZE_PASS_DEPENDENCY() local
1305 UserTy = LI->getType(); in INITIALIZE_PASS_DEPENDENCY()
1363 LoadInst *LI = dyn_cast<LoadInst>(U); in isSafePHIToSpeculate() local
1364 if (!LI || !LI->isSimple()) in isSafePHIToSpeculate()
1370 if (LI->getParent() != BB) in isSafePHIToSpeculate()
1375 for (BasicBlock::iterator BBI = &PN; &*BBI != LI; ++BBI) in isSafePHIToSpeculate()
1379 MaxAlign = std::max(MaxAlign, LI->getAlignment()); in isSafePHIToSpeculate()
1437 LoadInst *LI = cast<LoadInst>(PN.user_back()); in speculatePHINodeLoads() local
1438 LI->replaceAllUsesWith(NewPN); in speculatePHINodeLoads()
1439 LI->eraseFromParent(); in speculatePHINodeLoads()
1483 LoadInst *LI = dyn_cast<LoadInst>(U); in isSafeSelectToSpeculate() local
1484 if (!LI || !LI->isSimple()) in isSafeSelectToSpeculate()
1491 !isSafeToLoadUnconditionally(TValue, LI, LI->getAlignment())) in isSafeSelectToSpeculate()
1494 !isSafeToLoadUnconditionally(FValue, LI, LI->getAlignment())) in isSafeSelectToSpeculate()
1509 LoadInst *LI = cast<LoadInst>(SI.user_back()); in speculateSelectInstLoads() local
1510 assert(LI->isSimple() && "We only speculate simple loads"); in speculateSelectInstLoads()
1512 IRB.SetInsertPoint(LI); in speculateSelectInstLoads()
1514 IRB.CreateLoad(TV, LI->getName() + ".sroa.speculate.load.true"); in speculateSelectInstLoads()
1516 IRB.CreateLoad(FV, LI->getName() + ".sroa.speculate.load.false"); in speculateSelectInstLoads()
1520 TL->setAlignment(LI->getAlignment()); in speculateSelectInstLoads()
1521 FL->setAlignment(LI->getAlignment()); in speculateSelectInstLoads()
1524 LI->getAAMetadata(Tags); in speculateSelectInstLoads()
1531 LI->getName() + ".sroa.speculated"); in speculateSelectInstLoads()
1534 LI->replaceAllUsesWith(V); in speculateSelectInstLoads()
1535 LI->eraseFromParent(); in speculateSelectInstLoads()
1824 if (auto *LI = dyn_cast<LoadInst>(I)) { in getAdjustedAlignment() local
1825 Alignment = LI->getAlignment(); in getAdjustedAlignment()
1826 Ty = LI->getType(); in getAdjustedAlignment()
1973 } else if (LoadInst *LI = dyn_cast<LoadInst>(U->getUser())) { in isVectorPromotionViableForSlice() local
1974 if (LI->isVolatile()) in isVectorPromotionViableForSlice()
1976 Type *LTy = LI->getType(); in isVectorPromotionViableForSlice()
2029 if (auto *LI = dyn_cast<LoadInst>(S.getUse()->getUser())) in isVectorPromotionViable() local
2030 CheckCandidateType(LI->getType()); in isVectorPromotionViable()
2133 if (LoadInst *LI = dyn_cast<LoadInst>(U->getUser())) { in isIntegerWideningViableForSlice() local
2134 if (LI->isVolatile()) in isIntegerWideningViableForSlice()
2139 if (!isa<VectorType>(LI->getType()) && RelBegin == 0 && RelEnd == Size) in isIntegerWideningViableForSlice()
2141 if (IntegerType *ITy = dyn_cast<IntegerType>(LI->getType())) { in isIntegerWideningViableForSlice()
2145 !canConvertValue(DL, AllocaTy, LI->getType())) { in isIntegerWideningViableForSlice()
2567 Value *rewriteIntegerLoad(LoadInst &LI) { in rewriteIntegerLoad() argument
2569 assert(!LI.isVolatile()); in rewriteIntegerLoad()
2575 V = extractInteger(DL, IRB, V, cast<IntegerType>(LI.getType()), Offset, in rewriteIntegerLoad()
2580 bool visitLoadInst(LoadInst &LI) { in visitLoadInst() argument
2581 DEBUG(dbgs() << " original: " << LI << "\n"); in visitLoadInst()
2582 Value *OldOp = LI.getOperand(0); in visitLoadInst()
2585 Type *TargetTy = IsSplit ? Type::getIntNTy(LI.getContext(), SliceSize * 8) in visitLoadInst()
2586 : LI.getType(); in visitLoadInst()
2591 } else if (IntTy && LI.getType()->isIntegerTy()) { in visitLoadInst()
2592 V = rewriteIntegerLoad(LI); in visitLoadInst()
2594 canConvertValue(DL, NewAllocaTy, LI.getType())) { in visitLoadInst()
2595 V = IRB.CreateAlignedLoad(&NewAI, NewAI.getAlignment(), LI.isVolatile(), in visitLoadInst()
2596 LI.getName()); in visitLoadInst()
2600 getSliceAlign(TargetTy), LI.isVolatile(), in visitLoadInst()
2601 LI.getName()); in visitLoadInst()
2607 assert(!LI.isVolatile()); in visitLoadInst()
2608 assert(LI.getType()->isIntegerTy() && in visitLoadInst()
2610 assert(SliceSize < DL.getTypeStoreSize(LI.getType()) && in visitLoadInst()
2612 assert(LI.getType()->getIntegerBitWidth() == in visitLoadInst()
2613 DL.getTypeStoreSizeInBits(LI.getType()) && in visitLoadInst()
2616 IRB.SetInsertPoint(std::next(BasicBlock::iterator(&LI))); in visitLoadInst()
2622 new LoadInst(UndefValue::get(LI.getType()->getPointerTo())); in visitLoadInst()
2625 LI.replaceAllUsesWith(V); in visitLoadInst()
2626 Placeholder->replaceAllUsesWith(&LI); in visitLoadInst()
2629 LI.replaceAllUsesWith(V); in visitLoadInst()
2632 Pass.DeadInsts.insert(&LI); in visitLoadInst()
2635 return !LI.isVolatile() && !IsPtrAdjusted; in visitLoadInst()
3262 bool visitLoadInst(LoadInst &LI) { in visitLoadInst() argument
3263 assert(LI.getPointerOperand() == *U); in visitLoadInst()
3264 if (!LI.isSimple() || LI.getType()->isSingleValueType()) in visitLoadInst()
3268 DEBUG(dbgs() << " original: " << LI << "\n"); in visitLoadInst()
3269 LoadOpSplitter Splitter(&LI, *U); in visitLoadInst()
3270 Value *V = UndefValue::get(LI.getType()); in visitLoadInst()
3271 Splitter.emitSplitOps(LI.getType(), V, LI.getName() + ".fca"); in visitLoadInst()
3272 LI.replaceAllUsesWith(V); in visitLoadInst()
3273 LI.eraseFromParent(); in visitLoadInst()
3546 if (auto *LI = dyn_cast<LoadInst>(I)) in presplitLoadsAndStores() local
3547 UnsplittableLoads.insert(LI); in presplitLoadsAndStores()
3554 if (auto *LI = dyn_cast<LoadInst>(I)) { in presplitLoadsAndStores() local
3555 assert(!LI->isVolatile() && "Cannot split volatile loads!"); in presplitLoadsAndStores()
3560 auto IsLoadSimplyStored = [](LoadInst *LI) { in presplitLoadsAndStores() argument
3561 for (User *LU : LI->users()) { in presplitLoadsAndStores()
3568 if (!IsLoadSimplyStored(LI)) { in presplitLoadsAndStores()
3569 UnsplittableLoads.insert(LI); in presplitLoadsAndStores()
3573 Loads.push_back(LI); in presplitLoadsAndStores()
3630 auto *LI = cast<LoadInst>(SI->getValueOperand()); in presplitLoadsAndStores() local
3633 if (UnsplittableLoads.count(LI)) in presplitLoadsAndStores()
3636 auto LoadOffsetsI = SplitOffsetsMap.find(LI); in presplitLoadsAndStores()
3652 << " " << *LI << "\n" in presplitLoadsAndStores()
3659 UnsplittableLoads.insert(LI); in presplitLoadsAndStores()
3669 auto *LI = in presplitLoadsAndStores() local
3671 return UnsplittableLoads.count(LI); in presplitLoadsAndStores()
3677 [&UnsplittableLoads](LoadInst *LI) { in presplitLoadsAndStores() argument
3678 return UnsplittableLoads.count(LI); in presplitLoadsAndStores()
3710 for (LoadInst *LI : Loads) { in presplitLoadsAndStores()
3713 IntegerType *Ty = cast<IntegerType>(LI->getType()); in presplitLoadsAndStores()
3717 auto &Offsets = SplitOffsetsMap[LI]; in presplitLoadsAndStores()
3724 Instruction *BasePtr = cast<Instruction>(LI->getPointerOperand()); in presplitLoadsAndStores()
3725 IRB.SetInsertPoint(BasicBlock::iterator(LI)); in presplitLoadsAndStores()
3727 DEBUG(dbgs() << " Splitting load: " << *LI << "\n"); in presplitLoadsAndStores()
3733 auto *PartPtrTy = PartTy->getPointerTo(LI->getPointerAddressSpace()); in presplitLoadsAndStores()
3738 getAdjustedAlignment(LI, PartOffset, DL), /*IsVolatile*/ false, in presplitLoadsAndStores()
3739 LI->getName()); in presplitLoadsAndStores()
3768 for (User *LU : LI->users()) { in presplitLoadsAndStores()
3814 SplitLoadsMap.insert(std::make_pair(LI, std::move(SplitLoads))); in presplitLoadsAndStores()
3817 DeadInsts.insert(LI); in presplitLoadsAndStores()
3827 auto *LI = cast<LoadInst>(SI->getValueOperand()); in presplitLoadsAndStores() local
3828 IntegerType *Ty = cast<IntegerType>(LI->getType()); in presplitLoadsAndStores()
3839 Value *LoadBasePtr = LI->getPointerOperand(); in presplitLoadsAndStores()
3845 auto SplitLoadsMapI = SplitLoadsMap.find(LI); in presplitLoadsAndStores()
3852 DEBUG(dbgs() << " of load: " << *LI << "\n"); in presplitLoadsAndStores()
3866 IRB.SetInsertPoint(BasicBlock::iterator(LI)); in presplitLoadsAndStores()
3871 getAdjustedAlignment(LI, PartOffset, DL), /*IsVolatile*/ false, in presplitLoadsAndStores()
3872 LI->getName()); in presplitLoadsAndStores()
3931 if (LI->hasOneUse()) { in presplitLoadsAndStores()
3932 assert(*LI->user_begin() == SI && "Single use isn't this store!"); in presplitLoadsAndStores()
3933 DeadInsts.insert(LI); in presplitLoadsAndStores()
4404 if (LoadInst *LI = dyn_cast<LoadInst>(I)) { in promoteAllocas() local
4405 assert(LI->getType() == AI->getAllocatedType()); in promoteAllocas()
4406 Insts.push_back(LI); in promoteAllocas()