[Bf-blender-cvs] [627da42ac9c] nodes_playground: separate callPointer function

Jacques Lucke noreply at git.blender.org
Sun Jan 6 17:25:47 CET 2019


Commit: 627da42ac9c2d36b17e6df7392e2bfe01e28326d
Author: Jacques Lucke
Date:   Sat Jan 5 16:03:43 2019 +0100
Branches: nodes_playground
https://developer.blender.org/rB627da42ac9c2d36b17e6df7392e2bfe01e28326d

separate callPointer function

===================================================================

M	source/blender/modifiers/intern/node_compiler.cpp
M	source/blender/modifiers/intern/node_compiler.hpp

===================================================================

diff --git a/source/blender/modifiers/intern/node_compiler.cpp b/source/blender/modifiers/intern/node_compiler.cpp
index e10ee63c923..6cc22a4a458 100644
--- a/source/blender/modifiers/intern/node_compiler.cpp
+++ b/source/blender/modifiers/intern/node_compiler.cpp
@@ -58,6 +58,15 @@ std::string Node::debug_id() const
 	return ss.str();
 }
 
+llvm::CallInst *callPointer(
+	llvm::IRBuilder<> &builder,
+	void *pointer, llvm::FunctionType *type, llvm::ArrayRef<llvm::Value *> arguments)
+{
+	auto address_int = builder.getInt64((size_t)pointer);
+	auto address = builder.CreateIntToPtr(address_int, llvm::PointerType::get(type, 0));
+	return builder.CreateCall(address, arguments);
+}
+
 void DataFlowCallable::printCode()
 {
 	this->module->print(llvm::outs(), nullptr);
diff --git a/source/blender/modifiers/intern/node_compiler.hpp b/source/blender/modifiers/intern/node_compiler.hpp
index 29a4dc69ca6..823ede7904a 100644
--- a/source/blender/modifiers/intern/node_compiler.hpp
+++ b/source/blender/modifiers/intern/node_compiler.hpp
@@ -153,6 +153,10 @@ class SingleBuilderNode : public Node {
 	}
 };
 
+llvm::CallInst *callPointer(
+	llvm::IRBuilder<> &builder,
+	void *pointer, llvm::FunctionType *type, llvm::ArrayRef<llvm::Value *> arguments);
+
 class ExecuteFunctionNode : public Node {
 	virtual void *getExecuteFunction() = 0;
 
@@ -178,12 +182,7 @@ class ExecuteFunctionNode : public Node {
 
 		llvm::FunctionType *ftype = llvm::FunctionType::get(
 			llvm::Type::getVoidTy(context), arg_types, false);
-
-		void *pointer = this->getExecuteFunction();
-		auto address_int = builder->getInt64((size_t)pointer);
-		auto address = builder->CreateIntToPtr(address_int, llvm::PointerType::get(ftype, 0));
-
-		builder->CreateCall(address, arguments);
+		callPointer(*builder, this->getExecuteFunction(), ftype, arguments);
 
 		for (auto output_pointer : output_pointers) {
 			llvm::Value *result = builder->CreateLoad(output_pointer);



More information about the Bf-blender-cvs mailing list