changeset 26536:b3157525cebf stable

jit: configure: Check llvm::IRBuilder API * m4/acinclude.m4: New macro to check if llvm::IRBuilder has two template arguments (or not, in which case it has three). * configure.ac: Call the new macro. * libinterp/parse-tree/jit-util.h: Adapt IRBuilderD typedef.
author Julien Bect <jbect@users.sourceforge.net>
date Sat, 29 Dec 2018 22:25:25 +0100
parents d68381feb6cb
children 7a77eb39c7f0
files configure.ac libinterp/parse-tree/jit-util.h m4/acinclude.m4
diffstat 3 files changed, 52 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/configure.ac	Tue Jan 01 07:15:46 2019 +0100
+++ b/configure.ac	Sat Dec 29 22:25:25 2018 +0100
@@ -1419,12 +1419,14 @@
     if test $have_function_h = no; then
       warn_llvm="Missing LLVM file Function.h.  JIT compiler is disabled."
     fi
+
     have_irbuilder_h=no
     AC_CHECK_HEADERS([llvm/Support/IRBuilder.h llvm/IR/IRBuilder.h \
                       llvm/IRBuilder.h], [have_irbuilder_h=yes; break])
     if test $have_irbuilder_h = no; then
       warn_llvm="Missing LLVM file IRBuilder.h.  JIT compiler is disabled."
     fi
+
     have_llvm_data_h=no
     AC_CHECK_HEADERS([llvm/Target/TargetData.h llvm/IR/DataLayout.h \
                       llvm/DataLayout.h], [have_llvm_data_h=yes; break])
@@ -1440,6 +1442,7 @@
     OCTAVE_LLVM_CALLINST_ADDATTRIBUTE_API
     OCTAVE_LLVM_RAW_FD_OSTREAM_API
     OCTAVE_LLVM_LEGACY_PASSMANAGER_API
+    OCTAVE_LLVM_IRBUILDER_API
     AC_LANG_POP(C++)
     CPPFLAGS="$save_CPPFLAGS"
     LDFLAGS="$save_LDFLAGS"
--- a/libinterp/parse-tree/jit-util.h	Tue Jan 01 07:15:46 2019 +0100
+++ b/libinterp/parse-tree/jit-util.h	Sat Dec 29 22:25:25 2018 +0100
@@ -70,6 +70,18 @@
 
   class ConstantFolder;
 
+#if defined  LLVM_IRBUILDER_HAS_TWO_TEMPLATE_ARGS
+
+  class IRBuilderDefaultInserter;
+
+  template <typename T, typename Inserter>
+  class IRBuilder;
+
+  typedef IRBuilder<ConstantFolder, IRBuilderDefaultInserter>
+    IRBuilderD;
+
+#else
+
   template <bool preserveNames>
   class IRBuilderDefaultInserter;
 
@@ -78,6 +90,8 @@
 
   typedef IRBuilder<true, ConstantFolder, IRBuilderDefaultInserter<true>>
     IRBuilderD;
+
+#endif
 }
 
 // some octave classes that are not (yet) in the octave namespace
--- a/m4/acinclude.m4	Tue Jan 01 07:15:46 2019 +0100
+++ b/m4/acinclude.m4	Sat Dec 29 22:25:25 2018 +0100
@@ -2753,6 +2753,41 @@
   fi
 ])
 dnl
+dnl Check llvm::IRBuilder API
+dnl
+AC_DEFUN([OCTAVE_LLVM_IRBUILDER_API], [
+  AC_CACHE_CHECK([check if llvm::IRBuilder has two template arguments],
+    [octave_cv_llvm_irbuilder_has_two_template_args],
+    [AC_LANG_PUSH(C++)
+      AC_COMPILE_IFELSE(
+        [AC_LANG_PROGRAM([[
+#if defined (HAVE_LLVM_IR_FUNCTION_H)
+          #include <llvm/IR/LLVMContext.h>
+#else
+          #include <llvm/LLVMContext.h>
+#endif
+#if defined (HAVE_LLVM_IR_IRBUILDER_H)
+          #include <llvm/IR/IRBuilder.h>
+#elif defined (HAVE_LLVM_SUPPORT_IRBUILDER_H)
+          #include <llvm/Support/IRBuilder.h>
+#else
+          #include <llvm/IRBuilder.h>
+#endif
+          using namespace llvm;
+          ]], [[
+          LLVMContext c;
+          IRBuilder<ConstantFolder,IRBuilderDefaultInserter>  irb (c);
+        ]])],
+        octave_cv_llvm_irbuilder_has_two_template_args=yes,
+        octave_cv_llvm_irbuilder_has_two_template_args=no)
+    AC_LANG_POP(C++)
+  ])
+  if test $octave_cv_llvm_irbuilder_has_two_template_args = yes; then
+    AC_DEFINE(LLVM_IRBUILDER_HAS_TWO_TEMPLATE_ARGS, 1,
+      [Define to 1 if llvm::IRBuilder has two template arguments.])
+  fi
+])
+dnl
 dnl OCTAVE_CHECK_FORTRAN_SYMBOL_AND_CALLING_CONVENTIONS
 dnl
 dnl Set variables related to Fortran symbol names (append underscore,