[Bf-blender-cvs] [d2e2ec7] object_nodes: Use load/store for float3 and float4 to generate a bit nicer code.

Lukas Tönne noreply at git.blender.org
Tue Jun 21 17:45:38 CEST 2016


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);
 	}
 };




More information about the Bf-blender-cvs mailing list