[Bf-blender-cvs] [85536c5e752] functions: use function bodies as references instead of pointers by default

Jacques Lucke noreply at git.blender.org
Wed Jul 24 19:12:17 CEST 2019


Commit: 85536c5e752eae1823bc198d8f4867e11c910398
Author: Jacques Lucke
Date:   Wed Jul 24 17:43:00 2019 +0200
Branches: functions
https://developer.blender.org/rB85536c5e752eae1823bc198d8f4867e11c910398

use function bodies as references instead of pointers by default

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

M	source/blender/functions/backends/dependencies/dependencies-c.cpp
M	source/blender/functions/backends/dependencies/fgraph_dependencies.cpp
M	source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
M	source/blender/functions/backends/llvm/ir_for_tuple_call.cpp
M	source/blender/functions/backends/llvm/ir_to_tuple_call.cpp
M	source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
M	source/blender/functions/backends/tuple_call/lazy_to_normal.cpp
M	source/blender/functions/backends/tuple_call/tuple_call-c.cpp
M	source/blender/functions/backends/tuple_call/tuple_call.hpp
M	source/blender/functions/core/data_flow_graph.hpp
M	source/blender/functions/core/function.hpp
M	source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
M	source/blender/functions/functions/auto_vectorization.cpp
M	source/blender/simulations/bparticles/emitters.cpp
M	source/blender/simulations/bparticles/events.cpp
M	source/blender/simulations/bparticles/events.hpp
M	source/blender/simulations/bparticles/forces.cpp
M	source/blender/simulations/bparticles/forces.hpp
M	source/blender/simulations/bparticles/inserters.cpp
M	source/blender/simulations/bparticles/particle_function.cpp
M	source/blender/simulations/bparticles/particle_function.hpp
M	source/blender/simulations/bparticles/simulate.cpp

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

diff --git a/source/blender/functions/backends/dependencies/dependencies-c.cpp b/source/blender/functions/backends/dependencies/dependencies-c.cpp
index 89dd66b1263..7c6dac037e2 100644
--- a/source/blender/functions/backends/dependencies/dependencies-c.cpp
+++ b/source/blender/functions/backends/dependencies/dependencies-c.cpp
@@ -17,14 +17,17 @@ static void update_depsgraph(DepsNodeHandle *deps_node, DependencyComponents &de
 void FN_function_update_dependencies(FnFunction fn_c, struct DepsNodeHandle *deps_node)
 {
   Function *fn = unwrap(fn_c);
-  DepsBody *body = fn->body<DepsBody>();
-  if (body) {
-    MultiMap<uint, ID *> input_ids;
-    MultiMap<uint, ID *> output_ids;
-    DependencyComponents components;
-
-    FunctionDepsBuilder builder(input_ids, output_ids, components);
-    body->build_deps(builder);
-    update_depsgraph(deps_node, components);
+  if (!fn->has_body<DepsBody>()) {
+    return;
   }
+
+  DepsBody &body = fn->body<DepsBody>();
+
+  MultiMap<uint, ID *> input_ids;
+  MultiMap<uint, ID *> output_ids;
+  DependencyComponents components;
+
+  FunctionDepsBuilder builder(input_ids, output_ids, components);
+  body.build_deps(builder);
+  update_depsgraph(deps_node, components);
 }
diff --git a/source/blender/functions/backends/dependencies/fgraph_dependencies.cpp b/source/blender/functions/backends/dependencies/fgraph_dependencies.cpp
index daba369be26..00d337eaf9c 100644
--- a/source/blender/functions/backends/dependencies/fgraph_dependencies.cpp
+++ b/source/blender/functions/backends/dependencies/fgraph_dependencies.cpp
@@ -23,7 +23,7 @@ class FGraphDependencies : public DepsBody {
   }
 
   Vector<ID *> find_deps_and_outputs(DFGraphSocket socket,
-                                          FunctionDepsBuilder &parent_builder) const
+                                     FunctionDepsBuilder &parent_builder) const
   {
     if (m_fgraph.inputs().contains(socket)) {
       return parent_builder.get_input_ids(m_fgraph.inputs().index(socket));
@@ -34,14 +34,7 @@ class FGraphDependencies : public DepsBody {
     else {
       uint node_id = m_graph->node_id_of_output(socket);
       SharedFunction &fn = m_graph->function_of_node(node_id);
-      DepsBody *body = fn->body<DepsBody>();
-      if (body == nullptr) {
-        for (auto input_socket : m_graph->inputs_of_node(node_id)) {
-          this->find_deps_and_outputs(input_socket, parent_builder);
-        }
-        return {};
-      }
-      else {
+      if (fn->has_body<DepsBody>()) {
         MultiMap<uint, ID *> input_ids;
 
         for (uint i = 0; i < fn->input_amount(); i++) {
@@ -53,9 +46,16 @@ class FGraphDependencies : public DepsBody {
 
         MultiMap<uint, ID *> output_ids;
         FunctionDepsBuilder builder(input_ids, output_ids, parent_builder.dependency_components());
-        body->build_deps(builder);
+        DepsBody &body = fn->body<DepsBody>();
+        body.build_deps(builder);
         return output_ids.lookup_default(m_graph->index_of_output(socket));
       }
+      else {
+        for (auto input_socket : m_graph->inputs_of_node(node_id)) {
+          this->find_deps_and_outputs(input_socket, parent_builder);
+        }
+        return {};
+      }
     }
   }
 };
diff --git a/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp b/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
index 5e820b950b1..f836b4c621b 100644
--- a/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
+++ b/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
@@ -149,9 +149,8 @@ class BuildGraphIR : public LLVMBuildIRBody {
     CodeInterface sub_interface(
         input_values, output_values, interface.context_ptr(), interface.function_ir_cache());
 
-    BLI_assert(fn->has_body<LLVMBuildIRBody>());
-    auto *body = fn->body<LLVMBuildIRBody>();
-    body->build_ir(builder, sub_interface, settings);
+    auto &body = fn->body<LLVMBuildIRBody>();
+    body.build_ir(builder, sub_interface, settings);
 
     if (settings.maintain_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 62c685591d4..653a9737706 100644
--- a/source/blender/functions/backends/llvm/ir_for_tuple_call.cpp
+++ b/source/blender/functions/backends/llvm/ir_for_tuple_call.cpp
@@ -44,10 +44,10 @@ static llvm::Value *build__stack_allocate_ExecutionContext(CodeBuilder &builder)
 
 class TupleCallLLVM : public LLVMBuildIRBody {
  private:
-  TupleCallBody *m_tuple_call;
+  TupleCallBody &m_tuple_call;
 
  public:
-  TupleCallLLVM(TupleCallBody *tuple_call) : m_tuple_call(tuple_call)
+  TupleCallLLVM(TupleCallBody &tuple_call) : m_tuple_call(tuple_call)
   {
   }
 
@@ -55,7 +55,7 @@ class TupleCallLLVM : public LLVMBuildIRBody {
                 CodeInterface &interface,
                 const BuildIRSettings &settings) const override
   {
-    Function *fn = m_tuple_call->owner();
+    Function *fn = m_tuple_call.owner();
 
     /* Find relevant type information. */
     auto input_type_infos = fn->input_extensions<LLVMTypeInfo>();
@@ -86,7 +86,7 @@ class TupleCallLLVM : public LLVMBuildIRBody {
                                        ArrayRef<LLVMTypeInfo *> input_type_infos,
                                        ArrayRef<LLVMTypeInfo *> output_type_infos) const
   {
-    Function *fn = m_tuple_call->owner();
+    Function *fn = m_tuple_call.owner();
 
     Vector<llvm::Type *> input_types = builder.types_of_values(interface.inputs());
     if (settings.maintain_stack()) {
@@ -133,8 +133,8 @@ class TupleCallLLVM : public LLVMBuildIRBody {
     CodeBuilder builder(bb);
 
     /* Allocate temporary stack buffer for tuple input and output. */
-    auto &meta_in = m_tuple_call->meta_in();
-    auto &meta_out = m_tuple_call->meta_out();
+    auto &meta_in = m_tuple_call.meta_in();
+    auto &meta_out = m_tuple_call.meta_out();
     llvm::Value *tuple_in_data_ptr = builder.CreateAllocaBytes_BytePtr(meta_in->size_of_data());
     tuple_in_data_ptr->setName("tuple_in_data");
     llvm::Value *tuple_out_data_ptr = builder.CreateAllocaBytes_BytePtr(meta_out->size_of_data());
@@ -158,11 +158,13 @@ class TupleCallLLVM : public LLVMBuildIRBody {
     }
 
     /* Execute tuple call body. */
-    builder.CreateCallPointer(
-        (void *)run_TupleCallBody,
-        {builder.getVoidPtr(m_tuple_call), tuple_in_data_ptr, tuple_out_data_ptr, context_ptr},
-        builder.getVoidTy(),
-        "Run tuple call body");
+    builder.CreateCallPointer((void *)run_TupleCallBody,
+                              {builder.getVoidPtr((void *)&m_tuple_call),
+                               tuple_in_data_ptr,
+                               tuple_out_data_ptr,
+                               context_ptr},
+                              builder.getVoidTy(),
+                              "Run tuple call body");
 
     /* Read output values from buffer. */
     llvm::Value *output = llvm::UndefValue::get(output_type);
diff --git a/source/blender/functions/backends/llvm/ir_to_tuple_call.cpp b/source/blender/functions/backends/llvm/ir_to_tuple_call.cpp
index b3e42a96898..19ebcd9fc33 100644
--- a/source/blender/functions/backends/llvm/ir_to_tuple_call.cpp
+++ b/source/blender/functions/backends/llvm/ir_to_tuple_call.cpp
@@ -27,7 +27,7 @@ static llvm::Value *lookup_tuple_address(CodeBuilder &builder,
 static llvm::Function *insert_tuple_call_function(SharedFunction &fn, llvm::Module *module)
 {
   llvm::LLVMContext &context = module->getContext();
-  LLVMBuildIRBody *body = fn->body<LLVMBuildIRBody>();
+  LLVMBuildIRBody &body = fn->body<LLVMBuildIRBody>();
 
   llvm::Type *void_ty = llvm::Type::getVoidTy(context);
   llvm::Type *void_ptr_ty = void_ty->getPointerTo();
@@ -76,7 +76,7 @@ static llvm::Function *insert_tuple_call_function(SharedFunction &fn, llvm::Modu
   BuildIRSettings settings;
   FunctionIRCache function_cache;
   CodeInterface interface(input_values, output_values, context_ptr, function_cache);
-  body->build_ir(builder, interface, settings);
+  body.build_ir(builder, interface, settings);
 
   for (uint i = 0; i < output_values.size(); i++) {
     llvm::Value *value_byte_addr = lookup_tuple_address(builder, fn_out_data, fn_out_offsets, i);
diff --git a/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp b/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
index 83ca248b426..f0ffaff8de2 100644
--- a/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
+++ b/source/blender/functions/backends/tuple_call/fgraph_tuple_call.cpp
@@ -69,14 +69,14 @@ class ExecuteFGraph : public TupleCallBody {
     for (uint node_id : m_graph->node_ids()) {
       SharedFunction &fn = m_graph->function_of_node(node_id);
 
-      TupleCallBodyBase *body;
-      bool is_lazy_body;
+      TupleCallBodyBase *body = nullptr;
+      bool is_lazy_body = false;
       if (fn->has_body<LazyInTupleCallBody>()) {
-        body = fn->body<LazyInTupleCallBody>();
+        body = &fn->body<LazyInTupleCallBody>();
         is_lazy_body = true;
       }
-      else {
-        body = fn->body<TupleCallBody>();
+      else if (fn->has_body<TupleCallBody>()) {
+        body = &fn->body<TupleCallBody>();
         is_lazy_body = false;
       }
 
@@ -586,7 +586,7 @@ class ExecuteFGraph_Simple : public TupleCallBody {
     else {
       uint node_id = m_graph->node_id_of_output(socket);
       SharedFunction &fn = m_graph->function_of_node(node_id);
-      TupleCallBody *body = fn->body<TupleCallBody>();
+      TupleCallBody &body = fn->body<TupleCallBody>();
 
       FN_TUPLE_CALL_ALLOC_TUPLES(body, tmp_in, tmp_out);
 
@@ -597,7 +597,7 @@ class ExecuteFGraph_Simple : public TupleCallBody {
       }
 
       SourceInfoStackFrame node_frame(m_graph->source_info_of_node(node_id));
-      body->call__setup_stack(tmp_in, tmp_out, ctx, node_frame);
+      body.call__setup_stack(tmp_in, tmp_out, ctx, node_frame);
 
       Tuple::copy_element(tmp_out, m_graph->index_of_output(socket.id()), out, out_index);
     }
diff --git a/source/blender/functions/backends/tuple_call/lazy_to_normal.cpp b/source/blend

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list