mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-23 02:29:18 +00:00
[PM] Don't run the machinery of invalidating all the analysis passes
when all are being preserved. We want to short-circuit this for a couple of reasons. One, I don't really want passes to grow a dependency on actually receiving their invalidate call when they've been preserved. I'm thinking about removing this entirely. But more importantly, preserving everything is likely to be the common case in a lot of scenarios, and it would be really good to bypass all of the invalidation and preservation machinery there. Avoiding calling N opaque functions to try to invalidate things that are by definition still valid seems important. =] This wasn't really inpsired by much other than seeing the spam in the logging for analyses, but it seems better ot get it checked in rather than forgetting about it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225163 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
040ca449b2
commit
1ab487fdc7
@ -141,15 +141,19 @@ public:
|
|||||||
PreservedPassIDs.count(PassID);
|
PreservedPassIDs.count(PassID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// \brief Test whether all passes are preserved.
|
||||||
|
///
|
||||||
|
/// This is used primarily to optimize for the case of no changes which will
|
||||||
|
/// common in many scenarios.
|
||||||
|
bool areAllPreserved() const {
|
||||||
|
return PreservedPassIDs.count((void *)AllPassesID);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Note that this must not be -1 or -2 as those are already used by the
|
// Note that this must not be -1 or -2 as those are already used by the
|
||||||
// SmallPtrSet.
|
// SmallPtrSet.
|
||||||
static const uintptr_t AllPassesID = (intptr_t)(-3);
|
static const uintptr_t AllPassesID = (intptr_t)(-3);
|
||||||
|
|
||||||
bool areAllPreserved() const {
|
|
||||||
return PreservedPassIDs.count((void *)AllPassesID);
|
|
||||||
}
|
|
||||||
|
|
||||||
SmallPtrSet<void *, 2> PreservedPassIDs;
|
SmallPtrSet<void *, 2> PreservedPassIDs;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -92,6 +92,10 @@ void CGSCCAnalysisManager::invalidateImpl(void *PassID, LazyCallGraph::SCC &C) {
|
|||||||
|
|
||||||
void CGSCCAnalysisManager::invalidateImpl(LazyCallGraph::SCC &C,
|
void CGSCCAnalysisManager::invalidateImpl(LazyCallGraph::SCC &C,
|
||||||
const PreservedAnalyses &PA) {
|
const PreservedAnalyses &PA) {
|
||||||
|
// Short circuit for a common case of all analyses being preserved.
|
||||||
|
if (PA.areAllPreserved())
|
||||||
|
return;
|
||||||
|
|
||||||
if (DebugPM)
|
if (DebugPM)
|
||||||
dbgs() << "Invalidating all non-preserved analyses for SCC: " << C.getName()
|
dbgs() << "Invalidating all non-preserved analyses for SCC: " << C.getName()
|
||||||
<< "\n";
|
<< "\n";
|
||||||
|
@ -78,6 +78,10 @@ void ModuleAnalysisManager::invalidateImpl(void *PassID, Module &M) {
|
|||||||
|
|
||||||
void ModuleAnalysisManager::invalidateImpl(Module &M,
|
void ModuleAnalysisManager::invalidateImpl(Module &M,
|
||||||
const PreservedAnalyses &PA) {
|
const PreservedAnalyses &PA) {
|
||||||
|
// Short circuit for a common case of all analyses being preserved.
|
||||||
|
if (PA.areAllPreserved())
|
||||||
|
return;
|
||||||
|
|
||||||
if (DebugPM)
|
if (DebugPM)
|
||||||
dbgs() << "Invalidating all non-preserved analyses for module: "
|
dbgs() << "Invalidating all non-preserved analyses for module: "
|
||||||
<< M.getModuleIdentifier() << "\n";
|
<< M.getModuleIdentifier() << "\n";
|
||||||
@ -176,6 +180,10 @@ void FunctionAnalysisManager::invalidateImpl(void *PassID, Function &F) {
|
|||||||
|
|
||||||
void FunctionAnalysisManager::invalidateImpl(Function &F,
|
void FunctionAnalysisManager::invalidateImpl(Function &F,
|
||||||
const PreservedAnalyses &PA) {
|
const PreservedAnalyses &PA) {
|
||||||
|
// Short circuit for a common case of all analyses being preserved.
|
||||||
|
if (PA.areAllPreserved())
|
||||||
|
return;
|
||||||
|
|
||||||
if (DebugPM)
|
if (DebugPM)
|
||||||
dbgs() << "Invalidating all non-preserved analyses for function: "
|
dbgs() << "Invalidating all non-preserved analyses for function: "
|
||||||
<< F.getName() << "\n";
|
<< F.getName() << "\n";
|
||||||
|
@ -94,6 +94,13 @@
|
|||||||
; CHECK-LCG-ANALYSIS: Running module analysis: Lazy CallGraph Analysis
|
; CHECK-LCG-ANALYSIS: Running module analysis: Lazy CallGraph Analysis
|
||||||
; CHECK-LCG-ANALYSIS: Starting CGSCC pass manager run.
|
; CHECK-LCG-ANALYSIS: Starting CGSCC pass manager run.
|
||||||
|
|
||||||
|
; Make sure no-op passes that preserve all analyses don't even try to do any
|
||||||
|
; analysis invalidation.
|
||||||
|
; RUN: opt -disable-output -debug-pass-manager -debug-cgscc-pass-manager -passes='cgscc(function(no-op-function))' %s 2>&1 \
|
||||||
|
; RUN: | FileCheck %s --check-prefix=CHECK-NO-OP-INVALIDATION
|
||||||
|
; CHECK-NO-OP-INVALIDATION: Starting module pass manager
|
||||||
|
; CHECK-NO-OP-INVALIDATION-NOT: Invalidating all non-preserved analyses
|
||||||
|
|
||||||
define void @foo() {
|
define void @foo() {
|
||||||
ret void
|
ret void
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user