[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