[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