[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