Commit: d2e2ec766fd6318de1f6c1740748110dd5d50539
Author: Lukas Tönne
Date:   Tue Jun 21 17:42:27 2016 +0200
Branches: object_nodes
https://developer.blender.org/rBd2e2ec766fd6318de1f6c1740748110dd5d50539

Use load/store for float3 and float4 to generate a bit nicer code.

It's unclear if the same can be done for larger aggregate types like matrix44.

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

M       source/blender/blenvm/llvm/llvm_types.h

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

diff --git a/source/blender/blenvm/llvm/llvm_types.h 
b/source/blender/blenvm/llvm/llvm_types.h
index 37ad5a4..5372595 100644
--- a/source/blender/blenvm/llvm/llvm_types.h
+++ b/source/blender/blenvm/llvm/llvm_types.h
@@ -263,16 +263,16 @@ struct BVMTypeLLVMTraits<BVM_FLOAT3> {
        static void copy_value(BuilderT &builder, llvm::Value *ptr, llvm::Value 
*value)
        {
                using namespace llvm;
-               Constant *size = builder.getInt32(sizeof(value_type));
-               builder.CreateMemCpy(ptr, value, size, 0);
+               Value *ivalue = builder.CreateLoad(value);
+               builder.CreateStore(ivalue, ptr);
        }
        
        template <typename BuilderT>
        static void set_zero(BuilderT &builder, llvm::Value *ptr)
        {
                using namespace llvm;
-               Constant *size = builder.getInt32(sizeof(value_type));
-               builder.CreateMemSet(ptr, builder.getInt8(0), size, 0);
+               Constant *zero = 
ConstantAggregateZero::get(TypeBuilder<value_type, 
false>::get(builder.getContext()));
+               builder.CreateStore(zero, ptr);
        }
 };
 
@@ -287,16 +287,16 @@ struct BVMTypeLLVMTraits<BVM_FLOAT4> {
        static void copy_value(BuilderT &builder, llvm::Value *ptr, llvm::Value 
*value)
        {
                using namespace llvm;
-               Constant *size = builder.getInt32(sizeof(value_type));
-               builder.CreateMemCpy(ptr, value, size, 0);
+               Value *ivalue = builder.CreateLoad(value);
+               builder.CreateStore(ivalue, ptr);
        }
        
        template <typename BuilderT>
        static void set_zero(BuilderT &builder, llvm::Value *ptr)
        {
                using namespace llvm;
-               Constant *size = builder.getInt32(sizeof(value_type));
-               builder.CreateMemSet(ptr, builder.getInt8(0), size, 0);
+               Constant *zero = 
ConstantAggregateZero::get(TypeBuilder<value_type, 
false>::get(builder.getContext()));
+               builder.CreateStore(zero, ptr);
        }
 };

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to