diff options
Diffstat (limited to 'llvm/lib/Transforms/IPO/Attributor.cpp')
-rw-r--r-- | llvm/lib/Transforms/IPO/Attributor.cpp | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp index ef6c82c00c8..043780377fc 100644 --- a/llvm/lib/Transforms/IPO/Attributor.cpp +++ b/llvm/lib/Transforms/IPO/Attributor.cpp @@ -4167,19 +4167,26 @@ bool Attributor::checkForAllCallSites( return false; } - if (RequireAllCallSites && !AssociatedFunction->hasLocalLinkage()) { + return checkForAllCallSites(Pred, *AssociatedFunction, RequireAllCallSites, + &QueryingAA); +} + +bool Attributor::checkForAllCallSites( + const function_ref<bool(AbstractCallSite)> &Pred, const Function &Fn, + bool RequireAllCallSites, const AbstractAttribute *QueryingAA) { + if (RequireAllCallSites && !Fn.hasLocalLinkage()) { LLVM_DEBUG( dbgs() - << "[Attributor] Function " << AssociatedFunction->getName() + << "[Attributor] Function " << Fn.getName() << " has no internal linkage, hence not all call sites are known\n"); return false; } - for (const Use &U : AssociatedFunction->uses()) { + for (const Use &U : Fn.uses()) { AbstractCallSite ACS(&U); if (!ACS) { LLVM_DEBUG(dbgs() << "[Attributor] Function " - << AssociatedFunction->getName() + << Fn.getName() << " has non call site use " << *U.get() << " in " << *U.getUser() << "\n"); return false; @@ -4188,15 +4195,16 @@ bool Attributor::checkForAllCallSites( Instruction *I = ACS.getInstruction(); Function *Caller = I->getFunction(); - const auto &LivenessAA = - getAAFor<AAIsDead>(QueryingAA, IRPosition::function(*Caller), + const auto *LivenessAA = + lookupAAFor<AAIsDead>(IRPosition::function(*Caller), QueryingAA, /* TrackDependence */ false); // Skip dead calls. - if (LivenessAA.isAssumedDead(I)) { + if (LivenessAA && LivenessAA->isAssumedDead(I)) { // We actually used liveness information so we have to record a // dependence. - recordDependence(LivenessAA, QueryingAA); + if (QueryingAA) + recordDependence(*LivenessAA, *QueryingAA); continue; } @@ -4207,7 +4215,7 @@ bool Attributor::checkForAllCallSites( continue; LLVM_DEBUG(dbgs() << "[Attributor] User " << EffectiveUse->getUser() << " is an invalid use of " - << AssociatedFunction->getName() << "\n"); + << Fn.getName() << "\n"); return false; } |