diff -up gambas3-3.7.1/gb.jit/configure.ac.llvm36 gambas3-3.7.1/gb.jit/configure.ac
--- gambas3-3.7.1/gb.jit/configure.ac.llvm36 2015-03-29 08:50:18.000000000 -0400
+++ gambas3-3.7.1/gb.jit/configure.ac 2015-04-15 12:32:25.274234421 -0400
@@ -8,8 +8,8 @@ GB_INIT(gb.jit)
AC_PROG_LIBTOOL
min_llvm_version=3.1
-max_llvm_version=3.5
-next_max_llvm_version=3.6
+max_llvm_version=3.6
+next_max_llvm_version=3.7
dnl llvm-config file can be forced with LLVM_CONFIG env var
if test "x$LLVM_CONFIG" = x; then
diff -up gambas3-3.7.1/gb.jit/src/jit_codegen.cpp.llvm36 gambas3-3.7.1/gb.jit/src/jit_codegen.cpp
--- gambas3-3.7.1/gb.jit/src/jit_codegen.cpp.llvm36 2015-04-17 15:02:57.281839985 -0400
+++ gambas3-3.7.1/gb.jit/src/jit_codegen.cpp 2015-04-17 15:18:23.868217606 -0400
@@ -984,7 +984,11 @@ static void unref_string_no_nullcheck(ll
llvm::Value* slt = builder->CreateICmpSLT(ref, getInteger(32, 1));
if (llvm::Instruction* inst = llvm::dyn_cast<llvm::Instruction>(slt)){
llvm::Value* arr[1] = {getInteger(32, 1)};
+#if (LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 6)
+ inst->setMetadata("unref_slt", llvm::MDNode::get(llvm_context, llvm::ArrayRef<Metadata*>(arr)));
+#else
inst->setMetadata("unref_slt", llvm::MDNode::get(llvm_context, arr));
+#endif
}
gen_if(slt, [&](){
llvm::Value* free_func = get_global_function_jif(STRING_free_real, 'v', "p");
@@ -1013,7 +1017,11 @@ static void unref_object_no_nullcheck(ll
llvm::Value* slt = builder->CreateICmpSLT(ref, getInteger(TARGET_BITS, 1));
if (llvm::Instruction* inst = llvm::dyn_cast<llvm::Instruction>(slt)){
llvm::Value* arr[1] = {getInteger(32, 1)};
+#if (LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 6)
+ inst->setMetadata("unref_slt", llvm::MDNode::get(llvm_context, llvm::ArrayRef<Metadata*>(arr)));
+#else
inst->setMetadata("unref_slt", llvm::MDNode::get(llvm_context, arr));
+#endif
}
gen_if(slt, [&](){
llvm::Value* free_func = get_global_function_jif(CLASS_free, 'v', "p");
@@ -3657,7 +3665,11 @@ void EndTryExpression::codegen(){
if (llvm::Instruction* inst = llvm::dyn_cast<llvm::Instruction>(call)){
llvm::Value* arr[1] = {getInteger(32, 1)};
+#if (LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 6)
+ inst->setMetadata("end_try", llvm::MDNode::get(llvm_context, llvm::ArrayRef<Metadata*>(arr)));
+#else
inst->setMetadata("end_try", llvm::MDNode::get(llvm_context, arr));
+#endif
}
builder->CreateStore(get_nullptr(), get_global((void*)&EP));
@@ -6472,7 +6484,11 @@ void ReturnExpression::codegen(){
if (llvm::Instruction* inst = llvm::dyn_cast<llvm::Instruction>(call)){
llvm::Value* arr[1] = {getInteger(32, 1)};
+#if (LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 6)
+ inst->setMetadata("large_end_try", llvm::MDNode::get(llvm_context, llvm::ArrayRef<Metadata*>(arr)));
+#else
inst->setMetadata("large_end_try", llvm::MDNode::get(llvm_context, arr));
+#endif
}
}, "return_in_large_try");
}
@@ -6674,7 +6690,11 @@ static void func_extern_call_variant_var
M->setTargetTriple("i386-unknown-linux-gnu");
M->setDataLayout("e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32-S128");
}
+#if (LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 6)
+ EE->addModule(std::unique_ptr<Module>(M));
+#else
EE->addModule(M);
+#endif
static char buf[256] = "extern_func_caller_";
int eob = strlen("extern_func_caller_");
@@ -6873,9 +6893,17 @@ void JIT_codegen(){
M->setDataLayout("e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32-S128");
}
if (EE)
+#if (LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 6)
+ EE->addModule(std::unique_ptr<Module>(M));
+#else
EE->addModule(M);
+#endif
else
+#if (LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 6)
+ EE = llvm::EngineBuilder(std::unique_ptr<Module>(M))/*.setOptLevel(llvm::CodeGenOpt::Aggressive)*/.create();
+#else
EE = llvm::EngineBuilder(M)/*.setOptLevel(llvm::CodeGenOpt::Aggressive)*/.create();
+#endif
static int counter = 0;
diff -up gambas3-3.7.1/gb.jit/src/jit.h.llvm36 gambas3-3.7.1/gb.jit/src/jit.h
--- gambas3-3.7.1/gb.jit/src/jit.h.llvm36 2015-04-15 12:58:54.040999418 -0400
+++ gambas3-3.7.1/gb.jit/src/jit.h 2015-04-15 13:01:48.902093066 -0400
@@ -52,7 +52,11 @@
#include "llvm/Support/CFG.h"
#endif
-#include "llvm/ExecutionEngine/JIT.h"
+#if (LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 6)
+ #include "llvm/ExecutionEngine/MCJIT.h"
+#else
+ #include "llvm/ExecutionEngine/JIT.h"
+#endif
#include "llvm/ExecutionEngine/Interpreter.h"
#include "llvm/ExecutionEngine/GenericValue.h"
#include "llvm/Support/TargetSelect.h"