[llvm] r262188 - [PM] Appease mingw32's auto-import DLL build with minimal tweaks, with fix for clang.

Chandler Carruth via llvm-commits llvm-commits at lists.llvm.org
Sun Feb 28 10:53:47 PST 2016


On Sun, Feb 28, 2016 at 9:21 AM NAKAMURA Takumi via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: chapuni
> Date: Sun Feb 28 11:17:00 2016
> New Revision: 262188
>
> URL: http://llvm.org/viewvc/llvm-project?rev=262188&view=rev
> Log:
> [PM] Appease mingw32's auto-import DLL build with minimal tweaks, with fix
> for clang.
>

As I mentioned to you in IRC, I really dislike this change.

I think this needs discussion and at least some substantial changes in the
way of comments to explain what is going on and why it is needed.

If we needed to get your bot working again, I would frankly have been
happier to just revert my patch. But now we have to live with this patch
instead because the merge conflicts at this point will be a nightmare.


So, can you please try to walk everyone through what the requirement is
here? Your commit log does not contain a lot of details... My best guess
based on the nature of your change is that mingw32 has a DLL building mode
which is buggy because it doesn't produce a strong definition of the static
object in the base class the derived class is defined.

If that is the case, I am really concerned about continuing to support this
configuration with LLVM. We have had numerous, painful problems supporting
mingw in the past, and this seems like it is handcuffing us unreasonably.

And if I understand correctly, mingw32 works just fine when not using a
particular DLL configuration?


>
> char AnalysisBase::ID should be declared as extern and defined in one
> module.
>
> Modified:
>     llvm/trunk/include/llvm/Analysis/AliasAnalysis.h
>     llvm/trunk/include/llvm/Analysis/AssumptionCache.h
>     llvm/trunk/include/llvm/Analysis/CGSCCPassManager.h
>     llvm/trunk/include/llvm/Analysis/DominanceFrontier.h
>     llvm/trunk/include/llvm/Analysis/LazyCallGraph.h
>     llvm/trunk/include/llvm/Analysis/LoopInfo.h
>     llvm/trunk/include/llvm/Analysis/LoopPassManager.h
>     llvm/trunk/include/llvm/Analysis/PostDominators.h
>     llvm/trunk/include/llvm/Analysis/RegionInfo.h
>     llvm/trunk/include/llvm/Analysis/ScalarEvolution.h
>     llvm/trunk/include/llvm/Analysis/TargetLibraryInfo.h
>     llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h
>     llvm/trunk/include/llvm/IR/Dominators.h
>     llvm/trunk/include/llvm/IR/PassManager.h
>     llvm/trunk/lib/Analysis/AliasAnalysis.cpp
>     llvm/trunk/lib/Analysis/AssumptionCache.cpp
>     llvm/trunk/lib/Analysis/CGSCCPassManager.cpp
>     llvm/trunk/lib/Analysis/DominanceFrontier.cpp
>     llvm/trunk/lib/Analysis/LazyCallGraph.cpp
>     llvm/trunk/lib/Analysis/LoopInfo.cpp
>     llvm/trunk/lib/Analysis/LoopPassManager.cpp
>     llvm/trunk/lib/Analysis/PostDominators.cpp
>     llvm/trunk/lib/Analysis/RegionInfo.cpp
>     llvm/trunk/lib/Analysis/ScalarEvolution.cpp
>     llvm/trunk/lib/Analysis/TargetLibraryInfo.cpp
>     llvm/trunk/lib/Analysis/TargetTransformInfo.cpp
>     llvm/trunk/lib/IR/Dominators.cpp
>     llvm/trunk/lib/IR/PassManager.cpp
>
> Modified: llvm/trunk/include/llvm/Analysis/AliasAnalysis.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/AliasAnalysis.h?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/AliasAnalysis.h (original)
> +++ llvm/trunk/include/llvm/Analysis/AliasAnalysis.h Sun Feb 28 11:17:00
> 2016
> @@ -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 {
>
> Modified: llvm/trunk/include/llvm/Analysis/AssumptionCache.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/AssumptionCache.h?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/AssumptionCache.h (original)
> +++ llvm/trunk/include/llvm/Analysis/AssumptionCache.h Sun Feb 28 11:17:00
> 2016
> @@ -105,6 +105,8 @@ struct AssumptionAnalysis : AnalysisBase
>    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;
>
> Modified: llvm/trunk/include/llvm/Analysis/CGSCCPassManager.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/CGSCCPassManager.h?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/CGSCCPassManager.h (original)
> +++ llvm/trunk/include/llvm/Analysis/CGSCCPassManager.h Sun Feb 28
> 11:17:00 2016
> @@ -48,12 +48,16 @@ extern template class InnerAnalysisManag
>  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 InnerAnalysisManag
>  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>
>
> Modified: llvm/trunk/include/llvm/Analysis/DominanceFrontier.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DominanceFrontier.h?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/DominanceFrontier.h (original)
> +++ llvm/trunk/include/llvm/Analysis/DominanceFrontier.h Sun Feb 28
> 11:17:00 2016
> @@ -176,6 +176,8 @@ struct DominanceFrontierAnalysis : Analy
>    DominanceFrontier run(Function &F, AnalysisManager<Function> *AM);
>  };
>
> +extern template class AnalysisBase<DominanceFrontierAnalysis>;
> +
>  /// \brief Printer pass for the \c DominanceFrontier.
>  class DominanceFrontierPrinterPass
>      : public PassBase<DominanceFrontierPrinterPass> {
>
> Modified: llvm/trunk/include/llvm/Analysis/LazyCallGraph.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LazyCallGraph.h?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/LazyCallGraph.h (original)
> +++ llvm/trunk/include/llvm/Analysis/LazyCallGraph.h Sun Feb 28 11:17:00
> 2016
> @@ -906,6 +906,8 @@ struct LazyCallGraphAnalysis : AnalysisB
>    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.
>
> Modified: llvm/trunk/include/llvm/Analysis/LoopInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LoopInfo.h?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/LoopInfo.h (original)
> +++ llvm/trunk/include/llvm/Analysis/LoopInfo.h Sun Feb 28 11:17:00 2016
> @@ -793,6 +793,8 @@ struct LoopAnalysis : AnalysisBase<LoopA
>    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;
>
> Modified: llvm/trunk/include/llvm/Analysis/LoopPassManager.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LoopPassManager.h?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/LoopPassManager.h (original)
> +++ llvm/trunk/include/llvm/Analysis/LoopPassManager.h Sun Feb 28 11:17:00
> 2016
> @@ -43,6 +43,8 @@ extern template class InnerAnalysisManag
>  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>
>
> Modified: llvm/trunk/include/llvm/Analysis/PostDominators.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/PostDominators.h?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/PostDominators.h (original)
> +++ llvm/trunk/include/llvm/Analysis/PostDominators.h Sun Feb 28 11:17:00
> 2016
> @@ -46,6 +46,8 @@ struct PostDominatorTreeAnalysis : Analy
>    PostDominatorTree run(Function &F);
>  };
>
> +extern template class AnalysisBase<PostDominatorTreeAnalysis>;
> +
>  /// \brief Printer pass for the \c PostDominatorTree.
>  class PostDominatorTreePrinterPass
>      : public PassBase<PostDominatorTreePrinterPass> {
>
> Modified: llvm/trunk/include/llvm/Analysis/RegionInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/RegionInfo.h?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/RegionInfo.h (original)
> +++ llvm/trunk/include/llvm/Analysis/RegionInfo.h Sun Feb 28 11:17:00 2016
> @@ -929,6 +929,8 @@ struct RegionInfoAnalysis : AnalysisBase
>    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;
>
> Modified: llvm/trunk/include/llvm/Analysis/ScalarEvolution.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/ScalarEvolution.h?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/ScalarEvolution.h (original)
> +++ llvm/trunk/include/llvm/Analysis/ScalarEvolution.h Sun Feb 28 11:17:00
> 2016
> @@ -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> {
>
> Modified: llvm/trunk/include/llvm/Analysis/TargetLibraryInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/TargetLibraryInfo.h?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/TargetLibraryInfo.h (original)
> +++ llvm/trunk/include/llvm/Analysis/TargetLibraryInfo.h Sun Feb 28
> 11:17:00 2016
> @@ -299,6 +299,8 @@ private:
>    TargetLibraryInfoImpl &lookupInfoImpl(Triple T);
>  };
>
> +extern template class AnalysisBase<TargetLibraryAnalysis>;
> +
>  class TargetLibraryInfoWrapperPass : public ImmutablePass {
>    TargetLibraryInfoImpl TLIImpl;
>    TargetLibraryInfo TLI;
>
> Modified: llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h (original)
> +++ llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h Sun Feb 28
> 11:17:00 2016
> @@ -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
>
> Modified: llvm/trunk/include/llvm/IR/Dominators.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Dominators.h?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/IR/Dominators.h (original)
> +++ llvm/trunk/include/llvm/IR/Dominators.h Sun Feb 28 11:17:00 2016
> @@ -190,6 +190,8 @@ struct DominatorTreeAnalysis : AnalysisB
>    DominatorTree run(Function &F);
>  };
>
> +extern template class AnalysisBase<DominatorTreeAnalysis>;
> +
>  /// \brief Printer pass for the \c DominatorTree.
>  class DominatorTreePrinterPass : public
> PassBase<DominatorTreePrinterPass> {
>    raw_ostream &OS;
>
> Modified: llvm/trunk/include/llvm/IR/PassManager.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/PassManager.h?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/IR/PassManager.h (original)
> +++ llvm/trunk/include/llvm/IR/PassManager.h Sun Feb 28 11:17:00 2016
> @@ -749,6 +749,8 @@ extern template class InnerAnalysisManag
>  typedef InnerAnalysisManagerProxy<FunctionAnalysisManager, Module>
>      FunctionAnalysisManagerModuleProxy;
>
> +extern template class AnalysisBase<FunctionAnalysisManagerModuleProxy>;
> +
>  /// \brief A function analysis which acts as a proxy for a module analysis
>  /// manager.
>  ///
>
> Modified: llvm/trunk/lib/Analysis/AliasAnalysis.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/AliasAnalysis.cpp?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/AliasAnalysis.cpp (original)
> +++ llvm/trunk/lib/Analysis/AliasAnalysis.cpp Sun Feb 28 11:17:00 2016
> @@ -390,6 +390,9 @@ bool AAResults::canInstructionRangeModRe
>  // Provide a definition for the root virtual destructor.
>  AAResults::Concept::~Concept() {}
>
> +// Provide a definition for the static object used to identify passes.
> +template class llvm::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.
>
> Modified: llvm/trunk/lib/Analysis/AssumptionCache.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/AssumptionCache.cpp?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/AssumptionCache.cpp (original)
> +++ llvm/trunk/lib/Analysis/AssumptionCache.cpp Sun Feb 28 11:17:00 2016
> @@ -74,6 +74,8 @@ void AssumptionCache::registerAssumption
>  #endif
>  }
>
> +template class llvm::AnalysisBase<AssumptionAnalysis>;
> +
>  PreservedAnalyses AssumptionPrinterPass::run(Function &F,
>                                               AnalysisManager<Function>
> *AM) {
>    AssumptionCache &AC = AM->getResult<AssumptionAnalysis>(F);
>
> Modified: llvm/trunk/lib/Analysis/CGSCCPassManager.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/CGSCCPassManager.cpp?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/CGSCCPassManager.cpp (original)
> +++ llvm/trunk/lib/Analysis/CGSCCPassManager.cpp Sun Feb 28 11:17:00 2016
> @@ -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>;
>  }
>
> Modified: llvm/trunk/lib/Analysis/DominanceFrontier.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/DominanceFrontier.cpp?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/DominanceFrontier.cpp (original)
> +++ llvm/trunk/lib/Analysis/DominanceFrontier.cpp Sun Feb 28 11:17:00 2016
> @@ -56,6 +56,8 @@ LLVM_DUMP_METHOD void DominanceFrontierW
>  }
>  #endif
>
> +template class llvm::AnalysisBase<DominanceFrontierAnalysis>;
> +
>  DominanceFrontier DominanceFrontierAnalysis::run(Function &F,
>                                                   FunctionAnalysisManager
> *AM) {
>    DominanceFrontier DF;
>
> Modified: llvm/trunk/lib/Analysis/LazyCallGraph.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LazyCallGraph.cpp?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/LazyCallGraph.cpp (original)
> +++ llvm/trunk/lib/Analysis/LazyCallGraph.cpp Sun Feb 28 11:17:00 2016
> @@ -1499,6 +1499,8 @@ LazyCallGraph::RefSCC *LazyCallGraph::ge
>    }
>  }
>
> +template class llvm::AnalysisBase<LazyCallGraphAnalysis>;
> +
>  LazyCallGraphPrinterPass::LazyCallGraphPrinterPass(raw_ostream &OS) :
> OS(OS) {}
>
>  static void printNode(raw_ostream &OS, LazyCallGraph::Node &N) {
>
> Modified: llvm/trunk/lib/Analysis/LoopInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LoopInfo.cpp?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/LoopInfo.cpp (original)
> +++ llvm/trunk/lib/Analysis/LoopInfo.cpp Sun Feb 28 11:17:00 2016
> @@ -641,6 +641,8 @@ void LoopInfo::markAsRemoved(Loop *Unloo
>    }
>  }
>
> +template class llvm::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
>
> Modified: llvm/trunk/lib/Analysis/LoopPassManager.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LoopPassManager.cpp?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/LoopPassManager.cpp (original)
> +++ llvm/trunk/lib/Analysis/LoopPassManager.cpp Sun Feb 28 11:17:00 2016
> @@ -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>;
>  }
>
> Modified: llvm/trunk/lib/Analysis/PostDominators.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/PostDominators.cpp?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/PostDominators.cpp (original)
> +++ llvm/trunk/lib/Analysis/PostDominators.cpp Sun Feb 28 11:17:00 2016
> @@ -44,6 +44,8 @@ FunctionPass* llvm::createPostDomTree()
>    return new PostDominatorTreeWrapperPass();
>  }
>
> +template class llvm::AnalysisBase<PostDominatorTreeAnalysis>;
> +
>  PostDominatorTree PostDominatorTreeAnalysis::run(Function &F) {
>    PostDominatorTree PDT;
>    PDT.recalculate(F);
>
> Modified: llvm/trunk/lib/Analysis/RegionInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/RegionInfo.cpp?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/RegionInfo.cpp (original)
> +++ llvm/trunk/lib/Analysis/RegionInfo.cpp Sun Feb 28 11:17:00 2016
> @@ -185,6 +185,8 @@ namespace llvm {
>  // RegionInfoAnalysis implementation
>  //
>
> +template class llvm::AnalysisBase<RegionInfoAnalysis>;
> +
>  RegionInfo RegionInfoAnalysis::run(Function &F, AnalysisManager<Function>
> *AM) {
>    RegionInfo RI;
>    auto *DT = &AM->getResult<DominatorTreeAnalysis>(F);
>
> Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original)
> +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Sun Feb 28 11:17:00 2016
> @@ -9554,6 +9554,8 @@ void ScalarEvolution::verify() const {
>    // TODO: Verify more things.
>  }
>
> +template class llvm::AnalysisBase<ScalarEvolutionAnalysis>;
> +
>  ScalarEvolution ScalarEvolutionAnalysis::run(Function &F,
>                                               AnalysisManager<Function>
> *AM) {
>    return ScalarEvolution(F, AM->getResult<TargetLibraryAnalysis>(F),
>
> Modified: llvm/trunk/lib/Analysis/TargetLibraryInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/TargetLibraryInfo.cpp?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/TargetLibraryInfo.cpp (original)
> +++ llvm/trunk/lib/Analysis/TargetLibraryInfo.cpp Sun Feb 28 11:17:00 2016
> @@ -636,6 +636,8 @@ TargetLibraryInfoWrapperPass::TargetLibr
>
>  initializeTargetLibraryInfoWrapperPassPass(*PassRegistry::getPassRegistry());
>  }
>
> +template class llvm::AnalysisBase<TargetLibraryAnalysis>;
> +
>  // Register the basic pass.
>  INITIALIZE_PASS(TargetLibraryInfoWrapperPass, "targetlibinfo",
>                  "Target Library Information", false, true)
>
> Modified: llvm/trunk/lib/Analysis/TargetTransformInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/TargetTransformInfo.cpp?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/TargetTransformInfo.cpp (original)
> +++ llvm/trunk/lib/Analysis/TargetTransformInfo.cpp Sun Feb 28 11:17:00
> 2016
> @@ -377,6 +377,8 @@ TargetIRAnalysis::Result TargetIRAnalysi
>    return TTICallback(F);
>  }
>
> +template class llvm::AnalysisBase<TargetIRAnalysis>;
> +
>  TargetIRAnalysis::Result TargetIRAnalysis::getDefaultTTI(const Function
> &F) {
>    return Result(F.getParent()->getDataLayout());
>  }
>
> Modified: llvm/trunk/lib/IR/Dominators.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Dominators.cpp?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/Dominators.cpp (original)
> +++ llvm/trunk/lib/IR/Dominators.cpp Sun Feb 28 11:17:00 2016
> @@ -308,6 +308,8 @@ DominatorTree DominatorTreeAnalysis::run
>    return DT;
>  }
>
> +template class llvm::AnalysisBase<DominatorTreeAnalysis>;
> +
>  DominatorTreePrinterPass::DominatorTreePrinterPass(raw_ostream &OS) :
> OS(OS) {}
>
>  PreservedAnalyses DominatorTreePrinterPass::run(Function &F,
>
> Modified: llvm/trunk/lib/IR/PassManager.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/PassManager.cpp?rev=262188&r1=262187&r2=262188&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/PassManager.cpp (original)
> +++ llvm/trunk/lib/IR/PassManager.cpp Sun Feb 28 11:17:00 2016
> @@ -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>;
>  }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160228/7bd8d0d2/attachment.html>


More information about the llvm-commits mailing list