Mesa (master): clover: fix llvm 3.5 build error

Francisco Jerez currojerez at kemper.freedesktop.org
Fri Aug 21 11:18:05 UTC 2015


Module: Mesa
Branch: master
Commit: df5cdec1329507d5ac52a6d3db49c2608b9226bc
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=df5cdec1329507d5ac52a6d3db49c2608b9226bc

Author: Zoltan Gilian <zoltan.gilian at gmail.com>
Date:   Wed Aug 19 11:56:08 2015 +0200

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 at sigluy.net>
Reviewed-by: Francisco Jerez <currojerez at riseup.net>

---

 .../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 63c3f8e..7c23a27 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-commit mailing list