[PM] Appease mingw32's auto-import DLL build with minimal tweaks.
authorNAKAMURA Takumi <geek4civic@gmail.com>
Sun, 28 Feb 2016 16:38:46 +0000 (16:38 +0000)
committerNAKAMURA Takumi <geek4civic@gmail.com>
Sun, 28 Feb 2016 16:38:46 +0000 (16:38 +0000)
char AnalysisBase::ID should be declared as extern and defined in one module.

llvm-svn: 262185

28 files changed:
llvm/include/llvm/Analysis/AliasAnalysis.h
llvm/include/llvm/Analysis/AssumptionCache.h
llvm/include/llvm/Analysis/CGSCCPassManager.h
llvm/include/llvm/Analysis/DominanceFrontier.h
llvm/include/llvm/Analysis/LazyCallGraph.h
llvm/include/llvm/Analysis/LoopInfo.h
llvm/include/llvm/Analysis/LoopPassManager.h
llvm/include/llvm/Analysis/PostDominators.h
llvm/include/llvm/Analysis/RegionInfo.h
llvm/include/llvm/Analysis/ScalarEvolution.h
llvm/include/llvm/Analysis/TargetLibraryInfo.h
llvm/include/llvm/Analysis/TargetTransformInfo.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/CGSCCPassManager.cpp
llvm/lib/Analysis/DominanceFrontier.cpp
llvm/lib/Analysis/LazyCallGraph.cpp
llvm/lib/Analysis/LoopInfo.cpp
llvm/lib/Analysis/LoopPassManager.cpp
llvm/lib/Analysis/PostDominators.cpp
llvm/lib/Analysis/RegionInfo.cpp
llvm/lib/Analysis/ScalarEvolution.cpp
llvm/lib/Analysis/TargetLibraryInfo.cpp
llvm/lib/Analysis/TargetTransformInfo.cpp
llvm/lib/IR/Dominators.cpp
llvm/lib/IR/PassManager.cpp

index 8422e010e4509a88150752befd9fde1c26f86637..327ae7bfc4148ecf782e30e5ce13b34fe00e4a3d 100644 (file)
@@ -1024,6 +1024,8 @@ private:
   }
 };
 
+extern template class AnalysisBase<AAManager>;
+
 /// A wrapper pass to provide the legacy pass manager access to a suitably
 /// prepared AAResults object.
 class AAResultsWrapperPass : public FunctionPass {
index 79d2bc966e4c2e6484f568bcb61d8a22b021b55b..fbd4b5243ad2447703f07c18f1553b01c7dfd510 100644 (file)
@@ -105,6 +105,8 @@ struct AssumptionAnalysis : AnalysisBase<AssumptionAnalysis> {
   AssumptionCache run(Function &F) { return AssumptionCache(F); }
 };
 
+extern template class AnalysisBase<AssumptionAnalysis>;
+
 /// \brief Printer pass for the \c AssumptionAnalysis results.
 class AssumptionPrinterPass : public PassBase<AssumptionPrinterPass> {
   raw_ostream &OS;
index 4da08741a8aa5ad17ec5299f67b901b5e18545ea..5cc1c382ad4b64af14f0140c4e750f5104f97823 100644 (file)
@@ -48,12 +48,16 @@ extern template class InnerAnalysisManagerProxy<CGSCCAnalysisManager, Module>;
 typedef InnerAnalysisManagerProxy<CGSCCAnalysisManager, Module>
     CGSCCAnalysisManagerModuleProxy;
 
+extern template class AnalysisBase<CGSCCAnalysisManagerModuleProxy>;
+
 extern template class OuterAnalysisManagerProxy<ModuleAnalysisManager,
                                                 LazyCallGraph::SCC>;
 /// A proxy from a \c ModuleAnalysisManager to an \c SCC.
 typedef OuterAnalysisManagerProxy<ModuleAnalysisManager, LazyCallGraph::SCC>
     ModuleAnalysisManagerCGSCCProxy;
 
+extern template class AnalysisBase<ModuleAnalysisManagerCGSCCProxy>;
+
 /// \brief The core module pass which does a post-order walk of the SCCs and
 /// runs a CGSCC pass over each one.
 ///
@@ -144,6 +148,8 @@ extern template class InnerAnalysisManagerProxy<FunctionAnalysisManager,
 typedef InnerAnalysisManagerProxy<FunctionAnalysisManager, LazyCallGraph::SCC>
     FunctionAnalysisManagerCGSCCProxy;
 
+extern template class AnalysisBase<FunctionAnalysisManagerCGSCCProxy>;
+
 extern template class OuterAnalysisManagerProxy<CGSCCAnalysisManager, Function>;
 /// A proxy from a \c CGSCCAnalysisManager to a \c Function.
 typedef OuterAnalysisManagerProxy<CGSCCAnalysisManager, Function>
index 62f9f0eab182fbc70cbe218c4a2ac12b9b9f31c7..ea2743dc81050a0c9f274f2ae574599a1f97d55f 100644 (file)
@@ -176,6 +176,8 @@ struct DominanceFrontierAnalysis : AnalysisBase<DominanceFrontierAnalysis> {
   DominanceFrontier run(Function &F, AnalysisManager<Function> *AM);
 };
 
+extern template class AnalysisBase<DominanceFrontierAnalysis>;
+
 /// \brief Printer pass for the \c DominanceFrontier.
 class DominanceFrontierPrinterPass
     : public PassBase<DominanceFrontierPrinterPass> {
index 0c0524605787a59c7cb0843feb08bc77dc6055c0..af2e067690d316872dc69f2d57344d80b6075392 100644 (file)
@@ -906,6 +906,8 @@ struct LazyCallGraphAnalysis : AnalysisBase<LazyCallGraphAnalysis> {
   LazyCallGraph run(Module &M) { return LazyCallGraph(M); }
 };
 
+extern template class AnalysisBase<LazyCallGraphAnalysis>;
+
 /// A pass which prints the call graph to a \c raw_ostream.
 ///
 /// This is primarily useful for testing the analysis.
index 55bafd261852aaa29e95101ae0a7938c87effc4e..d33c215e1f43864d4bd189d97b385521063833e8 100644 (file)
@@ -793,6 +793,8 @@ struct LoopAnalysis : AnalysisBase<LoopAnalysis> {
   LoopInfo run(Function &F, AnalysisManager<Function> *AM);
 };
 
+extern template class AnalysisBase<LoopAnalysis>;
+
 /// \brief Printer pass for the \c LoopAnalysis results.
 class LoopPrinterPass : public PassBase<LoopPrinterPass> {
   raw_ostream &OS;
index c3a6c4e354588d56dde4d874e2c8f31b0b0780fd..34bd78d6eb34ab4b6de0c45cf6fd85f540730196 100644 (file)
@@ -43,6 +43,8 @@ extern template class InnerAnalysisManagerProxy<LoopAnalysisManager, Function>;
 typedef InnerAnalysisManagerProxy<LoopAnalysisManager, Function>
     LoopAnalysisManagerFunctionProxy;
 
+extern template class AnalysisBase<LoopAnalysisManagerFunctionProxy>;
+
 extern template class OuterAnalysisManagerProxy<FunctionAnalysisManager, Loop>;
 /// A proxy from a \c FunctionAnalysisManager to a \c Loop.
 typedef OuterAnalysisManagerProxy<FunctionAnalysisManager, Loop>
index 8800d4ffd46ccdb643c538ccc11d96942e69795d..fac8e88c2b0933e83b6320dd777bb44f7d43cf5c 100644 (file)
@@ -46,6 +46,8 @@ struct PostDominatorTreeAnalysis : AnalysisBase<PostDominatorTreeAnalysis> {
   PostDominatorTree run(Function &F);
 };
 
+extern template class AnalysisBase<PostDominatorTreeAnalysis>;
+
 /// \brief Printer pass for the \c PostDominatorTree.
 class PostDominatorTreePrinterPass
     : public PassBase<PostDominatorTreePrinterPass> {
index 69e00375de9d5d78bbbb4fad894b7d76ef3bc2e3..1ab8bbef10f63441430ae4cf80f750e3fd74a4a8 100644 (file)
@@ -929,6 +929,8 @@ struct RegionInfoAnalysis : AnalysisBase<RegionInfoAnalysis> {
   RegionInfo run(Function &F, AnalysisManager<Function> *AM);
 };
 
+extern template class AnalysisBase<RegionInfoAnalysis>;
+
 /// \brief Printer pass for the \c RegionInfo.
 class RegionInfoPrinterPass : public PassBase<RegionInfoPrinterPass> {
   raw_ostream &OS;
index 8487c9695315087d1a705ec360b634203ffcf4a6..02245911112333bb52c0eb064cc7ef147ee0683e 100644 (file)
@@ -1421,6 +1421,8 @@ namespace llvm {
     ScalarEvolution run(Function &F, AnalysisManager<Function> *AM);
   };
 
+  extern template class AnalysisBase<ScalarEvolutionAnalysis>;
+
   /// \brief Printer pass for the \c ScalarEvolutionAnalysis results.
   class ScalarEvolutionPrinterPass
       : public PassBase<ScalarEvolutionPrinterPass> {
index 6e0776fd17b4088730927c7b7f5c8a7b83cef0f1..b6792586fae880ec9e9fdc78992f64b868a9d0e1 100644 (file)
@@ -299,6 +299,8 @@ private:
   TargetLibraryInfoImpl &lookupInfoImpl(Triple T);
 };
 
+extern template class AnalysisBase<TargetLibraryAnalysis>;
+
 class TargetLibraryInfoWrapperPass : public ImmutablePass {
   TargetLibraryInfoImpl TLIImpl;
   TargetLibraryInfo TLI;
index 7c97b4fd3b936135a5d512fe1d83cbeba74b8a22..bdc589c60ea11a221e17dab8e79bb242fcdbd616 100644 (file)
@@ -938,6 +938,8 @@ private:
   static Result getDefaultTTI(const Function &F);
 };
 
+extern template class AnalysisBase<TargetIRAnalysis>;
+
 /// \brief Wrapper pass for TargetTransformInfo.
 ///
 /// This pass can be constructed from a TTI object which it stores internally
index dece1533accb4142079ec9e7a83a1724e6eed772..1082896f0c8a06c91a17eeb71056568257165d36 100644 (file)
@@ -190,6 +190,8 @@ struct DominatorTreeAnalysis : AnalysisBase<DominatorTreeAnalysis> {
   DominatorTree run(Function &F);
 };
 
+extern template class AnalysisBase<DominatorTreeAnalysis>;
+
 /// \brief Printer pass for the \c DominatorTree.
 class DominatorTreePrinterPass : public PassBase<DominatorTreePrinterPass> {
   raw_ostream &OS;
index 27ca84194a670b395f429d7dea5a69df172afcf8..1ba04fd0e02a7c9354bf64e23050af11e69b18c8 100644 (file)
@@ -749,6 +749,8 @@ extern template class InnerAnalysisManagerProxy<FunctionAnalysisManager,
 typedef InnerAnalysisManagerProxy<FunctionAnalysisManager, Module>
     FunctionAnalysisManagerModuleProxy;
 
+extern template class AnalysisBase<FunctionAnalysisManagerModuleProxy>;
+
 /// \brief A function analysis which acts as a proxy for a module analysis
 /// manager.
 ///
index a30aedc4060fd415a0b07ec313ce0ed8093faa2a..29670cb4480f764be65f9f02971962417b89ac64 100644 (file)
@@ -390,6 +390,9 @@ bool AAResults::canInstructionRangeModRef(const Instruction &I1,
 // Provide a definition for the root virtual destructor.
 AAResults::Concept::~Concept() {}
 
+// Provide a definition for the static object used to identify passes.
+template class AnalysisBase<AAManager>;
+
 namespace {
 /// A wrapper pass for external alias analyses. This just squirrels away the
 /// callback used to run any analyses and register their results.
index 6af2dc12d066345faf1340dc806897a1d1bf65ce..6626b60263cce2546d578455b031d51288a459c2 100644 (file)
@@ -74,6 +74,8 @@ void AssumptionCache::registerAssumption(CallInst *CI) {
 #endif
 }
 
+template class AnalysisBase<AssumptionAnalysis>;
+
 PreservedAnalyses AssumptionPrinterPass::run(Function &F,
                                              AnalysisManager<Function> *AM) {
   AssumptionCache &AC = AM->getResult<AssumptionAnalysis>(F);
index 6326b34d68ac925d78702a9595a493f539b28658..cabbf9176035082004be26f5ebcec2d40bf2be1a 100644 (file)
@@ -18,9 +18,12 @@ namespace llvm {
 template class PassManager<LazyCallGraph::SCC>;
 template class AnalysisManager<LazyCallGraph::SCC>;
 template class InnerAnalysisManagerProxy<CGSCCAnalysisManager, Module>;
+template class AnalysisBase<CGSCCAnalysisManagerModuleProxy>;
 template class OuterAnalysisManagerProxy<ModuleAnalysisManager,
                                          LazyCallGraph::SCC>;
+template class AnalysisBase<ModuleAnalysisManagerCGSCCProxy>;
 template class InnerAnalysisManagerProxy<FunctionAnalysisManager,
                                          LazyCallGraph::SCC>;
+template class AnalysisBase<FunctionAnalysisManagerCGSCCProxy>;
 template class OuterAnalysisManagerProxy<CGSCCAnalysisManager, Function>;
 }
index 00904a95ce7fbc998918fd193988ed7dd895ed3d..6fc6581b15bb73613b32a6994c585df90f6be986 100644 (file)
@@ -56,6 +56,8 @@ LLVM_DUMP_METHOD void DominanceFrontierWrapperPass::dump() const {
 }
 #endif
 
+template class AnalysisBase<DominanceFrontierAnalysis>;
+
 DominanceFrontier DominanceFrontierAnalysis::run(Function &F,
                                                  FunctionAnalysisManager *AM) {
   DominanceFrontier DF;
index 88f5cd7dd9ff8b4a375f25c73f821e671bb2503e..17a9d04b78717beed797bfbc5c72de5ac2a9a016 100644 (file)
@@ -1499,6 +1499,8 @@ LazyCallGraph::RefSCC *LazyCallGraph::getNextRefSCCInPostOrder() {
   }
 }
 
+template class AnalysisBase<LazyCallGraphAnalysis>;
+
 LazyCallGraphPrinterPass::LazyCallGraphPrinterPass(raw_ostream &OS) : OS(OS) {}
 
 static void printNode(raw_ostream &OS, LazyCallGraph::Node &N) {
index bcec24c822f3a6aebc01f3aeeccaef57358502f0..83ce4c322b89dcd24a2efaa08afc80af104ba2a0 100644 (file)
@@ -641,6 +641,8 @@ void LoopInfo::markAsRemoved(Loop *Unloop) {
   }
 }
 
+template class AnalysisBase<LoopAnalysis>;
+
 LoopInfo LoopAnalysis::run(Function &F, AnalysisManager<Function> *AM) {
   // FIXME: Currently we create a LoopInfo from scratch for every function.
   // This may prove to be too wasteful due to deallocating and re-allocating
index 76210fa89c0fd43b88ce106d0c0e17505f392e67..4e90cfac9e552864fa3fb9f00075981616562ab5 100644 (file)
@@ -16,5 +16,6 @@ namespace llvm {
 template class PassManager<Loop>;
 template class AnalysisManager<Loop>;
 template class InnerAnalysisManagerProxy<LoopAnalysisManager, Function>;
+template class AnalysisBase<LoopAnalysisManagerFunctionProxy>;
 template class OuterAnalysisManagerProxy<FunctionAnalysisManager, Loop>;
 }
index d617a876b8418adccf3aa2e6ae14971ba98b325b..1c4cfba69a5d096a029d958cf7c5ee09aff8eb4f 100644 (file)
@@ -44,6 +44,8 @@ FunctionPass* llvm::createPostDomTree() {
   return new PostDominatorTreeWrapperPass();
 }
 
+template class AnalysisBase<PostDominatorTreeAnalysis>;
+
 PostDominatorTree PostDominatorTreeAnalysis::run(Function &F) {
   PostDominatorTree PDT;
   PDT.recalculate(F);
index 40501e6f7b65af53f7382275f10c3ef173e183ae..231db999a45a1865a45c5c96e865328bc3c17edf 100644 (file)
@@ -185,6 +185,8 @@ namespace llvm {
 // RegionInfoAnalysis implementation
 //
 
+template class AnalysisBase<RegionInfoAnalysis>;
+
 RegionInfo RegionInfoAnalysis::run(Function &F, AnalysisManager<Function> *AM) {
   RegionInfo RI;
   auto *DT = &AM->getResult<DominatorTreeAnalysis>(F);
index 2056306e1270bb040cc58d547705d56d4169e100..f6c2a78c54fca8a511a911263452c2f39e716eaf 100644 (file)
@@ -9554,6 +9554,8 @@ void ScalarEvolution::verify() const {
   // TODO: Verify more things.
 }
 
+template class AnalysisBase<ScalarEvolutionAnalysis>;
+
 ScalarEvolution ScalarEvolutionAnalysis::run(Function &F,
                                              AnalysisManager<Function> *AM) {
   return ScalarEvolution(F, AM->getResult<TargetLibraryAnalysis>(F),
index 950ee549f8090f864e3e44753dcc4c1f222c252c..d3fc779df9280a0b66003f8a0b8bde809f8b6e7a 100644 (file)
@@ -636,6 +636,8 @@ TargetLibraryInfoWrapperPass::TargetLibraryInfoWrapperPass(
   initializeTargetLibraryInfoWrapperPassPass(*PassRegistry::getPassRegistry());
 }
 
+template class AnalysisBase<TargetLibraryAnalysis>;
+
 // Register the basic pass.
 INITIALIZE_PASS(TargetLibraryInfoWrapperPass, "targetlibinfo",
                 "Target Library Information", false, true)
index a9e18e01caafc453d89b02394520b3bf5162fa13..9e5190b0e6f26616c06791546b9950301b244048 100644 (file)
@@ -377,6 +377,8 @@ TargetIRAnalysis::Result TargetIRAnalysis::run(const Function &F) {
   return TTICallback(F);
 }
 
+template class AnalysisBase<TargetIRAnalysis>;
+
 TargetIRAnalysis::Result TargetIRAnalysis::getDefaultTTI(const Function &F) {
   return Result(F.getParent()->getDataLayout());
 }
index c47091e29088a0b0cecf1b12b49c1a5d9c9e7ea6..7903799ba30c77289a8608825b9d9b6965707547 100644 (file)
@@ -308,6 +308,8 @@ DominatorTree DominatorTreeAnalysis::run(Function &F) {
   return DT;
 }
 
+template class AnalysisBase<DominatorTreeAnalysis>;
+
 DominatorTreePrinterPass::DominatorTreePrinterPass(raw_ostream &OS) : OS(OS) {}
 
 PreservedAnalyses DominatorTreePrinterPass::run(Function &F,
index 9d5b4cb0516998fa5d4df90078db4f8a1736fc3a..eb5ba437a29fcae7ac21d575d3c57eb1a2026669 100644 (file)
@@ -20,5 +20,6 @@ template class PassManager<Function>;
 template class AnalysisManager<Module>;
 template class AnalysisManager<Function>;
 template class InnerAnalysisManagerProxy<FunctionAnalysisManager, Module>;
+template class AnalysisBase<FunctionAnalysisManagerModuleProxy>;
 template class OuterAnalysisManagerProxy<ModuleAnalysisManager, Function>;
 }