[Mesa-dev] [PATCH] clover: fix llvm 3.5 build error

Serge Martin (EdB) edb+mesa at sigluy.net
Fri Aug 21 01:36:00 PDT 2015


On Wednesday 19 August 2015 11:56:08 Zoltan Gilian wrote:
> There is no MDOperand in llvm 3.5.
> 
> v2: Check if kernel metadata is present to avoid crash (EdB).
> v3: Second attempt to avoid crash: switch off metadata query for llvm < 3.6.

Since the change you made for image support won't be backport to llvm 3.5 this 
is good for me. And it no longer make clover crash.

Reviewed-by: Serge Martin (EdB) <edb+mesa at sigluy.net>

But since I don't have commit access, not sure what my r-b worth.

Could it be pushed before the branch point?

> ---
>  .../state_trackers/clover/llvm/invocation.cpp      | 33
> ++++++++++++++-------- 1 file changed, 21 insertions(+), 12 deletions(-)
> 
> diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp
> b/src/gallium/state_trackers/clover/llvm/invocation.cpp index
> 8eb0469..908a296 100644
> --- a/src/gallium/state_trackers/clover/llvm/invocation.cpp
> +++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp
> @@ -346,6 +346,15 @@ namespace {
> 
>     // Kernel metadata
> 
> +   struct kernel_arg_md {
> +      llvm::StringRef type_name;
> +      llvm::StringRef access_qual;
> +      kernel_arg_md(llvm::StringRef type_name_, llvm::StringRef
> access_qual_): +         type_name(type_name_), access_qual(access_qual_)
> {}
> +   };
> +
> +#if HAVE_LLVM >= 0x0306
> +
>     const llvm::MDNode *
>     get_kernel_metadata(const llvm::Function *kernel_func) {
>        auto mod = kernel_func->getParent();
> @@ -356,12 +365,8 @@ namespace {
> 
>        const llvm::MDNode *kernel_node = nullptr;
>        for (unsigned i = 0; i < kernels_node->getNumOperands(); ++i) {
> -#if HAVE_LLVM >= 0x0306
>           auto func = llvm::mdconst::dyn_extract<llvm::Function>(
> -#else
> -         auto func = llvm::dyn_cast<llvm::Function>(
> -#endif
> -                                   
> kernels_node->getOperand(i)->getOperand(0)); +              
> kernels_node->getOperand(i)->getOperand(0));
>           if (func == kernel_func) {
>              kernel_node = kernels_node->getOperand(i);
>              break;
> @@ -387,13 +392,6 @@ namespace {
>        return node;
>     }
> 
> -   struct kernel_arg_md {
> -      llvm::StringRef type_name;
> -      llvm::StringRef access_qual;
> -      kernel_arg_md(llvm::StringRef type_name_, llvm::StringRef
> access_qual_): -         type_name(type_name_), access_qual(access_qual_)
> {}
> -   };
> -
>     std::vector<kernel_arg_md>
>     get_kernel_arg_md(const llvm::Function *kernel_func) {
>        auto num_args = kernel_func->getArgumentList().size();
> @@ -415,6 +413,17 @@ namespace {
>        return res;
>     }
> 
> +#else
> +
> +   std::vector<kernel_arg_md>
> +   get_kernel_arg_md(const llvm::Function *kernel_func) {
> +      return std::vector<kernel_arg_md>(
> +            kernel_func->getArgumentList().size(),
> +            kernel_arg_md("", ""));
> +   }
> +
> +#endif // HAVE_LLVM >= 0x0306
> +
>     std::vector<module::argument>
>     get_kernel_args(const llvm::Module *mod, const std::string &kernel_name,
> const clang::LangAS::Map &address_spaces) {



More information about the mesa-dev mailing list