Lines Matching defs:Cand

139                                  const StoreToLoadForwardingCandidate &Cand) {
140 OS << *Cand.Store << " -->\n";
141 OS.indent(2) << *Cand.Load << "\n";
274 for (const auto &Cand : Candidates) {
279 LoadToSingleCand.insert(std::make_pair(Cand.Load, &Cand));
289 if (Cand.Store->getParent() == OtherCand->Store->getParent() &&
290 Cand.isDependenceDistanceOfOne(PSE, L) &&
293 if (getInstrIndex(OtherCand->Store) < getInstrIndex(Cand.Store))
294 OtherCand = &Cand;
300 Candidates.remove_if([&](const StoreToLoadForwardingCandidate &Cand) {
301 if (LoadToSingleCand[Cand.Load] != &Cand) {
304 << Cand
422 propagateStoredValueToLoadUsers(const StoreToLoadForwardingCandidate &Cand,
439 Value *Ptr = Cand.Load->getPointerOperand();
446 new LoadInst(Cand.Load->getType(), InitialPtr, "load_initial",
447 /* isVolatile */ false, Cand.Load->getAlign(),
459 Type *StoreType = Cand.Store->getValueOperand()->getType();
460 auto &DL = Cand.Load->getDataLayout();
466 Value *StoreValue = Cand.Store->getValueOperand();
470 Cand.Store->getIterator());
474 cast<Instruction>(StoreValue)->setDebugLoc(Cand.Load->getDebugLoc());
479 Cand.Load->replaceAllUsesWith(PHI);
480 PHI->setDebugLoc(Cand.Load->getDebugLoc());
524 for (const StoreToLoadForwardingCandidate &Cand : StoreToLoadDependences) {
525 LLVM_DEBUG(dbgs() << "Candidate " << Cand);
529 if (!doesStoreDominatesAllLatches(Cand.Store->getParent(), L, DT))
535 if (isLoadConditional(Cand.Load, L))
540 if (!Cand.isDependenceDistanceOfOne(PSE, L))
543 assert(isa<SCEVAddRecExpr>(PSE.getSCEV(Cand.Load->getPointerOperand())) &&
546 isa<SCEVAddRecExpr>(PSE.getSCEV(Cand.Store->getPointerOperand())) &&
549 Candidates.push_back(Cand);
604 const StoreToLoadForwardingCandidate &Cand) {
606 PSE.getSCEV(Cand.Load->getPointerOperand())) ||
608 PSE.getSCEV(Cand.Store->getPointerOperand()));
617 for (const auto &Cand : Candidates)
618 propagateStoredValueToLoadUsers(Cand, SEE);