[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