[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