[Bf-blender-cvs] [0f80acd54b2] functions: don't prepare execution stack when not necessary
Jacques Lucke
noreply at git.blender.org
Wed Jul 31 16:21:04 CEST 2019
Commit: 0f80acd54b27a2e4a070dc435304622e88424145
Author: Jacques Lucke
Date: Wed Jul 31 15:40:11 2019 +0200
Branches: functions
https://developer.blender.org/rB0f80acd54b27a2e4a070dc435304622e88424145
don't prepare execution stack when not necessary
===================================================================
M source/blender/functions/backends/llvm/build_ir_body.hpp
M source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
M source/blender/functions/backends/llvm/ir_for_tuple_call.cpp
===================================================================
diff --git a/source/blender/functions/backends/llvm/build_ir_body.hpp b/source/blender/functions/backends/llvm/build_ir_body.hpp
index e42912f76a9..1d60753b297 100644
--- a/source/blender/functions/backends/llvm/build_ir_body.hpp
+++ b/source/blender/functions/backends/llvm/build_ir_body.hpp
@@ -72,6 +72,11 @@ class LLVMBuildIRBody : public FunctionBody {
CodeInterface &interface,
const BuildIRSettings &settings) const = 0;
+ virtual bool prepare_execution_context() const
+ {
+ return false;
+ }
+
llvm::Function *build_function(llvm::Module *module,
StringRef name,
BuildIRSettings &settings,
diff --git a/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp b/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
index 0689cd3dda7..f49dc1d90ab 100644
--- a/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
+++ b/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
@@ -139,19 +139,21 @@ class BuildGraphIR : public LLVMBuildIRBody {
uint node_id,
Vector<llvm::Value *> &input_values) const
{
- if (settings.maintain_stack()) {
+ SharedFunction &fn = m_graph->function_of_node(node_id);
+ auto &body = fn->body<LLVMBuildIRBody>();
+ bool setup_stack = settings.maintain_stack() && body.prepare_execution_context();
+
+ if (setup_stack) {
this->push_stack_frames_for_node(builder, interface.context_ptr(), node_id);
}
- SharedFunction &fn = m_graph->function_of_node(node_id);
Vector<llvm::Value *> output_values(m_graph->outputs_of_node(node_id).size());
CodeInterface sub_interface(
input_values, output_values, interface.context_ptr(), interface.function_ir_cache());
- auto &body = fn->body<LLVMBuildIRBody>();
body.build_ir(builder, sub_interface, settings);
- if (settings.maintain_stack()) {
+ if (setup_stack) {
this->pop_stack_frames_for_node(builder, interface.context_ptr());
}
diff --git a/source/blender/functions/backends/llvm/ir_for_tuple_call.cpp b/source/blender/functions/backends/llvm/ir_for_tuple_call.cpp
index cba6ac9601a..ad94f1aeee3 100644
--- a/source/blender/functions/backends/llvm/ir_for_tuple_call.cpp
+++ b/source/blender/functions/backends/llvm/ir_for_tuple_call.cpp
@@ -51,6 +51,11 @@ class TupleCallLLVM : public LLVMBuildIRBody {
{
}
+ bool prepare_execution_context() const override
+ {
+ return true;
+ }
+
void build_ir(CodeBuilder &builder,
CodeInterface &interface,
const BuildIRSettings &settings) const override
More information about the Bf-blender-cvs
mailing list