[Bf-blender-cvs] [49131279ee3] functions: generate more readable IR

Jacques Lucke noreply at git.blender.org
Fri May 3 12:43:42 CEST 2019


Commit: 49131279ee3abfa642507cef7f0b1b4a858b09ce
Author: Jacques Lucke
Date:   Fri May 3 12:39:21 2019 +0200
Branches: functions
https://developer.blender.org/rB49131279ee3abfa642507cef7f0b1b4a858b09ce

generate more readable IR

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

M	source/blender/functions/backends/llvm/compile.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/llvm_types.cpp
M	source/blender/functions/frontends/data_flow_nodes/function_generation.cpp
M	source/blender/functions/functions/auto_vectorization.cpp

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

diff --git a/source/blender/functions/backends/llvm/compile.cpp b/source/blender/functions/backends/llvm/compile.cpp
index c6ae50bbfee..bb4027cc1fe 100644
--- a/source/blender/functions/backends/llvm/compile.cpp
+++ b/source/blender/functions/backends/llvm/compile.cpp
@@ -39,12 +39,14 @@ static void UNUSED_FUNCTION(save_machine_code)(std::string filepath,
 std::unique_ptr<CompiledLLVM> CompiledLLVM::FromIR(llvm::Module *module,
                                                    llvm::Function *main_function)
 {
-  BLI_assert(!llvm::verifyModule(*module, &llvm::outs()));
+  // optimize_module(module);
   // module->print(llvm::outs(), nullptr);
+  BLI_assert(!llvm::verifyModule(*module, &llvm::outs()));
 
   llvm::ExecutionEngine *ee = llvm::EngineBuilder(std::unique_ptr<llvm::Module>(module)).create();
   ee->finalizeObject();
   ee->generateCodeForModule(module);
+  // save_machine_code("/home/jacques/Documents/mc.txt", ee->getTargetMachine(), module);
 
   uint64_t function_ptr = ee->getFunctionAddress(main_function->getName().str());
 
diff --git a/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp b/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
index 249c7b2238b..6830060009a 100644
--- a/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
+++ b/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
@@ -173,7 +173,8 @@ class BuildGraphIR : public LLVMBuildIRBody {
     builder.CreateCallPointer(
         (void *)BuildGraphIR::push_source_frame_on_stack,
         {context_ptr, node_info_frame_buf, builder.getVoidPtr((void *)source_info)},
-        builder.getVoidTy());
+        builder.getVoidTy(),
+        "Push source info on stack");
 
     llvm::Value *function_info_frame_buf = builder.CreateAllocaBytes_VoidPtr(
         sizeof(TextStackFrame));
@@ -181,7 +182,8 @@ class BuildGraphIR : public LLVMBuildIRBody {
                               {context_ptr,
                                function_info_frame_buf,
                                builder.getVoidPtr((void *)m_graph->name_ptr_of_node(node_id))},
-                              builder.getVoidTy());
+                              builder.getVoidTy(),
+                              "Push function name on stack");
   }
 
   void pop_stack_frames_for_node(CodeBuilder &builder, llvm::Value *context_ptr) const
@@ -189,8 +191,10 @@ class BuildGraphIR : public LLVMBuildIRBody {
     BLI_assert(context_ptr);
 
     for (uint i = 0; i < 2; i++) {
-      builder.CreateCallPointer(
-          (void *)BuildGraphIR::pop_frame_from_stack, {context_ptr}, builder.getVoidTy());
+      builder.CreateCallPointer((void *)BuildGraphIR::pop_frame_from_stack,
+                                {context_ptr},
+                                builder.getVoidTy(),
+                                "Pop stack frame");
     }
   }
 
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 796b7574cec..64ecbf60e14 100644
--- a/source/blender/functions/backends/llvm/ir_for_tuple_call.cpp
+++ b/source/blender/functions/backends/llvm/ir_for_tuple_call.cpp
@@ -34,8 +34,10 @@ static llvm::Value *build__stack_allocate_ExecutionContext(CodeBuilder &builder)
   llvm::Value *stack_ptr = builder.CreateAllocaBytes_VoidPtr(sizeof(ExecutionStack));
   llvm::Value *ctx_ptr = builder.CreateAllocaBytes_VoidPtr(sizeof(ExecutionContext));
 
-  builder.CreateCallPointer(
-      (void *)run__setup_ExecutionContext_in_buffer, {stack_ptr, ctx_ptr}, builder.getVoidTy());
+  builder.CreateCallPointer((void *)run__setup_ExecutionContext_in_buffer,
+                            {stack_ptr, ctx_ptr},
+                            builder.getVoidTy(),
+                            "Setup execution context in buffer");
 
   return ctx_ptr;
 }
@@ -159,7 +161,8 @@ class TupleCallLLVM : public LLVMBuildIRBody {
     builder.CreateCallPointer(
         (void *)run_TupleCallBody,
         {builder.getVoidPtr(m_tuple_call), tuple_in_data_ptr, tuple_out_data_ptr, context_ptr},
-        builder.getVoidTy());
+        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/llvm_types.cpp b/source/blender/functions/backends/llvm/llvm_types.cpp
index de04d34311b..c2e6826e0f9 100644
--- a/source/blender/functions/backends/llvm/llvm_types.cpp
+++ b/source/blender/functions/backends/llvm/llvm_types.cpp
@@ -90,14 +90,16 @@ llvm::Value *PointerLLVMTypeInfo::build_copy_ir(CodeBuilder &builder, llvm::Valu
 
   return builder.CreateCallPointer((void *)PointerLLVMTypeInfo::copy_value,
                                    copy_ftype,
-                                   {builder.getVoidPtr((void *)this), value});
+                                   {builder.getVoidPtr((void *)this), value},
+                                   "Copy value");
 }
 
 void PointerLLVMTypeInfo::build_free_ir(CodeBuilder &builder, llvm::Value *value) const
 {
   builder.CreateCallPointer((void *)PointerLLVMTypeInfo::free_value,
                             {builder.getVoidPtr((void *)this), value},
-                            builder.getVoidTy());
+                            builder.getVoidTy(),
+                            "Free value");
 }
 
 void PointerLLVMTypeInfo::build_store_ir__copy(CodeBuilder &builder,
diff --git a/source/blender/functions/frontends/data_flow_nodes/function_generation.cpp b/source/blender/functions/frontends/data_flow_nodes/function_generation.cpp
index e1255b67831..94da3d31b29 100644
--- a/source/blender/functions/frontends/data_flow_nodes/function_generation.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/function_generation.cpp
@@ -23,8 +23,8 @@ Optional<SharedFunction> generate_function(bNodeTree *btree)
   fgraph_add_DependenciesBody(fn, fgraph);
   fgraph_add_LLVMBuildIRBody(fn, fgraph);
 
-  fgraph_add_TupleCallBody(fn, fgraph);
-  // derive_TupleCallBody_from_LLVMBuildIRBody(fn, *(new llvm::LLVMContext()));
+  // fgraph_add_TupleCallBody(fn, fgraph);
+  derive_TupleCallBody_from_LLVMBuildIRBody(fn);
   return fn;
 }
 
diff --git a/source/blender/functions/functions/auto_vectorization.cpp b/source/blender/functions/functions/auto_vectorization.cpp
index 07011bc639f..3388237f8f9 100644
--- a/source/blender/functions/functions/auto_vectorization.cpp
+++ b/source/blender/functions/functions/auto_vectorization.cpp
@@ -112,8 +112,10 @@ class AutoVectorizationGen : public LLVMBuildIRBody {
     LLVMValues list_lengths;
     for (uint i = 0; i < m_input_info.size(); i++) {
       if (m_input_info[i].is_list) {
-        auto *length = builder.CreateCallPointer(
-            (void *)m_input_info[i].get_length_fn, {interface.get_input(i)}, builder.getInt32Ty());
+        auto *length = builder.CreateCallPointer((void *)m_input_info[i].get_length_fn,
+                                                 {interface.get_input(i)},
+                                                 builder.getInt32Ty(),
+                                                 "Get list length");
         list_lengths.append(length);
       }
     }
@@ -128,7 +130,8 @@ class AutoVectorizationGen : public LLVMBuildIRBody {
         uint stride = m_input_info[i].base_cpp_type->size_of_type();
         llvm::Value *data_ptr = builder.CreateCallPointer((void *)m_input_info[i].get_data_ptr_fn,
                                                           {interface.get_input(i)},
-                                                          builder.getVoidPtrTy());
+                                                          builder.getVoidPtrTy(),
+                                                          "Get list data pointer");
         llvm::Value *typed_data_ptr = builder.CastToPointerWithStride(data_ptr, stride);
         data_pointers.append(typed_data_ptr);
       }
@@ -145,9 +148,14 @@ class AutoVectorizationGen : public LLVMBuildIRBody {
       uint stride = m_output_info[i].base_cpp_type->size_of_type();
 
       llvm::Value *output_list = builder.CreateCallPointer(
-          (void *)m_output_info[i].get_new_list_fn, {length}, builder.getVoidPtrTy());
-      llvm::Value *data_ptr = builder.CreateCallPointer(
-          (void *)m_output_info[i].get_data_ptr_fn, {output_list}, builder.getVoidPtrTy());
+          (void *)m_output_info[i].get_new_list_fn,
+          {length},
+          builder.getVoidPtrTy(),
+          "Create new list with length");
+      llvm::Value *data_ptr = builder.CreateCallPointer((void *)m_output_info[i].get_data_ptr_fn,
+                                                        {output_list},
+                                                        builder.getVoidPtrTy(),
+                                                        "Get list data pointer");
       llvm::Value *typed_data_ptr = builder.CastToPointerWithStride(data_ptr, stride);
       data_pointers.append(typed_data_ptr);
       interface.set_output(i, output_list);



More information about the Bf-blender-cvs mailing list