[PM] Implement the final conclusion as to how the analysis IDs should
authorChandler Carruth <chandlerc@gmail.com>
Fri, 11 Mar 2016 10:22:49 +0000 (10:22 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Fri, 11 Mar 2016 10:22:49 +0000 (10:22 +0000)
commitb4faf13c15596473468293d92940500dd16784b7
treed3a542d9eb94f7c82e6dc8283ab1b562a2fe9fb1
parentc1263534738a5bf464f01942c6f34c21ea6293e1
[PM] Implement the final conclusion as to how the analysis IDs should
work in the face of the limitations of DLLs and templated static
variables.

This requires passes that use the AnalysisBase mixin provide a static
variable themselves. So as to keep their APIs clean, I've made these
private and befriended the CRTP base class (which is the common
practice).

I've added documentation to AnalysisBase for why this is necessary and
at what point we can go back to the much simpler system.

This is clearly a better pattern than the extern template as it caught
*numerous* places where the template magic hadn't been applied and
things were "just working" but would eventually have broken
mysteriously.

llvm-svn: 263216
47 files changed:
llvm/include/llvm/Analysis/AliasAnalysis.h
llvm/include/llvm/Analysis/AssumptionCache.h
llvm/include/llvm/Analysis/BasicAliasAnalysis.h
llvm/include/llvm/Analysis/CFLAliasAnalysis.h
llvm/include/llvm/Analysis/CGSCCPassManager.h
llvm/include/llvm/Analysis/CallGraph.h
llvm/include/llvm/Analysis/DominanceFrontier.h
llvm/include/llvm/Analysis/GlobalsModRef.h
llvm/include/llvm/Analysis/LazyCallGraph.h
llvm/include/llvm/Analysis/LoopInfo.h
llvm/include/llvm/Analysis/LoopPassManager.h
llvm/include/llvm/Analysis/MemoryDependenceAnalysis.h
llvm/include/llvm/Analysis/ObjCARCAliasAnalysis.h
llvm/include/llvm/Analysis/PostDominators.h
llvm/include/llvm/Analysis/RegionInfo.h
llvm/include/llvm/Analysis/ScalarEvolution.h
llvm/include/llvm/Analysis/ScalarEvolutionAliasAnalysis.h
llvm/include/llvm/Analysis/ScopedNoAliasAA.h
llvm/include/llvm/Analysis/TargetLibraryInfo.h
llvm/include/llvm/Analysis/TargetTransformInfo.h
llvm/include/llvm/Analysis/TypeBasedAliasAnalysis.h
llvm/include/llvm/IR/Dominators.h
llvm/include/llvm/IR/PassManager.h
llvm/lib/Analysis/AliasAnalysis.cpp
llvm/lib/Analysis/AssumptionCache.cpp
llvm/lib/Analysis/BasicAliasAnalysis.cpp
llvm/lib/Analysis/CFLAliasAnalysis.cpp
llvm/lib/Analysis/CGSCCPassManager.cpp
llvm/lib/Analysis/CallGraph.cpp
llvm/lib/Analysis/DominanceFrontier.cpp
llvm/lib/Analysis/GlobalsModRef.cpp
llvm/lib/Analysis/LazyCallGraph.cpp
llvm/lib/Analysis/LoopInfo.cpp
llvm/lib/Analysis/LoopPassManager.cpp
llvm/lib/Analysis/MemoryDependenceAnalysis.cpp
llvm/lib/Analysis/PostDominators.cpp
llvm/lib/Analysis/RegionInfo.cpp
llvm/lib/Analysis/ScalarEvolution.cpp
llvm/lib/Analysis/ScalarEvolutionAliasAnalysis.cpp
llvm/lib/Analysis/ScopedNoAliasAA.cpp
llvm/lib/Analysis/TargetLibraryInfo.cpp
llvm/lib/Analysis/TargetTransformInfo.cpp
llvm/lib/Analysis/TypeBasedAliasAnalysis.cpp
llvm/lib/IR/Dominators.cpp
llvm/lib/IR/PassManager.cpp
llvm/lib/Passes/PassBuilder.cpp
llvm/unittests/IR/PassManagerTest.cpp