[Bf-blender-cvs] [5ab0eca7c6a] functions: fgraph ir builder prefers precompiled ir if available

Jacques Lucke noreply at git.blender.org
Sun Mar 10 16:28:52 CET 2019


Commit: 5ab0eca7c6a99d27d89916bf4e84522b8f922c2e
Author: Jacques Lucke
Date:   Sun Mar 10 16:21:24 2019 +0100
Branches: functions
https://developer.blender.org/rB5ab0eca7c6a99d27d89916bf4e84522b8f922c2e

fgraph ir builder prefers precompiled ir if available

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

M	source/blender/functions/backends/llvm/fgraph_ir_generation.cpp

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

diff --git a/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp b/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
index c795dd1477a..b0a83c3185d 100644
--- a/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
+++ b/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
@@ -28,8 +28,6 @@ namespace FN {
 					derive_LLVMBuildIRBody_from_TupleCallBody(fn);
 					continue;
 				}
-				/* TODO: Find easy check to see which nodes
-				 *   will need to be executed. */
 			}
 			m_required_sockets = this->find_required_sockets();
 			std::cout << "Required Sockets: " << m_required_sockets.size() << std::endl;
@@ -110,10 +108,7 @@ namespace FN {
 					input_values.append(values.lookup(input));
 				}
 
-				LLVMValues output_values;
-				auto *body = node->function()->body<LLVMBuildIRBody>();
-				BLI_assert(body);
-				body->build_ir(builder, input_values, output_values);
+				LLVMValues output_values = this->build_node_ir(builder, node, input_values);
 
 				for (uint i = 0; i < output_values.size(); i++) {
 					Socket output = node->output(i);
@@ -173,6 +168,27 @@ namespace FN {
 				}
 			}
 		}
+
+		LLVMValues build_node_ir(
+			llvm::IRBuilder<> &builder,
+			Node *node,
+			LLVMValues &input_values) const
+		{
+			LLVMValues output_values;
+			SharedFunction &fn = node->function();
+			if (fn->has_body<LLVMCompiledBody>()) {
+				auto *body = fn->body<LLVMCompiledBody>();
+				body->build_ir(builder, input_values, output_values);
+			}
+			else if (fn->has_body<LLVMBuildIRBody>()) {
+				auto *body = fn->body<LLVMBuildIRBody>();
+				body->build_ir(builder, input_values, output_values);
+			}
+			else {
+				BLI_assert(false);
+			}
+			return output_values;
+		}
 	};
 
 	void fgraph_add_LLVMBuildIRBody(



More information about the Bf-blender-cvs mailing list