forked from OSchip/llvm-project
De-duplicate some code for creating an AARGetter suitable for the legacy PM.
I'm about to use this in a couple more places. Differential Revision: https://reviews.llvm.org/D29793 llvm-svn: 294648
This commit is contained in:
parent
f1e773cab5
commit
cea1e4e79a
|
@ -233,6 +233,24 @@ FunctionPass *createBasicAAWrapperPass();
|
|||
/// populated to the best of our ability for a particular function when inside
|
||||
/// of a \c ModulePass or a \c CallGraphSCCPass.
|
||||
BasicAAResult createLegacyPMBasicAAResult(Pass &P, Function &F);
|
||||
|
||||
/// This class is a functor to be used in legacy module or SCC passes for
|
||||
/// computing AA results for a function. We store the results in fields so that
|
||||
/// they live long enough to be queried, but we re-use them each time.
|
||||
class LegacyAARGetter {
|
||||
Pass &P;
|
||||
Optional<BasicAAResult> BAR;
|
||||
Optional<AAResults> AAR;
|
||||
|
||||
public:
|
||||
LegacyAARGetter(Pass &P) : P(P) {}
|
||||
AAResults &operator()(Function &F) {
|
||||
BAR.emplace(createLegacyPMBasicAAResult(P, F));
|
||||
AAR.emplace(createLegacyPMAAResults(P, F, *BAR));
|
||||
return *AAR;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1001,16 +1001,7 @@ bool ArgPromotion::runOnSCC(CallGraphSCC &SCC) {
|
|||
// changes.
|
||||
CallGraph &CG = getAnalysis<CallGraphWrapperPass>().getCallGraph();
|
||||
|
||||
// We compute dedicated AA results for each function in the SCC as needed. We
|
||||
// use a lambda referencing external objects so that they live long enough to
|
||||
// be queried, but we re-use them each time.
|
||||
Optional<BasicAAResult> BAR;
|
||||
Optional<AAResults> AAR;
|
||||
auto AARGetter = [&](Function &F) -> AAResults & {
|
||||
BAR.emplace(createLegacyPMBasicAAResult(*this, F));
|
||||
AAR.emplace(createLegacyPMAAResults(*this, F, *BAR));
|
||||
return *AAR;
|
||||
};
|
||||
LegacyAARGetter AARGetter(*this);
|
||||
|
||||
bool Changed = false, LocalChange;
|
||||
|
||||
|
|
|
@ -174,7 +174,7 @@ static MemoryAccessKind checkFunctionMemoryAccess(Function &F, AAResults &AAR,
|
|||
|
||||
/// Deduce readonly/readnone attributes for the SCC.
|
||||
template <typename AARGetterT>
|
||||
static bool addReadAttrs(const SCCNodeSet &SCCNodes, AARGetterT AARGetter) {
|
||||
static bool addReadAttrs(const SCCNodeSet &SCCNodes, AARGetterT &&AARGetter) {
|
||||
// Check if any of the functions in the SCC read or write memory. If they
|
||||
// write memory then they can't be marked readnone or readonly.
|
||||
bool ReadsMemory = false;
|
||||
|
@ -1163,19 +1163,7 @@ static bool runImpl(CallGraphSCC &SCC, AARGetterT AARGetter) {
|
|||
bool PostOrderFunctionAttrsLegacyPass::runOnSCC(CallGraphSCC &SCC) {
|
||||
if (skipSCC(SCC))
|
||||
return false;
|
||||
|
||||
// We compute dedicated AA results for each function in the SCC as needed. We
|
||||
// use a lambda referencing external objects so that they live long enough to
|
||||
// be queried, but we re-use them each time.
|
||||
Optional<BasicAAResult> BAR;
|
||||
Optional<AAResults> AAR;
|
||||
auto AARGetter = [&](Function &F) -> AAResults & {
|
||||
BAR.emplace(createLegacyPMBasicAAResult(*this, F));
|
||||
AAR.emplace(createLegacyPMAAResults(*this, F, *BAR));
|
||||
return *AAR;
|
||||
};
|
||||
|
||||
return runImpl(SCC, AARGetter);
|
||||
return runImpl(SCC, LegacyAARGetter(*this));
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
|
|
@ -636,22 +636,12 @@ bool LegacyInlinerBase::inlineCalls(CallGraphSCC &SCC) {
|
|||
ACT = &getAnalysis<AssumptionCacheTracker>();
|
||||
PSI = getAnalysis<ProfileSummaryInfoWrapperPass>().getPSI();
|
||||
auto &TLI = getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
|
||||
// We compute dedicated AA results for each function in the SCC as needed. We
|
||||
// use a lambda referencing external objects so that they live long enough to
|
||||
// be queried, but we re-use them each time.
|
||||
Optional<BasicAAResult> BAR;
|
||||
Optional<AAResults> AAR;
|
||||
auto AARGetter = [&](Function &F) -> AAResults & {
|
||||
BAR.emplace(createLegacyPMBasicAAResult(*this, F));
|
||||
AAR.emplace(createLegacyPMAAResults(*this, F, *BAR));
|
||||
return *AAR;
|
||||
};
|
||||
auto GetAssumptionCache = [&](Function &F) -> AssumptionCache & {
|
||||
return ACT->getAssumptionCache(F);
|
||||
};
|
||||
return inlineCallsImpl(SCC, CG, GetAssumptionCache, PSI, TLI, InsertLifetime,
|
||||
[this](CallSite CS) { return getInlineCost(CS); },
|
||||
AARGetter, ImportedFunctionsStats);
|
||||
LegacyAARGetter(*this), ImportedFunctionsStats);
|
||||
}
|
||||
|
||||
/// Remove now-dead linkonce functions at the end of
|
||||
|
|
Loading…
Reference in New Issue