aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2022-09-18 14:33:08 +0200
committerTor Egge <Tor.Egge@online.no>2022-09-18 14:33:08 +0200
commit4603d12a04767b0e643679b3d924b6303b09a3fd (patch)
treee51cc4e738c940585313b0b21899f47fab08bb29
parent588c0a6cde62871760d8f85b621f451b63e9af03 (diff)
Fedora 37 has llvm 15.
-rw-r--r--default_build_settings.cmake4
-rw-r--r--dist/vespa.spec12
-rw-r--r--eval/src/vespa/eval/eval/llvm/llvm_wrapper.cpp47
3 files changed, 31 insertions, 32 deletions
diff --git a/default_build_settings.cmake b/default_build_settings.cmake
index df55ce727f9..0d368cfe29a 100644
--- a/default_build_settings.cmake
+++ b/default_build_settings.cmake
@@ -78,13 +78,13 @@ endfunction()
function(setup_vespa_default_build_settings_fedora_37)
message("-- Setting up default build settings for fedora 37")
set(DEFAULT_EXTRA_INCLUDE_DIRECTORY "${VESPA_DEPS}/include" "/usr/include/openblas" PARENT_SCOPE)
- set(DEFAULT_VESPA_LLVM_VERSION "14" PARENT_SCOPE)
+ set(DEFAULT_VESPA_LLVM_VERSION "15" PARENT_SCOPE)
endfunction()
function(setup_vespa_default_build_settings_fedora_38)
message("-- Setting up default build settings for fedora 38")
set(DEFAULT_EXTRA_INCLUDE_DIRECTORY "${VESPA_DEPS}/include" "/usr/include/openblas" PARENT_SCOPE)
- set(DEFAULT_VESPA_LLVM_VERSION "14" PARENT_SCOPE)
+ set(DEFAULT_VESPA_LLVM_VERSION "15" PARENT_SCOPE)
endfunction()
function(setup_vespa_default_build_settings_amzn_2022)
diff --git a/dist/vespa.spec b/dist/vespa.spec
index 8e4af0d055b..f258d8d5daa 100644
--- a/dist/vespa.spec
+++ b/dist/vespa.spec
@@ -158,14 +158,14 @@ BuildRequires: gmock-devel
%endif
%if 0%{?fc37}
BuildRequires: protobuf-devel
-BuildRequires: llvm-devel >= 14.0.5
+BuildRequires: llvm-devel >= 15.0.0
BuildRequires: boost-devel >= 1.78
BuildRequires: gtest-devel
BuildRequires: gmock-devel
%endif
%if 0%{?fc38}
BuildRequires: protobuf-devel
-BuildRequires: llvm-devel >= 14.0.5
+BuildRequires: llvm-devel >= 15.0.0
BuildRequires: boost-devel >= 1.78
BuildRequires: gtest-devel
BuildRequires: gmock-devel
@@ -273,10 +273,10 @@ Requires: gtest
%define _vespa_llvm_version 14
%endif
%if 0%{?fc37}
-%define _vespa_llvm_version 14
+%define _vespa_llvm_version 15
%endif
%if 0%{?fc38}
-%define _vespa_llvm_version 14
+%define _vespa_llvm_version 15
%endif
%define _extra_link_directory %{_vespa_deps_prefix}/lib64
%define _extra_include_directory %{_vespa_deps_prefix}/include;/usr/include/openblas
@@ -394,10 +394,10 @@ Requires: llvm-libs >= 13.0.0
Requires: llvm-libs >= 14.0.0
%endif
%if 0%{?fc37}
-Requires: llvm-libs >= 14.0.5
+Requires: llvm-libs >= 15.0.0
%endif
%if 0%{?fc38}
-Requires: llvm-libs >= 14.0.5
+Requires: llvm-libs >= 15.0.0
%endif
%endif
Requires: vespa-onnxruntime = 1.12.1
diff --git a/eval/src/vespa/eval/eval/llvm/llvm_wrapper.cpp b/eval/src/vespa/eval/eval/llvm/llvm_wrapper.cpp
index a3e4e3df7fa..08cf3330157 100644
--- a/eval/src/vespa/eval/eval/llvm/llvm_wrapper.cpp
+++ b/eval/src/vespa/eval/eval/llvm/llvm_wrapper.cpp
@@ -106,39 +106,35 @@ struct FunctionBuilder : public NodeVisitor, public NodeTraverser {
return llvm::FunctionType::get(builder.getDoubleTy(), param_types, false);
}
- llvm::PointerType *make_eval_forest_funptr_t() {
+ llvm::FunctionType *make_eval_forest_fun_t() {
std::vector<llvm::Type*> param_types;
param_types.push_back(builder.getInt8Ty()->getPointerTo());
param_types.push_back(builder.getDoubleTy()->getPointerTo());
- llvm::FunctionType *function_type = llvm::FunctionType::get(builder.getDoubleTy(), param_types, false);
- return llvm::PointerType::get(function_type, 0);
+ return llvm::FunctionType::get(builder.getDoubleTy(), param_types, false);
}
- llvm::PointerType *make_resolve_param_funptr_t() {
+ llvm::FunctionType *make_resolve_param_fun_t() {
std::vector<llvm::Type*> param_types;
param_types.push_back(builder.getInt8Ty()->getPointerTo());
param_types.push_back(builder.getInt64Ty());
- llvm::FunctionType *function_type = llvm::FunctionType::get(builder.getDoubleTy(), param_types, false);
- return llvm::PointerType::get(function_type, 0);
+ return llvm::FunctionType::get(builder.getDoubleTy(), param_types, false);
}
- llvm::PointerType *make_eval_forest_proxy_funptr_t() {
+ llvm::FunctionType *make_eval_forest_proxy_fun_t() {
std::vector<llvm::Type*> param_types;
- param_types.push_back(make_eval_forest_funptr_t());
+ param_types.push_back(llvm::PointerType::get(make_eval_forest_fun_t(), 0));
param_types.push_back(builder.getInt8Ty()->getPointerTo());
- param_types.push_back(make_resolve_param_funptr_t());
+ param_types.push_back(llvm::PointerType::get(make_resolve_param_fun_t(), 0));
param_types.push_back(builder.getInt8Ty()->getPointerTo());
param_types.push_back(builder.getInt64Ty());
- llvm::FunctionType *function_type = llvm::FunctionType::get(builder.getDoubleTy(), param_types, false);
- return llvm::PointerType::get(function_type, 0);
+ return llvm::FunctionType::get(builder.getDoubleTy(), param_types, false);
}
- llvm::PointerType *make_check_membership_funptr_t() {
+ llvm::FunctionType *make_check_membership_fun_t() {
std::vector<llvm::Type*> param_types;
param_types.push_back(builder.getInt8Ty()->getPointerTo());
param_types.push_back(builder.getDoubleTy());
- llvm::FunctionType *function_type = llvm::FunctionType::get(builder.getInt1Ty(), param_types, false);
- return llvm::PointerType::get(function_type, 0);
+ return llvm::FunctionType::get(builder.getInt1Ty(), param_types, false);
}
FunctionBuilder(llvm::LLVMContext &context_in,
@@ -170,7 +166,7 @@ struct FunctionBuilder : public NodeVisitor, public NodeTraverser {
param_types.push_back(builder.getDoubleTy()->getPointerTo());
} else {
assert(pass_params == PassParams::LAZY);
- param_types.push_back(make_resolve_param_funptr_t());
+ param_types.push_back(llvm::PointerType::get(make_resolve_param_fun_t(), 0));
param_types.push_back(builder.getInt8Ty()->getPointerTo());
}
llvm::FunctionType *function_type = llvm::FunctionType::get(builder.getDoubleTy(), param_types, false);
@@ -194,12 +190,12 @@ struct FunctionBuilder : public NodeVisitor, public NodeTraverser {
} else if (pass_params == PassParams::ARRAY) {
assert(params.size() == 1);
llvm::Value *param_array = params[0];
- llvm::Value *addr = builder.CreateGEP(param_array->getType()->getScalarType()->getPointerElementType(), param_array, builder.getInt64(idx));
- return builder.CreateLoad(addr->getType()->getPointerElementType(), addr);
+ llvm::Value *addr = builder.CreateGEP(builder.getDoubleTy(), param_array, builder.getInt64(idx));
+ return builder.CreateLoad(builder.getDoubleTy(), addr);
}
assert(pass_params == PassParams::LAZY);
assert(params.size() == 2);
- return builder.CreateCall(llvm::cast<llvm::FunctionType>(params[0]->getType()->getPointerElementType()),
+ return builder.CreateCall(make_resolve_param_fun_t(),
params[0], {params[1], builder.getInt64(idx)}, "resolve_param");
}
@@ -248,17 +244,19 @@ struct FunctionBuilder : public NodeVisitor, public NodeTraverser {
forests.push_back(std::move(optimize_result.forest));
void *eval_ptr = (void *) optimize_result.eval;
gbdt::Forest *forest = forests.back().get();
- llvm::PointerType *eval_funptr_t = make_eval_forest_funptr_t();
+ llvm::FunctionType* eval_fun_t = make_eval_forest_fun_t();
+ llvm::PointerType *eval_funptr_t = llvm::PointerType::get(eval_fun_t, 0);
llvm::Value *eval_fun = builder.CreateIntToPtr(builder.getInt64((uint64_t)eval_ptr), eval_funptr_t, "inject_eval");
llvm::Value *ctx = builder.CreateIntToPtr(builder.getInt64((uint64_t)forest), builder.getInt8Ty()->getPointerTo(), "inject_ctx");
if (pass_params == PassParams::ARRAY) {
- push(builder.CreateCall(llvm::cast<llvm::FunctionType>(eval_fun->getType()->getPointerElementType()),
+ push(builder.CreateCall(eval_fun_t,
eval_fun, {ctx, params[0]}, "call_eval"));
} else {
assert(pass_params == PassParams::LAZY);
- llvm::PointerType *proxy_funptr_t = make_eval_forest_proxy_funptr_t();
+ llvm::FunctionType* proxy_fun_t = make_eval_forest_proxy_fun_t();
+ llvm::PointerType *proxy_funptr_t = llvm::PointerType::get(proxy_fun_t, 0);
llvm::Value *proxy_fun = builder.CreateIntToPtr(builder.getInt64((uint64_t)vespalib_eval_forest_proxy), proxy_funptr_t, "inject_eval_proxy");
- push(builder.CreateCall(llvm::cast<llvm::FunctionType>(proxy_fun->getType()->getPointerElementType()),
+ push(builder.CreateCall(proxy_fun_t,
proxy_fun, {eval_fun, ctx, params[0], params[1], builder.getInt64(stats.num_params)}));
}
return true;
@@ -410,10 +408,11 @@ struct FunctionBuilder : public NodeVisitor, public NodeTraverser {
plugin_state.emplace_back(new SetMemberHash(item));
void *call_ptr = (void *) SetMemberHash::check_membership;
PluginState *state = plugin_state.back().get();
- llvm::PointerType *funptr_t = make_check_membership_funptr_t();
+ llvm::FunctionType *fun_t = make_check_membership_fun_t();
+ llvm::PointerType *funptr_t = llvm::PointerType::get(fun_t, 0);
llvm::Value *call_fun = builder.CreateIntToPtr(builder.getInt64((uint64_t)call_ptr), funptr_t, "inject_call_addr");
llvm::Value *ctx = builder.CreateIntToPtr(builder.getInt64((uint64_t)state), builder.getInt8Ty()->getPointerTo(), "inject_ctx");
- push(builder.CreateCall(llvm::cast<llvm::FunctionType>(call_fun->getType()->getPointerElementType()),
+ push(builder.CreateCall(fun_t,
call_fun, {ctx, lhs}, "call_check_membership"));
} else {
// build explicit code to check all set members