Mercurial > octave
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,