[Bf-blender-cvs] [b60be30ed5b] functions: cleanup pointer calls
Jacques Lucke
noreply at git.blender.org
Thu Mar 28 17:50:56 CET 2019
Commit: b60be30ed5b87bc40e34306a84232fc2dcce2c69
Author: Jacques Lucke
Date: Thu Mar 28 16:30:48 2019 +0100
Branches: functions
https://developer.blender.org/rBb60be30ed5b87bc40e34306a84232fc2dcce2c69
cleanup pointer calls
===================================================================
M source/blender/functions/backends/llvm/builder.cpp
M source/blender/functions/backends/llvm/builder.hpp
M source/blender/functions/backends/llvm/compiled_body.cpp
M source/blender/functions/backends/llvm/ir_for_tuple_call.cpp
M source/blender/functions/backends/llvm/llvm_types.cpp
===================================================================
diff --git a/source/blender/functions/backends/llvm/builder.cpp b/source/blender/functions/backends/llvm/builder.cpp
index ce5bec98026..97ca28a7517 100644
--- a/source/blender/functions/backends/llvm/builder.cpp
+++ b/source/blender/functions/backends/llvm/builder.cpp
@@ -11,4 +11,26 @@ namespace FN {
return types;
}
+ llvm::Value *CodeBuilder::CreateCallPointer(
+ void *func_ptr,
+ llvm::FunctionType *ftype,
+ const LLVMValues &args)
+ {
+ auto address_int = m_builder.getInt64((size_t)func_ptr);
+ auto address = m_builder.CreateIntToPtr(address_int, ftype->getPointerTo());
+ return m_builder.CreateCall(address, to_array_ref(args));
+ }
+
+ void CodeBuilder::CreateCallPointer_NoReturnValue(
+ void *func_ptr,
+ const LLVMValues &args)
+ {
+ LLVMTypes arg_types = this->types_of_values(args);
+
+ llvm::FunctionType *ftype = llvm::FunctionType::get(
+ this->getVoidTy(), to_array_ref(arg_types), false);
+
+ this->CreateCallPointer(func_ptr, ftype, args);
+ }
+
} /* namespace FN */
\ No newline at end of file
diff --git a/source/blender/functions/backends/llvm/builder.hpp b/source/blender/functions/backends/llvm/builder.hpp
index b599e257af1..a377a61a0b9 100644
--- a/source/blender/functions/backends/llvm/builder.hpp
+++ b/source/blender/functions/backends/llvm/builder.hpp
@@ -172,12 +172,11 @@ namespace FN {
llvm::Value *CreateCallPointer(
void *func_ptr,
llvm::FunctionType *ftype,
- const LLVMValues &args)
- {
- auto address_int = m_builder.getInt64((size_t)func_ptr);
- auto address = m_builder.CreateIntToPtr(address_int, ftype->getPointerTo());
- return m_builder.CreateCall(address, to_array_ref(args));
- }
+ const LLVMValues &args);
+
+ void CreateCallPointer_NoReturnValue(
+ void *func_ptr,
+ const LLVMValues &args);
llvm::Value *CreateCall(
llvm::Function *function,
diff --git a/source/blender/functions/backends/llvm/compiled_body.cpp b/source/blender/functions/backends/llvm/compiled_body.cpp
index 1345a4a91e8..8ea8e72d2d1 100644
--- a/source/blender/functions/backends/llvm/compiled_body.cpp
+++ b/source/blender/functions/backends/llvm/compiled_body.cpp
@@ -15,7 +15,8 @@ namespace FN {
auto *ftype = function_type_from_signature(
this->owner()->signature(), builder.getContext());
- llvm::Value *output_struct = builder.CreateCallPointer(this->function_ptr(), ftype, interface.inputs());
+ llvm::Value *output_struct = builder.CreateCallPointer(
+ this->function_ptr(), ftype, interface.inputs());
for (uint i = 0; i < ftype->getReturnType()->getStructNumElements(); i++) {
llvm::Value *out = builder.CreateExtractValue(output_struct, i);
interface.set_output(i, out);
diff --git a/source/blender/functions/backends/llvm/ir_for_tuple_call.cpp b/source/blender/functions/backends/llvm/ir_for_tuple_call.cpp
index d84653d2ffc..054e881713f 100644
--- a/source/blender/functions/backends/llvm/ir_for_tuple_call.cpp
+++ b/source/blender/functions/backends/llvm/ir_for_tuple_call.cpp
@@ -36,18 +36,11 @@ namespace FN {
static llvm::Value *build__stack_allocate_ExecutionContext(
CodeBuilder &builder)
{
- llvm::Type *void_ty = builder.getVoidTy();
- llvm::Type *void_ptr_ty = void_ty->getPointerTo();
-
- llvm::FunctionType *ftype = llvm::FunctionType::get(
- void_ty, {void_ptr_ty, void_ptr_ty}, false);
-
llvm::Value *stack_ptr = builder.CreateAllocaBytes_VoidPtr(sizeof(ExecutionStack));
llvm::Value *ctx_ptr = builder.CreateAllocaBytes_VoidPtr(sizeof(ExecutionContext));
- builder.CreateCallPointer(
+ builder.CreateCallPointer_NoReturnValue(
(void *)run__setup_ExecutionContext_in_buffer,
- ftype,
{stack_ptr, ctx_ptr});
return ctx_ptr;
@@ -115,19 +108,9 @@ namespace FN {
llvm::Type *output_type) const
{
llvm::LLVMContext &context = function->getContext();
-
llvm::BasicBlock *bb = llvm::BasicBlock::Create(context, "entry", function);
CodeBuilder builder(bb);
- /* Type declarations. */
- llvm::Type *void_ty = llvm::Type::getVoidTy(context);
- llvm::Type *void_ptr_ty = void_ty->getPointerTo();
- llvm::Type *byte_ptr_ty = llvm::Type::getInt8PtrTy(context);
-
- llvm::FunctionType *call_ftype = llvm::FunctionType::get(
- void_ty, {void_ptr_ty, byte_ptr_ty, byte_ptr_ty, void_ptr_ty}, false);
-
-
/* Allocate temporary stack buffer for tuple input and output. */
auto &meta_in = m_tuple_call->meta_in();
auto &meta_out = m_tuple_call->meta_out();
@@ -145,9 +128,8 @@ namespace FN {
/* Execute tuple call body. */
llvm::Value *exec_ctx = build__stack_allocate_ExecutionContext(builder);
- builder.CreateCallPointer(
+ builder.CreateCallPointer_NoReturnValue(
(void *)run_TupleCallBody,
- call_ftype,
{builder.getVoidPtr(m_tuple_call),
tuple_in_data_ptr,
tuple_out_data_ptr,
diff --git a/source/blender/functions/backends/llvm/llvm_types.cpp b/source/blender/functions/backends/llvm/llvm_types.cpp
index b562656bb62..3a67b003ded 100644
--- a/source/blender/functions/backends/llvm/llvm_types.cpp
+++ b/source/blender/functions/backends/llvm/llvm_types.cpp
@@ -119,14 +119,8 @@ namespace FN {
CodeBuilder &builder,
llvm::Value *value) const
{
- auto *void_ty = builder.getVoidTy();
- auto *void_ptr_ty = void_ty->getPointerTo();
- auto free_ftype = llvm::FunctionType::get(
- void_ty, {void_ptr_ty, void_ptr_ty}, false);
-
- builder.CreateCallPointer(
+ builder.CreateCallPointer_NoReturnValue(
(void *)PointerLLVMTypeInfo::free_value,
- free_ftype,
{builder.getVoidPtr((void *)this), value});
}
More information about the Bf-blender-cvs
mailing list