[llvm] r201440 - Add extern template instantiations of llvm::Calculate.

Lang Hames lhames at gmail.com
Fri Feb 14 16:34:12 PST 2014


Hi Rafael,

My compiler is warning on this patch: "'typename' occurs outside of a
template [-W++11-extensions]".

This may need to be reverted until we make the switch to C++11.

Cheers,
Lang.

On Fri, Feb 14, 2014 at 2:36 PM, Rafael Espindola
<rafael.espindola at gmail.com> wrote:
> Author: rafael
> Date: Fri Feb 14 16:36:16 2014
> New Revision: 201440
>
> URL: http://llvm.org/viewvc/llvm-project?rev=201440&view=rev
> Log:
> Add extern template instantiations of llvm::Calculate.
>
> This should be a small build time improvement in general and fixes
> the build on OS X with -DBUILD_SHARED_LIBS=ON.
>
> The issue is that not all users are including GenericDomTreeConstruction.h,
> causing undefined references when ld64 managed to hide the
> linkonce_odr symbols.
>
> Modified:
>     llvm/trunk/include/llvm/IR/Dominators.h
>     llvm/trunk/lib/IR/Dominators.cpp
>
> Modified: llvm/trunk/include/llvm/IR/Dominators.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Dominators.h?rev=201440&r1=201439&r2=201440&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/IR/Dominators.h (original)
> +++ llvm/trunk/include/llvm/IR/Dominators.h Fri Feb 14 16:36:16 2014
> @@ -34,6 +34,17 @@ namespace llvm {
>  EXTERN_TEMPLATE_INSTANTIATION(class DomTreeNodeBase<BasicBlock>);
>  EXTERN_TEMPLATE_INSTANTIATION(class DominatorTreeBase<BasicBlock>);
>
> +#define LLVM_COMMA ,
> +EXTERN_TEMPLATE_INSTANTIATION(
> +    void llvm::Calculate<Function LLVM_COMMA BasicBlock *>(
> +        DominatorTreeBase<typename GraphTraits<BasicBlock *>::NodeType> &DT
> +            LLVM_COMMA Function &F));
> +EXTERN_TEMPLATE_INSTANTIATION(void llvm::Calculate<
> +    Function LLVM_COMMA Inverse<BasicBlock *> >(DominatorTreeBase<
> +    typename GraphTraits<Inverse<BasicBlock *> >::NodeType> &DT LLVM_COMMA
> +                                                    Function &F));
> +#undef LLVM_COMMA
> +
>  typedef DomTreeNodeBase<BasicBlock> DomTreeNode;
>
>  class BasicBlockEdge {
>
> Modified: llvm/trunk/lib/IR/Dominators.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Dominators.cpp?rev=201440&r1=201439&r2=201440&view=diff
> ==============================================================================
> --- llvm/trunk/lib/IR/Dominators.cpp (original)
> +++ llvm/trunk/lib/IR/Dominators.cpp Fri Feb 14 16:36:16 2014
> @@ -64,6 +64,16 @@ bool BasicBlockEdge::isSingleEdge() cons
>  TEMPLATE_INSTANTIATION(class llvm::DomTreeNodeBase<BasicBlock>);
>  TEMPLATE_INSTANTIATION(class llvm::DominatorTreeBase<BasicBlock>);
>
> +#define LLVM_COMMA ,
> +TEMPLATE_INSTANTIATION(void llvm::Calculate<Function LLVM_COMMA BasicBlock *>(
> +    DominatorTreeBase<typename GraphTraits<BasicBlock *>::NodeType> &DT
> +        LLVM_COMMA Function &F));
> +TEMPLATE_INSTANTIATION(void llvm::Calculate<
> +    Function LLVM_COMMA Inverse<BasicBlock *> >(DominatorTreeBase<
> +    typename GraphTraits<Inverse<BasicBlock *> >::NodeType> &DT LLVM_COMMA
> +                                                    Function &F));
> +#undef LLVM_COMMA
> +
>  // dominates - Return true if Def dominates a use in User. This performs
>  // the special checks necessary if Def and User are in the same basic block.
>  // Note that Def doesn't dominate a use in Def itself!
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list