Lines Matching refs:Cand
139 const StoreToLoadForwardingCandidate &Cand) { in operator <<() argument
140 OS << *Cand.Store << " -->\n"; in operator <<()
141 OS.indent(2) << *Cand.Load << "\n"; in operator <<()
273 for (const auto &Cand : Candidates) { in removeDependencesFromMultipleStores() local
278 LoadToSingleCand.insert(std::make_pair(Cand.Load, &Cand)); in removeDependencesFromMultipleStores()
288 if (Cand.Store->getParent() == OtherCand->Store->getParent() && in removeDependencesFromMultipleStores()
289 Cand.isDependenceDistanceOfOne(PSE, L) && in removeDependencesFromMultipleStores()
292 if (getInstrIndex(OtherCand->Store) < getInstrIndex(Cand.Store)) in removeDependencesFromMultipleStores()
293 OtherCand = &Cand; in removeDependencesFromMultipleStores()
299 Candidates.remove_if([&](const StoreToLoadForwardingCandidate &Cand) { in removeDependencesFromMultipleStores() argument
300 if (LoadToSingleCand[Cand.Load] != &Cand) { in removeDependencesFromMultipleStores()
303 << Cand in removeDependencesFromMultipleStores()
420 propagateStoredValueToLoadUsers(const StoreToLoadForwardingCandidate &Cand, in propagateStoredValueToLoadUsers() argument
437 Value *Ptr = Cand.Load->getPointerOperand(); in propagateStoredValueToLoadUsers()
444 Cand.Load->getType(), InitialPtr, "load_initial", in propagateStoredValueToLoadUsers()
445 /* isVolatile */ false, Cand.Load->getAlign(), PH->getTerminator()); in propagateStoredValueToLoadUsers()
452 Type *StoreType = Cand.Store->getValueOperand()->getType(); in propagateStoredValueToLoadUsers()
453 auto &DL = Cand.Load->getParent()->getModule()->getDataLayout(); in propagateStoredValueToLoadUsers()
459 Value *StoreValue = Cand.Store->getValueOperand(); in propagateStoredValueToLoadUsers()
462 StoreValue, LoadType, "store_forward_cast", Cand.Store); in propagateStoredValueToLoadUsers()
466 Cand.Load->replaceAllUsesWith(PHI); in propagateStoredValueToLoadUsers()
510 for (const StoreToLoadForwardingCandidate &Cand : StoreToLoadDependences) { in processLoop() local
511 LLVM_DEBUG(dbgs() << "Candidate " << Cand); in processLoop()
515 if (!doesStoreDominatesAllLatches(Cand.Store->getParent(), L, DT)) in processLoop()
521 if (isLoadConditional(Cand.Load, L)) in processLoop()
526 if (!Cand.isDependenceDistanceOfOne(PSE, L)) in processLoop()
529 assert(isa<SCEVAddRecExpr>(PSE.getSCEV(Cand.Load->getPointerOperand())) && in processLoop()
532 isa<SCEVAddRecExpr>(PSE.getSCEV(Cand.Store->getPointerOperand())) && in processLoop()
535 Candidates.push_back(Cand); in processLoop()
593 const StoreToLoadForwardingCandidate &Cand) { in processLoop() argument
595 PSE.getSCEV(Cand.Load->getPointerOperand())) || in processLoop()
597 PSE.getSCEV(Cand.Store->getPointerOperand())); in processLoop()
606 for (const auto &Cand : Candidates) in processLoop() local
607 propagateStoredValueToLoadUsers(Cand, SEE); in processLoop()