summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/IPO/Attributor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Transforms/IPO/Attributor.cpp')
-rw-r--r--llvm/lib/Transforms/IPO/Attributor.cpp26
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;
}
OpenPOWER on IntegriCloud