From: Marek Olšák <marek.ol...@amd.com>

Call site attributes are used since LLVM 4.0.

This also reverts commit b19caecbd6f310c1663b0cfe483d113ae3bd5fe2
"radeon/ac: fix intrinsic version check", because this is the correct fix.
---
 src/amd/common/ac_llvm_build.c           | 6 +++---
 src/gallium/drivers/radeonsi/si_shader.c | 6 ++++--
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c
index acda5e2..20c6eb8 100644
--- a/src/amd/common/ac_llvm_build.c
+++ b/src/amd/common/ac_llvm_build.c
@@ -686,21 +686,21 @@ ac_build_buffer_load(struct ac_llvm_context *ctx,
                }
 
                snprintf(name, sizeof(name), "llvm.amdgcn.buffer.load.%s",
                         type_names[func]);
 
                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. */
-                                         readonly_memory ?
+                                         readonly_memory && HAVE_LLVM >= 
0x0400 ?
                                                  AC_FUNC_ATTR_READNONE :
                                                  AC_FUNC_ATTR_READONLY);
        } else {
                LLVMValueRef args[] = {
                        LLVMBuildBitCast(ctx->builder, rsrc, ctx->v16i8, ""),
                        voffset ? voffset : vindex,
                        soffset,
                        LLVMConstInt(ctx->i32, inst_offset, 0),
                        LLVMConstInt(ctx->i32, voffset ? 1 : 0, 0), // offen
                        LLVMConstInt(ctx->i32, vindex ? 1 : 0, 0), //idxen
@@ -729,36 +729,36 @@ ac_build_buffer_load(struct ac_llvm_context *ctx,
                                          ARRAY_SIZE(args), 
AC_FUNC_ATTR_READONLY);
        }
 }
 
 LLVMValueRef ac_build_buffer_load_format(struct ac_llvm_context *ctx,
                                         LLVMValueRef rsrc,
                                         LLVMValueRef vindex,
                                         LLVMValueRef voffset,
                                         bool readonly_memory)
 {
-       if (HAVE_LLVM >= 0x0400) {
+       if (HAVE_LLVM >= 0x0309) {
                LLVMValueRef args [] = {
                        LLVMBuildBitCast(ctx->builder, rsrc, ctx->v4i32, ""),
                        vindex,
                        voffset,
                        LLVMConstInt(ctx->i1, 0, 0), /* glc */
                        LLVMConstInt(ctx->i1, 0, 0), /* slc */
                };
 
                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. */
-                                         readonly_memory ?
+                                         readonly_memory && HAVE_LLVM >= 
0x0400 ?
                                                  AC_FUNC_ATTR_READNONE :
                                                  AC_FUNC_ATTR_READONLY);
        }
 
        LLVMValueRef args[] = {
                rsrc,
                voffset,
                vindex,
        };
        return ac_build_intrinsic(ctx, "llvm.SI.vs.load.input",
diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index 319c0c8..4e133ec 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -3435,27 +3435,29 @@ static void load_fetch_args(
 
                        image_append_args(ctx, emit_data, target, false, false);
                }
        }
 }
 
 static unsigned get_load_intr_attribs(bool readonly_memory)
 {
        /* READNONE means writes can't affect it, while READONLY means that
         * writes can affect it. */
-       return readonly_memory ? LP_FUNC_ATTR_READNONE :
+       return readonly_memory && HAVE_LLVM >= 0x0400 ?
+                                LP_FUNC_ATTR_READNONE :
                                 LP_FUNC_ATTR_READONLY;
 }
 
 static unsigned get_store_intr_attribs(bool writeonly_memory)
 {
-       return writeonly_memory ? LP_FUNC_ATTR_INACCESSIBLE_MEM_ONLY :
+       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 readonly_memory)
 {
        const struct tgsi_full_instruction *inst = emit_data->inst;
        struct gallivm_state *gallivm = &ctx->gallivm;
        LLVMBuilderRef builder = gallivm->builder;
-- 
2.7.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to