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+m...@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) { _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev