diff options
author | Tor Egge <Tor.Egge@online.no> | 2022-09-18 14:33:08 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2022-09-18 14:33:08 +0200 |
commit | 4603d12a04767b0e643679b3d924b6303b09a3fd (patch) | |
tree | e51cc4e738c940585313b0b21899f47fab08bb29 /eval | |
parent | 588c0a6cde62871760d8f85b621f451b63e9af03 (diff) |
Fedora 37 has llvm 15.
Diffstat (limited to 'eval')
-rw-r--r-- | eval/src/vespa/eval/eval/llvm/llvm_wrapper.cpp | 47 |
1 files changed, 23 insertions, 24 deletions
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 |