[Bf-blender-cvs] [db88d6e1a59] functions: fix auto vectorization when function does not have certain bodies

Jacques Lucke noreply at git.blender.org
Mon Aug 5 11:51:43 CEST 2019


Commit: db88d6e1a59ef9ce887d07166472c367d6f23502
Author: Jacques Lucke
Date:   Mon Aug 5 11:49:15 2019 +0200
Branches: functions
https://developer.blender.org/rBdb88d6e1a59ef9ce887d07166472c367d6f23502

fix auto vectorization when function does not have certain bodies

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

M	source/blender/functions/functions/auto_vectorization.cpp

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

diff --git a/source/blender/functions/functions/auto_vectorization.cpp b/source/blender/functions/functions/auto_vectorization.cpp
index 1cf2d863b48..bb9f817e0fe 100644
--- a/source/blender/functions/functions/auto_vectorization.cpp
+++ b/source/blender/functions/functions/auto_vectorization.cpp
@@ -53,6 +53,7 @@ class AutoVectorizationGen : public LLVMBuildIRBody {
         m_input_is_list(input_is_list),
         m_empty_list_value_builders(empty_list_value_builders)
   {
+    BLI_assert(main->has_body<LLVMBuildIRBody>());
     BLI_assert(input_is_list.contains(true));
     for (uint i = 0; i < main->input_amount(); i++) {
       SharedType &base_type = main->input_type(i);
@@ -415,15 +416,7 @@ static SharedFunction to_vectorized_function_internal(
   BLI_assert(vectorized_inputs_mask.size() == input_amount);
   BLI_assert(vectorized_inputs_mask.contains(true));
   BLI_assert(empty_list_value_builders.size() == vectorized_inputs_mask.count(true));
-
-  if (!original_fn->has_body<TupleCallBody>()) {
-    if (original_fn->has_body<LLVMBuildIRBody>()) {
-      derive_TupleCallBody_from_LLVMBuildIRBody(original_fn);
-    }
-    else {
-      BLI_assert(false);
-    }
-  }
+  BLI_assert(original_fn->has_body<TupleCallBody>() || original_fn->has_body<LLVMBuildIRBody>());
 
   FunctionBuilder builder;
   for (uint i = 0; i < input_amount; i++) {
@@ -447,9 +440,13 @@ static SharedFunction to_vectorized_function_internal(
 
   std::string name = original_fn->name() + " (Vectorized)";
   auto fn = builder.build(name);
-  // fn->add_body<AutoVectorization>(original_fn, vectorized_inputs_mask);
-  fn->add_body<AutoVectorizationGen>(
-      original_fn, vectorized_inputs_mask, empty_list_value_builders);
+  if (original_fn->has_body<LLVMBuildIRBody>()) {
+    fn->add_body<AutoVectorizationGen>(
+        original_fn, vectorized_inputs_mask, empty_list_value_builders);
+  }
+  else {
+    fn->add_body<AutoVectorization>(original_fn, vectorized_inputs_mask);
+  }
   return fn;
 }



More information about the Bf-blender-cvs mailing list