[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