[Bf-blender-cvs] [36f0132394e] functions: llvm does not permit void*, so replace all uses with i8*
Jacques Lucke
noreply at git.blender.org
Wed Jul 31 16:20:55 CEST 2019
Commit: 36f0132394e40faf55d4a07bb72697c4d65f92ca
Author: Jacques Lucke
Date: Wed Jul 31 14:24:44 2019 +0200
Branches: functions
https://developer.blender.org/rB36f0132394e40faf55d4a07bb72697c4d65f92ca
llvm does not permit void*, so replace all uses with i8*
===================================================================
M source/blender/functions/backends/llvm/builder.hpp
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/llvm/llvm_types.cpp
M source/blender/functions/functions/auto_vectorization.cpp
===================================================================
diff --git a/source/blender/functions/backends/llvm/builder.hpp b/source/blender/functions/backends/llvm/builder.hpp
index 07a07eedbe5..ae0601322cb 100644
--- a/source/blender/functions/backends/llvm/builder.hpp
+++ b/source/blender/functions/backends/llvm/builder.hpp
@@ -76,14 +76,13 @@ class CodeBuilder {
return m_builder.getVoidTy();
}
- llvm::Type *getVoidPtrTy()
+ /**
+ * LLVM does not permit void*, so use int8* instead.
+ * https://llvm.org/docs/LangRef.html#pointer-type
+ */
+ llvm::Type *getAnyPtrTy()
{
- return this->getVoidTy()->getPointerTo();
- }
-
- llvm::Type *getVoidPtrPtrTy()
- {
- return this->getVoidPtrTy()->getPointerTo();
+ return this->getInt8PtrTy();
}
llvm::Type *getInt8Ty()
@@ -124,9 +123,9 @@ class CodeBuilder {
return llvm::UndefValue::get(type);
}
- llvm::Value *getVoidPtr(void *ptr)
+ template<typename T> llvm::Value *getAnyPtr(T *ptr)
{
- return this->getPtr(ptr, this->getVoidPtrTy());
+ return this->getPtr((void *)ptr, this->getAnyPtrTy());
}
llvm::Value *getPtr(void *ptr, llvm::Type *ptr_type)
@@ -270,11 +269,11 @@ class CodeBuilder {
return m_builder.CreateURem(a, b);
}
- llvm::Value *CreateAllocaBytes_VoidPtr(uint amount)
+ llvm::Value *CreateAllocaBytes_AnyPtr(uint amount)
{
llvm::Type *size_type = this->getFixedSizeType(amount);
llvm::Value *addr = m_builder.CreateAlloca(size_type);
- return this->CastToVoidPtr(addr);
+ return this->CastToAnyPtr(addr);
}
llvm::Value *CreateAllocaBytes_BytePtr(uint amount)
@@ -300,9 +299,9 @@ class CodeBuilder {
return this->CastToPointerOf(addr, stride_type);
}
- llvm::Value *CastToVoidPtr(llvm::Value *addr)
+ llvm::Value *CastToAnyPtr(llvm::Value *addr)
{
- return m_builder.CreatePointerCast(addr, this->getVoidPtrTy());
+ return m_builder.CreatePointerCast(addr, this->getAnyPtrTy());
}
llvm::Value *CastToBytePtr(llvm::Value *addr)
diff --git a/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp b/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
index 34952834655..79415211d3a 100644
--- a/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
+++ b/source/blender/functions/backends/llvm/fgraph_ir_generation.cpp
@@ -165,20 +165,19 @@ class BuildGraphIR : public LLVMBuildIRBody {
BLI_assert(context_ptr);
SourceInfo *source_info = m_graph->source_info_of_node(node_id);
- llvm::Value *node_info_frame_buf = builder.CreateAllocaBytes_VoidPtr(
+ llvm::Value *node_info_frame_buf = builder.CreateAllocaBytes_AnyPtr(
sizeof(SourceInfoStackFrame));
- builder.CreateCallPointer(
- (void *)BuildGraphIR::push_source_frame_on_stack,
- {context_ptr, node_info_frame_buf, builder.getVoidPtr((void *)source_info)},
- builder.getVoidTy(),
- "Push source info on stack");
+ builder.CreateCallPointer((void *)BuildGraphIR::push_source_frame_on_stack,
+ {context_ptr, node_info_frame_buf, builder.getAnyPtr(source_info)},
+ builder.getVoidTy(),
+ "Push source info on stack");
- llvm::Value *function_info_frame_buf = builder.CreateAllocaBytes_VoidPtr(
+ llvm::Value *function_info_frame_buf = builder.CreateAllocaBytes_AnyPtr(
sizeof(TextStackFrame));
builder.CreateCallPointer((void *)BuildGraphIR::push_text_frame_on_stack,
{context_ptr,
function_info_frame_buf,
- builder.getVoidPtr((void *)m_graph->name_ptr_of_node(node_id))},
+ builder.getAnyPtr(m_graph->name_ptr_of_node(node_id))},
builder.getVoidTy(),
"Push function name on stack");
}
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 653a9737706..cba6ac9601a 100644
--- a/source/blender/functions/backends/llvm/ir_for_tuple_call.cpp
+++ b/source/blender/functions/backends/llvm/ir_for_tuple_call.cpp
@@ -31,8 +31,8 @@ static void run__setup_ExecutionContext_in_buffer(void *stack_ptr, void *ctx_ptr
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));
+ llvm::Value *stack_ptr = builder.CreateAllocaBytes_AnyPtr(sizeof(ExecutionStack));
+ llvm::Value *ctx_ptr = builder.CreateAllocaBytes_AnyPtr(sizeof(ExecutionContext));
builder.CreateCallPointer((void *)run__setup_ExecutionContext_in_buffer,
{stack_ptr, ctx_ptr},
@@ -90,7 +90,7 @@ class TupleCallLLVM : public LLVMBuildIRBody {
Vector<llvm::Type *> input_types = builder.types_of_values(interface.inputs());
if (settings.maintain_stack()) {
- input_types.append(builder.getVoidPtrTy());
+ input_types.append(builder.getAnyPtrTy());
}
Vector<llvm::Type *> output_types;
@@ -158,13 +158,11 @@ class TupleCallLLVM : public LLVMBuildIRBody {
}
/* Execute 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");
+ builder.CreateCallPointer(
+ (void *)run_TupleCallBody,
+ {builder.getAnyPtr(&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 6f6c3ab7920..2b27b43adcb 100644
--- a/source/blender/functions/backends/llvm/ir_to_tuple_call.cpp
+++ b/source/blender/functions/backends/llvm/ir_to_tuple_call.cpp
@@ -30,7 +30,7 @@ static llvm::Function *insert_tuple_call_function(SharedFunction &fn, llvm::Modu
LLVMBuildIRBody &body = fn->body<LLVMBuildIRBody>();
llvm::Type *void_ty = llvm::Type::getVoidTy(context);
- llvm::Type *void_ptr_ty = void_ty->getPointerTo();
+ llvm::Type *any_ptr_ty = llvm::Type::getInt8PtrTy(context);
llvm::Type *byte_ptr_ty = llvm::Type::getInt8PtrTy(context);
llvm::Type *int_ptr_ty = llvm::Type::getInt32PtrTy(context);
@@ -39,7 +39,7 @@ static llvm::Function *insert_tuple_call_function(SharedFunction &fn, llvm::Modu
int_ptr_ty,
byte_ptr_ty,
int_ptr_ty,
- void_ptr_ty,
+ any_ptr_ty,
};
llvm::FunctionType *function_type = llvm::FunctionType::get(
diff --git a/source/blender/functions/backends/llvm/llvm_types.cpp b/source/blender/functions/backends/llvm/llvm_types.cpp
index fa1277d6829..93d01c71394 100644
--- a/source/blender/functions/backends/llvm/llvm_types.cpp
+++ b/source/blender/functions/backends/llvm/llvm_types.cpp
@@ -63,7 +63,7 @@ llvm::Value *PackedLLVMTypeInfo::build_load_ir__copy(CodeBuilder &builder,
llvm::Type *PointerLLVMTypeInfo::get_type(llvm::LLVMContext &context) const
{
- return llvm::Type::getVoidTy(context)->getPointerTo();
+ return llvm::Type::getInt8PtrTy(context);
}
void *PointerLLVMTypeInfo::copy_value(PointerLLVMTypeInfo *info, void *value)
@@ -83,19 +83,19 @@ void *PointerLLVMTypeInfo::default_value(PointerLLVMTypeInfo *info)
llvm::Value *PointerLLVMTypeInfo::build_copy_ir(CodeBuilder &builder, llvm::Value *value) const
{
- auto *void_ptr_ty = builder.getVoidPtrTy();
- auto *copy_ftype = llvm::FunctionType::get(void_ptr_ty, {void_ptr_ty, void_ptr_ty}, false);
+ auto *any_ptr_ty = builder.getAnyPtrTy();
+ auto *copy_ftype = llvm::FunctionType::get(any_ptr_ty, {any_ptr_ty, any_ptr_ty}, false);
return builder.CreateCallPointer((void *)PointerLLVMTypeInfo::copy_value,
copy_ftype,
- {builder.getVoidPtr((void *)this), value},
+ {builder.getAnyPtr(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.getAnyPtr(this), value},
builder.getVoidTy(),
"Free value");
}
@@ -112,7 +112,7 @@ void PointerLLVMTypeInfo::build_store_ir__relocate(CodeBuilder &builder,
llvm::Value *value,
llvm::Value *address) const
{
- auto *addr = builder.CastToPointerOf(address, builder.getVoidPtrTy());
+ auto *addr = builder.CastToPointerOf(address, builder.getAnyPtrTy());
builder.CreateStore(value, addr);
}
@@ -127,7 +127,7 @@ llvm::Value *PointerLLVMTypeInfo::build_load_ir__copy(CodeBuilder &builder,
llvm::Value *PointerLLVMTypeInfo::build_load_ir__relocate(CodeBuilder &builder,
llvm::Value *address) const
{
- auto *addr = builder.CastToPointerOf(address, builder.getVoidPtrTy());
+ auto *addr = builder.CastToPointerOf(address, builder.getAnyPtrTy());
return builder.CreateLoad(addr);
}
diff --git a/source/blender/functions/functions/auto_vectorization.cpp b/source/blender/functions/functions/auto_vectorization.cpp
index d5a92098302..1cf2d863b48 100644
--- a/source/blender/functions/functions/auto_vectorization.cpp
+++ b/source/blender/functions/functions/auto_vectorization.cpp
@@ -133,7 +133,7 @@ class AutoVectorizationGen : public LLVMBuildIRBody {
uint stride = m_input_info[i].base_cpp_type->size();
llvm::Value *data
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list