# HG changeset patch # User Abhinav Tripathi # Date 1480279024 28800 # Sun Nov 27 12:37:04 2016 -0800 # Node ID dfcaa37450abb0c932194fb9eb6e774497a1302f # Parent 736adf0f583e14083d0e46edde3c21d02debfda9 Try to fix JIT compilation with llvm 3.8.1 * Update function syntaxes and values to be used diff -r 736adf0f583e -r dfcaa37450ab libinterp/corefcn/jit-typeinfo.cc --- a/libinterp/corefcn/jit-typeinfo.cc Mon Nov 07 22:36:24 2016 -0800 +++ b/libinterp/corefcn/jit-typeinfo.cc Sun Nov 27 12:37:04 2016 -0800 @@ -213,7 +213,7 @@ } extern "C" void -octave_jit_octave::err_nan_to_logical_conversion (void) +octave_jit_octave_err_nan_to_logical_conversion (void) { octave::err_nan_to_logical_conversion (); } @@ -721,9 +721,9 @@ for (size_t i = 0; i < idx; ++i, ++iter); if (args[idx]->pointer_arg (call_conv)) - return builder.CreateLoad (iter); + return builder.CreateLoad (&*iter); - return iter; + return &*iter; } void @@ -740,7 +740,7 @@ if (sret ()) { - builder.CreateStore (rval, llvm_function->arg_begin ()); + builder.CreateStore (rval, &(*llvm_function->arg_begin ())); builder.CreateRetVoid (); } else @@ -1173,7 +1173,7 @@ for (int op = 0; op < octave_value::num_binary_ops; ++op) { llvm::Twine fn_name ("octave_jit_binary_any_any_"); - fn_name = fn_name + llvm::Twine (op); + fn_name.concat (llvm::Twine (op)); fn = create_internal (fn_name, any, any, any); fn.mark_can_error (); @@ -1505,7 +1505,7 @@ logically_true_fn.stash_name ("logically_true"); jit_function gripe_nantl - = create_external (JIT_FN (octave_jit_octave::err_nan_to_logical_conversion), 0); + = create_external (JIT_FN (octave_jit_octave_err_nan_to_logical_conversion), 0); gripe_nantl.mark_can_error (); fn = create_internal ("octave_jit_logically_true_scalar", boolean, scalar); diff -r 736adf0f583e -r dfcaa37450ab libinterp/corefcn/pt-jit.cc --- a/libinterp/corefcn/pt-jit.cc Mon Nov 07 22:36:24 2016 -0800 +++ b/libinterp/corefcn/pt-jit.cc Sun Nov 27 12:37:04 2016 -0800 @@ -51,6 +51,7 @@ #include #include +#include #if defined (HAVE_LLVM_IR_VERIFIER_H) # include @@ -60,7 +61,7 @@ #include #include -#include +#include #if defined (LEGACY_PASSMANAGER) # include @@ -1330,10 +1331,10 @@ prelude = llvm::BasicBlock::Create (context, "prelude", function); builder.SetInsertPoint (prelude); - llvm::Value *arg = function->arg_begin (); + llvm::Value *arg = &*function->arg_begin (); for (size_t i = 0; i < argument_vec.size (); ++i) { - llvm::Value *loaded_arg = builder.CreateConstInBoundsGEP1_32 (arg, i); + llvm::Value *loaded_arg = builder.CreateConstInBoundsGEP1_32 (arg->getType (), arg, i); arguments[argument_vec[i].first] = loaded_arg; } @@ -2061,7 +2062,7 @@ } // sometimes this fails pre main - engine = llvm::ExecutionEngine::createJIT (module); + engine = llvm::EngineBuilder (std::unique_ptr (module)).create (); if (! engine) return false; @@ -2081,7 +2082,7 @@ pass_manager->add (new llvm::TargetData (*engine->getTargetData ())); #endif pass_manager->add (llvm::createCFGSimplificationPass ()); - pass_manager->add (llvm::createBasicAliasAnalysisPass ()); + pass_manager->add (llvm::createBasicAAWrapperPass()); pass_manager->add (llvm::createPromoteMemoryToRegisterPass ()); pass_manager->add (llvm::createInstructionCombiningPass ()); pass_manager->add (llvm::createReassociatePass ()); @@ -2187,14 +2188,9 @@ if (Vdebug_jit) { - std::string error; -#if defined (RAW_FD_OSTREAM_ARG_IS_LLVM_SYS_FS) + std::error_code error; llvm::raw_fd_ostream fout ("test.bc", error, - llvm::sys::fs::F_Binary); -#else - llvm::raw_fd_ostream fout ("test.bc", error, - llvm::raw_fd_ostream::F_Binary); -#endif + llvm::sys::fs::F_Text); llvm::WriteBitcodeToFile (module, fout); } } @@ -2262,7 +2258,7 @@ for (size_t i = 0; i < nargs; ++i) { llvm::Value *arg; - arg = builder.CreateConstInBoundsGEP1_32 (wrapper_arg, i); + arg = builder.CreateConstInBoundsGEP1_32 (wrapper_arg->getType (), wrapper_arg, i); arg = builder.CreateLoad (arg); jit_type *arg_type = argument_types[i];