diff --git a/gambas3-3.7.1-llvm-3.6.patch b/gambas3-3.7.1-llvm-3.6.patch index ff54dc9..cd70792 100644 --- a/gambas3-3.7.1-llvm-3.6.patch +++ b/gambas3-3.7.1-llvm-3.6.patch @@ -12,6 +12,87 @@ diff -up gambas3-3.7.1/gb.jit/configure.ac.llvm36 gambas3-3.7.1/gb.jit/configure 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(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(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(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(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(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(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(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(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(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(M)); ++#else + EE->addModule(M); ++#endif + else ++#if (LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 6) ++ EE = llvm::EngineBuilder(std::unique_ptr(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