[Bf-blender-cvs] [9ba1fce6086] functions: use specialized llvm type info for pointer references
Jacques Lucke
noreply at git.blender.org
Fri Sep 6 16:55:40 CEST 2019
Commit: 9ba1fce60862aa0983f7cd925294a5c195e27b46
Author: Jacques Lucke
Date: Fri Sep 6 11:37:25 2019 +0200
Branches: functions
https://developer.blender.org/rB9ba1fce60862aa0983f7cd925294a5c195e27b46
use specialized llvm type info for pointer references
===================================================================
M source/blender/functions/backends/llvm/llvm_type_info.hpp
M source/blender/functions/types/external.cpp
===================================================================
diff --git a/source/blender/functions/backends/llvm/llvm_type_info.hpp b/source/blender/functions/backends/llvm/llvm_type_info.hpp
index f1feef827ae..a1794710cbc 100644
--- a/source/blender/functions/backends/llvm/llvm_type_info.hpp
+++ b/source/blender/functions/backends/llvm/llvm_type_info.hpp
@@ -136,6 +136,51 @@ class PointerLLVMTypeInfo : public LLVMTypeInfo {
llvm::Value *build_load_ir__relocate(CodeBuilder &builder, llvm::Value *address) const override;
};
+/**
+ * Use this when the pointer is just referenced is owned by someone else.
+ */
+class PointerRefLLVMTypeInfo : public LLVMTypeInfo {
+ llvm::Type *get_type(llvm::LLVMContext &context) const override
+ {
+ return llvm::Type::getInt8PtrTy(context);
+ }
+
+ llvm::Value *build_copy_ir(CodeBuilder &UNUSED(builder), llvm::Value *value) const override
+ {
+ return value;
+ }
+
+ void build_free_ir(CodeBuilder &UNUSED(builder), llvm::Value *UNUSED(value)) const override
+ {
+ }
+
+ void build_store_ir__copy(CodeBuilder &builder,
+ llvm::Value *value,
+ llvm::Value *address) const override
+ {
+ auto *addr = builder.CastToBytePtr(address);
+ builder.CreateStore(value, addr);
+ }
+
+ void build_store_ir__relocate(CodeBuilder &builder,
+ llvm::Value *value,
+ llvm::Value *address) const override
+ {
+ this->build_store_ir__copy(builder, value, address);
+ }
+
+ llvm::Value *build_load_ir__copy(CodeBuilder &builder, llvm::Value *address) const override
+ {
+ auto *addr = builder.CastToBytePtr(address);
+ return builder.CreateLoad(addr);
+ }
+
+ llvm::Value *build_load_ir__relocate(CodeBuilder &builder, llvm::Value *address) const override
+ {
+ return this->build_load_ir__copy(builder, address);
+ }
+};
+
/**
* The type has to implement a clone() method.
*/
diff --git a/source/blender/functions/types/external.cpp b/source/blender/functions/types/external.cpp
index 56c21b10f81..97f15f1df9d 100644
--- a/source/blender/functions/types/external.cpp
+++ b/source/blender/functions/types/external.cpp
@@ -15,8 +15,7 @@ void INIT_external(Vector<Type *> &types_to_free)
{
TYPE_object = new Type("Object");
TYPE_object->add_extension<CPPTypeInfoForType<Object *>>();
- TYPE_object->add_extension<PointerLLVMTypeInfo>([](void *value) { return value; },
- [](void *UNUSED(value)) {});
+ TYPE_object->add_extension<PointerRefLLVMTypeInfo>();
TYPE_object_list = new_list_type(TYPE_object);
More information about the Bf-blender-cvs
mailing list