From: Samuel Pitoiset Date: Wed, 10 Jan 2018 11:57:19 +0000 (+0100) Subject: amd/common: import get_{load,store}_intr_attribs() from RadeonSI X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7239e265ebe200891f161a07337cd31a92bf6ff8;p=mesa.git amd/common: import get_{load,store}_intr_attribs() from RadeonSI v2: move those helpers to the header and use static inline Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen (v1) --- diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c index efc6fa12e56..07044142b0b 100644 --- a/src/amd/common/ac_llvm_build.c +++ b/src/amd/common/ac_llvm_build.c @@ -983,11 +983,7 @@ ac_build_buffer_load(struct ac_llvm_context *ctx, return ac_build_intrinsic(ctx, name, types[func], args, ARRAY_SIZE(args), - /* READNONE means writes can't affect it, while - * READONLY means that writes can affect it. */ - can_speculate && HAVE_LLVM >= 0x0400 ? - AC_FUNC_ATTR_READNONE : - AC_FUNC_ATTR_READONLY); + ac_get_load_intr_attribs(can_speculate)); } LLVMValueRef ac_build_buffer_load_format(struct ac_llvm_context *ctx, @@ -1007,11 +1003,7 @@ LLVMValueRef ac_build_buffer_load_format(struct ac_llvm_context *ctx, return ac_build_intrinsic(ctx, "llvm.amdgcn.buffer.load.format.v4f32", ctx->v4f32, args, ARRAY_SIZE(args), - /* READNONE means writes can't affect it, while - * READONLY means that writes can affect it. */ - can_speculate && HAVE_LLVM >= 0x0400 ? - AC_FUNC_ATTR_READNONE : - AC_FUNC_ATTR_READONLY); + ac_get_load_intr_attribs(can_speculate)); } /** diff --git a/src/amd/common/ac_llvm_util.h b/src/amd/common/ac_llvm_util.h index 7c8b6b0a130..61bcc4e54ed 100644 --- a/src/amd/common/ac_llvm_util.h +++ b/src/amd/common/ac_llvm_util.h @@ -81,6 +81,24 @@ void ac_llvm_add_target_dep_function_attr(LLVMValueRef F, const char *name, int value); +static inline unsigned +ac_get_load_intr_attribs(bool can_speculate) +{ + /* READNONE means writes can't affect it, while READONLY means that + * writes can affect it. */ + return can_speculate && HAVE_LLVM >= 0x0400 ? + AC_FUNC_ATTR_READNONE : + AC_FUNC_ATTR_READONLY; +} + +static inline unsigned +ac_get_store_intr_attribs(bool writeonly_memory) +{ + return writeonly_memory && HAVE_LLVM >= 0x0400 ? + AC_FUNC_ATTR_INACCESSIBLE_MEM_ONLY : + AC_FUNC_ATTR_WRITEONLY; +} + #ifdef __cplusplus } #endif diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c b/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c index fe0cfcef997..d5c9470974a 100644 --- a/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c +++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c @@ -390,22 +390,6 @@ static void load_fetch_args( } } -static unsigned get_load_intr_attribs(bool can_speculate) -{ - /* READNONE means writes can't affect it, while READONLY means that - * writes can affect it. */ - return can_speculate && HAVE_LLVM >= 0x0400 ? - LP_FUNC_ATTR_READNONE : - LP_FUNC_ATTR_READONLY; -} - -static unsigned get_store_intr_attribs(bool writeonly_memory) -{ - return writeonly_memory && HAVE_LLVM >= 0x0400 ? - LP_FUNC_ATTR_INACCESSIBLE_MEM_ONLY : - LP_FUNC_ATTR_WRITEONLY; -} - static void load_emit_buffer(struct si_shader_context *ctx, struct lp_build_emit_data *emit_data, bool can_speculate, bool allow_smem) @@ -586,7 +570,7 @@ static void load_emit( lp_build_intrinsic( builder, "llvm.amdgcn.buffer.load.format.v4f32", emit_data->dst_type, emit_data->args, emit_data->arg_count, - get_load_intr_attribs(can_speculate)); + ac_get_load_intr_attribs(can_speculate)); } else { ac_get_image_intr_name("llvm.amdgcn.image.load", emit_data->dst_type, /* vdata */ @@ -598,7 +582,7 @@ static void load_emit( lp_build_intrinsic( builder, intrinsic_name, emit_data->dst_type, emit_data->args, emit_data->arg_count, - get_load_intr_attribs(can_speculate)); + ac_get_load_intr_attribs(can_speculate)); } } @@ -734,7 +718,7 @@ static void store_emit_buffer( lp_build_intrinsic( builder, intrinsic_name, emit_data->dst_type, emit_data->args, emit_data->arg_count, - get_store_intr_attribs(writeonly_memory)); + ac_get_store_intr_attribs(writeonly_memory)); } } @@ -798,7 +782,7 @@ static void store_emit( builder, "llvm.amdgcn.buffer.store.format.v4f32", emit_data->dst_type, emit_data->args, emit_data->arg_count, - get_store_intr_attribs(writeonly_memory)); + ac_get_store_intr_attribs(writeonly_memory)); } else { ac_get_image_intr_name("llvm.amdgcn.image.store", LLVMTypeOf(emit_data->args[0]), /* vdata */ @@ -810,7 +794,7 @@ static void store_emit( lp_build_intrinsic( builder, intrinsic_name, emit_data->dst_type, emit_data->args, emit_data->arg_count, - get_store_intr_attribs(writeonly_memory)); + ac_get_store_intr_attribs(writeonly_memory)); } }