diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-09-18 14:50:29 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-18 14:50:29 +0200 |
commit | eb3aa725606736545aab3669175080cb6c9776ee (patch) | |
tree | e51cc4e738c940585313b0b21899f47fab08bb29 | |
parent | 588c0a6cde62871760d8f85b621f451b63e9af03 (diff) | |
parent | 4603d12a04767b0e643679b3d924b6303b09a3fd (diff) |
Merge pull request #24108 from vespa-engine/toregge/fedora-37-has-llvm-15
Fedora 37 has llvm 15.
-rw-r--r-- | default_build_settings.cmake | 4 | ||||
-rw-r--r-- | dist/vespa.spec | 12 | ||||
-rw-r--r-- | eval/src/vespa/eval/eval/llvm/llvm_wrapper.cpp | 47 |
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 |