Mercurial > octave
changeset 26540:df230bb22ba6 stable
jit: configure: Check if llvm::IRBuilder::CreateConstInBoundsGEP1_32 API
* m4/acinclude.m4: New macro to check if
llvm::IRBuilder::CreateConstInBoundsGEP1_32 requires a type argument.
* configure.ac: Call the new macro.
* libinterp/parse-tree/pt-jit.cc: Add corresponding #if defined
author | Julien Bect <jbect@users.sourceforge.net> |
---|---|
date | Thu, 03 Jan 2019 21:54:54 +0100 |
parents | ed1dad5e71c3 |
children | 3e6d559c8756 |
files | configure.ac libinterp/parse-tree/pt-jit.cc m4/acinclude.m4 |
diffstat | 3 files changed, 38 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/configure.ac Wed Jan 02 16:37:46 2019 +0100 +++ b/configure.ac Thu Jan 03 21:54:54 2019 +0100 @@ -1446,6 +1446,8 @@ OCTAVE_LLVM_LEGACY_PASSMANAGER_API OCTAVE_LLVM_IRBUILDER_API OCTAVE_LLVM_HAS_CREATEALWAYSINLINERPASS + OCTAVE_LLVM_IRBUILDER_CREATECONSTINBOUNDSGEP1_32_API + AC_LANG_POP(C++) CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS"
--- a/libinterp/parse-tree/pt-jit.cc Wed Jan 02 16:37:46 2019 +0100 +++ b/libinterp/parse-tree/pt-jit.cc Thu Jan 03 21:54:54 2019 +0100 @@ -1373,11 +1373,13 @@ for (size_t i = 0; i < m_argument_vec.size (); ++i) { - // LLVM <= 3.6 - // llvm::Value *loaded_arg = builder.CreateConstInBoundsGEP1_32 (arg, i); +#if defined (LLVM_IRBUILDER_CREATECONSTINBOUNDSGEP1_32_REQUIRES_TYPE) // LLVM >= 3.7 llvm::Value *loaded_arg = builder.CreateConstInBoundsGEP1_32 (arg_type, arg, i); - +#else + // LLVM <= 3.6 + llvm::Value *loaded_arg = builder.CreateConstInBoundsGEP1_32 (arg, i); +#endif m_arguments[m_argument_vec[i].first] = loaded_arg; }
--- a/m4/acinclude.m4 Wed Jan 02 16:37:46 2019 +0100 +++ b/m4/acinclude.m4 Thu Jan 03 21:54:54 2019 +0100 @@ -2811,6 +2811,37 @@ fi ]) dnl +dnl Check llvm::IRBuilder::CreateConstInBoundsGEP1_32 API +dbl +AC_DEFUN([OCTAVE_LLVM_IRBUILDER_CREATECONSTINBOUNDSGEP1_32_API], [ + AC_CACHE_CHECK([check if llvm::IRBuilder::CreateConstInBoundsGEP1_32 requires a type argument], + [octave_cv_llvm_irbuilder_createconstinboundsgep1_32_requires_type], + [AC_LANG_PUSH(C++) + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[ +#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 + ]], [[ + llvm::LLVMContext c; + llvm::IRBuilder<> irb (c); + llvm::Value *v; + v = irb.CreateConstInBoundsGEP1_32 ((llvm::Value *) nullptr, 0); + ]])], + octave_cv_llvm_irbuilder_createconstinboundsgep1_32_requires_type=no, + octave_cv_llvm_irbuilder_createconstinboundsgep1_32_requires_type=yes) + AC_LANG_POP(C++) + ]) + if test $octave_cv_llvm_irbuilder_createconstinboundsgep1_32_requires_type = yes; then + AC_DEFINE(LLVM_IRBUILDER_CREATECONSTINBOUNDSGEP1_32_REQUIRES_TYPE, 1, + [Define to 1 if llvm::IRBuilder::CreateConstInBoundsGEP1_32 requires a type argument.]) + fi +]) +dnl dnl OCTAVE_CHECK_FORTRAN_SYMBOL_AND_CALLING_CONVENTIONS dnl dnl Set variables related to Fortran symbol names (append underscore,