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