[Bf-blender-cvs] [ebab49d1358] functions: define separate and combine vector nodes in terms of llvm ir
Jacques Lucke
noreply at git.blender.org
Wed Mar 6 14:00:06 CET 2019
Commit: ebab49d13580c22f69c3ddee21ef106c71bcfeae
Author: Jacques Lucke
Date: Wed Mar 6 11:37:54 2019 +0100
Branches: functions
https://developer.blender.org/rBebab49d13580c22f69c3ddee21ef106c71bcfeae
define separate and combine vector nodes in terms of llvm ir
===================================================================
M source/blender/functions/backends/llvm/compile.cpp
M source/blender/functions/backends/llvm/llvm_types.hpp
M source/blender/functions/c_wrapper.cpp
M source/blender/functions/functions/vectors.cpp
===================================================================
diff --git a/source/blender/functions/backends/llvm/compile.cpp b/source/blender/functions/backends/llvm/compile.cpp
index aa6fd47f3dd..e8415bd06e5 100644
--- a/source/blender/functions/backends/llvm/compile.cpp
+++ b/source/blender/functions/backends/llvm/compile.cpp
@@ -17,7 +17,7 @@ namespace FN {
llvm::Function *main_function)
{
BLI_assert(!llvm::verifyModule(*module, &llvm::outs()));
- //module->print(llvm::outs(), nullptr);
+ module->print(llvm::outs(), nullptr);
llvm::ExecutionEngine *ee = llvm::EngineBuilder(
std::unique_ptr<llvm::Module>(module)).create();
diff --git a/source/blender/functions/backends/llvm/llvm_types.hpp b/source/blender/functions/backends/llvm/llvm_types.hpp
index 3ce825d005c..9cd211b6715 100644
--- a/source/blender/functions/backends/llvm/llvm_types.hpp
+++ b/source/blender/functions/backends/llvm/llvm_types.hpp
@@ -71,4 +71,9 @@ namespace FN {
return ext;
}
+ inline llvm::Type *get_llvm_type(SharedType &type, llvm::LLVMContext &context)
+ {
+ return get_type_info(type)->get_type(context);
+ }
+
} /* namespace FN */
\ No newline at end of file
diff --git a/source/blender/functions/c_wrapper.cpp b/source/blender/functions/c_wrapper.cpp
index 84af9f34cbc..2987b7a0351 100644
--- a/source/blender/functions/c_wrapper.cpp
+++ b/source/blender/functions/c_wrapper.cpp
@@ -27,6 +27,7 @@ static void playground()
llvm::LLVMContext *context = new llvm::LLVMContext();
derive_LLVMCompiledBody_from_LLVMBuildIRBody(fn, *context);
+ derive_TupleCallBody_from_LLVMCompiledBody(fn, *context);
Tuple fn_in(fn->signature().input_types());
Tuple fn_out(fn->signature().output_types());
diff --git a/source/blender/functions/functions/vectors.cpp b/source/blender/functions/functions/vectors.cpp
index 40482a6401b..9d09c522788 100644
--- a/source/blender/functions/functions/vectors.cpp
+++ b/source/blender/functions/functions/vectors.cpp
@@ -10,14 +10,20 @@ namespace FN { namespace Functions {
using namespace Types;
- class CombineVector : public TupleCallBody {
- void call(const Tuple &fn_in, Tuple &fn_out) const override
+ class CombineVector : public LLVMBuildIRBody {
+ void build_ir(
+ llvm::IRBuilder<> &builder,
+ const LLVMValues &inputs,
+ LLVMValues &outputs) const override
{
- Vector v;
- v.x = fn_in.get<float>(0);
- v.y = fn_in.get<float>(1);
- v.z = fn_in.get<float>(2);
- fn_out.set<Vector>(0, v);
+ llvm::Type *vector_ty = get_llvm_type(
+ get_fvec3_type(), builder.getContext());
+
+ llvm::Value *vector = llvm::UndefValue::get(vector_ty);
+ vector = builder.CreateInsertValue(vector, inputs[0], 0);
+ vector = builder.CreateInsertValue(vector, inputs[1], 1);
+ vector = builder.CreateInsertValue(vector, inputs[2], 2);
+ outputs.append(vector);
}
};
@@ -34,18 +40,7 @@ namespace FN { namespace Functions {
return fn;
}
-
- class SeparateVector : public TupleCallBody {
- void call(const Tuple &fn_in, Tuple &fn_out) const override
- {
- Vector v = fn_in.get<Vector>(0);
- fn_out.set<float>(0, v.x);
- fn_out.set<float>(1, v.y);
- fn_out.set<float>(2, v.z);
- }
- };
-
- class SeparateVectorGen : public LLVMBuildIRBody {
+ class SeparateVector : public LLVMBuildIRBody {
void build_ir(
llvm::IRBuilder<> &builder,
const LLVMValues &inputs,
@@ -67,7 +62,6 @@ namespace FN { namespace Functions {
OutputParameter("Z", get_float_type()),
}));
fn->add_body(new SeparateVector());
- fn->add_body(new SeparateVectorGen());
return fn;
}
More information about the Bf-blender-cvs
mailing list