clover: fix llvm 3.5 build error
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. Reviewed-by: Serge Martin (EdB) <edb+mesa@sigluy.net> Reviewed-by: Francisco Jerez <currojerez@riseup.net>
This commit is contained in:

committed by
Francisco Jerez

parent
7eda897bf0
commit
df5cdec132
@@ -346,6 +346,15 @@ namespace {
|
|||||||
|
|
||||||
// Kernel metadata
|
// 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 *
|
const llvm::MDNode *
|
||||||
get_kernel_metadata(const llvm::Function *kernel_func) {
|
get_kernel_metadata(const llvm::Function *kernel_func) {
|
||||||
auto mod = kernel_func->getParent();
|
auto mod = kernel_func->getParent();
|
||||||
@@ -356,12 +365,8 @@ namespace {
|
|||||||
|
|
||||||
const llvm::MDNode *kernel_node = nullptr;
|
const llvm::MDNode *kernel_node = nullptr;
|
||||||
for (unsigned i = 0; i < kernels_node->getNumOperands(); ++i) {
|
for (unsigned i = 0; i < kernels_node->getNumOperands(); ++i) {
|
||||||
#if HAVE_LLVM >= 0x0306
|
|
||||||
auto func = llvm::mdconst::dyn_extract<llvm::Function>(
|
auto func = llvm::mdconst::dyn_extract<llvm::Function>(
|
||||||
#else
|
kernels_node->getOperand(i)->getOperand(0));
|
||||||
auto func = llvm::dyn_cast<llvm::Function>(
|
|
||||||
#endif
|
|
||||||
kernels_node->getOperand(i)->getOperand(0));
|
|
||||||
if (func == kernel_func) {
|
if (func == kernel_func) {
|
||||||
kernel_node = kernels_node->getOperand(i);
|
kernel_node = kernels_node->getOperand(i);
|
||||||
break;
|
break;
|
||||||
@@ -387,13 +392,6 @@ namespace {
|
|||||||
return node;
|
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>
|
std::vector<kernel_arg_md>
|
||||||
get_kernel_arg_md(const llvm::Function *kernel_func) {
|
get_kernel_arg_md(const llvm::Function *kernel_func) {
|
||||||
auto num_args = kernel_func->getArgumentList().size();
|
auto num_args = kernel_func->getArgumentList().size();
|
||||||
@@ -415,6 +413,17 @@ namespace {
|
|||||||
return res;
|
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>
|
std::vector<module::argument>
|
||||||
get_kernel_args(const llvm::Module *mod, const std::string &kernel_name,
|
get_kernel_args(const llvm::Module *mod, const std::string &kernel_name,
|
||||||
const clang::LangAS::Map &address_spaces) {
|
const clang::LangAS::Map &address_spaces) {
|
||||||
|
Reference in New Issue
Block a user