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

Serge Martin (EdB) edb+mesa at sigluy.net
Sun Aug 16 14:17:48 PDT 2015


On Sunday 09 August 2015 11:52:13 orome wrote:
> On Sun, 2015-08-09 at 15:39 +0200, Zoltan Gilian wrote:
> > There is no MDOperand in llvm 3.5.
> > 
> > v2: Check if kernel metadata is present to avoid crash (EdB).
> 
> still builds for me.

Sadly, it's still crashing for me.

auto kernel_node = get_kernel_metadata(kernel_func);
kernel_node is always set

but 
auto node = llvm::cast<llvm::MDNode>(parent->getOperand(op_idx));
return NULL

> 
> thanks,
> Jan
> 
> > ---
> > 
> >  .../state_trackers/clover/llvm/invocation.cpp      | 22
> > 
> > +++++++++++++---------
> > 
> >  1 file changed, 13 insertions(+), 9 deletions(-)
> > 
> > diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp
> > b/src/gallium/state_trackers/clover/llvm/invocation.cpp
> > index 50c4557..8fd5807 100644
> > --- a/src/gallium/state_trackers/clover/llvm/invocation.cpp
> > +++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp
> > @@ -371,12 +371,13 @@ namespace {
> > 
> >        return kernel_node;
> >     
> >     }
> > 
> > -   llvm::MDNode*
> > -   node_from_op_checked(const llvm::MDOperand &md_operand,
> > -                        llvm::StringRef expect_name,
> > -                        unsigned expect_num_args)
> > +   const llvm::MDNode *
> > +   get_operand_checked(const llvm::MDNode *parent,
> > +                       const unsigned op_idx,
> > +                       const llvm::StringRef expect_name,
> > +                       const unsigned expect_num_args)
> > 
> >     {
> > 
> > -      auto node = llvm::cast<llvm::MDNode>(md_operand);
> > +      auto node = llvm::cast<llvm::MDNode>(parent
> > ->getOperand(op_idx));
> > 
> >        assert(node->getNumOperands() == expect_num_args &&
> >        
> >               "Wrong number of operands.");
> > 
> > @@ -399,10 +400,13 @@ namespace {
> > 
> >        auto num_args = kernel_func->getArgumentList().size();
> >        
> >        auto kernel_node = get_kernel_metadata(kernel_func);
> > 
> > -      auto aq = node_from_op_checked(kernel_node->getOperand(2),
> > -                                     "kernel_arg_access_qual",
> > num_args + 1);
> > -      auto ty = node_from_op_checked(kernel_node->getOperand(3),
> > -                                     "kernel_arg_type", num_args +
> > 1);
> > +      if (!kernel_node)
> > +         return std::vector<kernel_arg_md>(num_args,
> > kernel_arg_md("", ""));
> > +
> > +      auto aq = get_operand_checked(kernel_node, 2,
> > "kernel_arg_access_qual",
> > +                                    num_args + 1);
> > +      auto ty = get_operand_checked(kernel_node, 3,
> > "kernel_arg_type",
> > +                                    num_args + 1);
> > 
> >        std::vector<kernel_arg_md> res;
> >        res.reserve(num_args);



More information about the mesa-dev mailing list