[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