Re: [Mesa-dev] [PATCH 1/2] amd/common: import get_{load, store}_intr_attribs() from RadeonSI
On 01/10/2018 02:24 PM, Grazvydas Ignotas wrote: On Wed, Jan 10, 2018 at 1:57 PM, Samuel Pitoisetwrote: Signed-off-by: Samuel Pitoiset --- src/amd/common/ac_llvm_build.c| 12 ++- src/amd/common/ac_llvm_util.c | 18 src/amd/common/ac_llvm_util.h | 6 ++ src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c | 26 +-- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c index efc6fa12e5..07044142b0 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.c b/src/amd/common/ac_llvm_util.c index 429904c040..976d6540a1 100644 --- a/src/amd/common/ac_llvm_util.c +++ b/src/amd/common/ac_llvm_util.c @@ -240,3 +240,21 @@ ac_llvm_add_target_dep_function_attr(LLVMValueRef F, snprintf(str, sizeof(str), "%i", value); LLVMAddTargetDependentFunctionAttr(F, name, str); } + +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; +} + +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; +} What about putting such tiny functions in the header as static inline to avoid function call overheads? I can do that, yes. Gražvydas ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 1/2] amd/common: import get_{load, store}_intr_attribs() from RadeonSI
On Wed, Jan 10, 2018 at 1:57 PM, Samuel Pitoisetwrote: > Signed-off-by: Samuel Pitoiset > --- > src/amd/common/ac_llvm_build.c| 12 ++- > src/amd/common/ac_llvm_util.c | 18 > src/amd/common/ac_llvm_util.h | 6 ++ > src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c | 26 > +-- > 4 files changed, 31 insertions(+), 31 deletions(-) > > diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c > index efc6fa12e5..07044142b0 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.c b/src/amd/common/ac_llvm_util.c > index 429904c040..976d6540a1 100644 > --- a/src/amd/common/ac_llvm_util.c > +++ b/src/amd/common/ac_llvm_util.c > @@ -240,3 +240,21 @@ ac_llvm_add_target_dep_function_attr(LLVMValueRef F, > snprintf(str, sizeof(str), "%i", value); > LLVMAddTargetDependentFunctionAttr(F, name, str); > } > + > +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; > +} > + > +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; > +} What about putting such tiny functions in the header as static inline to avoid function call overheads? Gražvydas ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 1/2] amd/common: import get_{load, store}_intr_attribs() from RadeonSI
Signed-off-by: Samuel Pitoiset--- src/amd/common/ac_llvm_build.c| 12 ++- src/amd/common/ac_llvm_util.c | 18 src/amd/common/ac_llvm_util.h | 6 ++ src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c | 26 +-- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c index efc6fa12e5..07044142b0 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.c b/src/amd/common/ac_llvm_util.c index 429904c040..976d6540a1 100644 --- a/src/amd/common/ac_llvm_util.c +++ b/src/amd/common/ac_llvm_util.c @@ -240,3 +240,21 @@ ac_llvm_add_target_dep_function_attr(LLVMValueRef F, snprintf(str, sizeof(str), "%i", value); LLVMAddTargetDependentFunctionAttr(F, name, str); } + +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; +} + +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; +} diff --git a/src/amd/common/ac_llvm_util.h b/src/amd/common/ac_llvm_util.h index 7c8b6b0a13..79c6029436 100644 --- a/src/amd/common/ac_llvm_util.h +++ b/src/amd/common/ac_llvm_util.h @@ -81,6 +81,12 @@ void ac_llvm_add_target_dep_function_attr(LLVMValueRef F, const char *name, int value); +unsigned +ac_get_load_intr_attribs(bool can_speculate); + +unsigned +ac_get_store_intr_attribs(bool writeonly_memory); + #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 fe0cfcef99..d5c9470974 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)); +