<div dir="ltr"><div>Reviewed-by: Marek Olšák <<a href="mailto:marek.olsak@amd.com">marek.olsak@amd.com</a>></div><div><br></div><div>Marek<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jun 18, 2019 at 12:20 PM Haehnle, Nicolai <<a href="mailto:Nicolai.Haehnle@amd.com">Nicolai.Haehnle@amd.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Makes sense to me.<br>
<br>
Acked-by: Nicolai Hähnle <<a href="mailto:nicolai.haehnle@amd.com" target="_blank">nicolai.haehnle@amd.com</a>><br>
<br>
-----Original Message-----<br>
From: Connor Abbott <<a href="mailto:cwabbott0@gmail.com" target="_blank">cwabbott0@gmail.com</a>> <br>
Sent: Dienstag, 18. Juni 2019 15:21<br>
To: <a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.freedesktop.org</a><br>
Cc: Marek Olšák <<a href="mailto:maraeo@gmail.com" target="_blank">maraeo@gmail.com</a>>; Haehnle, Nicolai <<a href="mailto:Nicolai.Haehnle@amd.com" target="_blank">Nicolai.Haehnle@amd.com</a>>; Connor Abbott <<a href="mailto:cwabbott0@gmail.com" target="_blank">cwabbott0@gmail.com</a>><br>
Subject: [PATCH] ac,radeonsi: Always mark buffer stores as inaccessiblememonly<br>
<br>
inaccessiblememonly means that it doesn't modify memory accesible via normal LLVM pointers. This lets LLVM's dead store elimination, memcpy forwarding, etc. ignore functions with this attribute. We don't represent descriptors as pointers, so this property is always true of buffer and image stores. There are plans to represent descriptors via pointers, but this just means that now nothing is inaccessiblememonly, as LLVM will then understand loads/stores via its usual alias analysis.<br>
<br>
Radeonsi was mistakenly only setting it if the driver could prove that there were no reads, and then it was cargo-culted into ac_llvm_build and ac_llvm_to_nir. Rip it out of everything.<br>
<br>
statistics with nir enabled:<br>
<br>
Totals from affected shaders:<br>
SGPRS: 152 -> 152 (0.00 %)<br>
VGPRS: 128 -> 132 (3.12 %)<br>
Spilled SGPRs: 0 -> 0 (0.00 %)<br>
Spilled VGPRs: 0 -> 0 (0.00 %)<br>
Private memory VGPRs: 0 -> 0 (0.00 %)<br>
Scratch size: 0 -> 0 (0.00 %) dwords per thread Code Size: 9324 -> 9244 (-0.86 %) bytes<br>
LDS: 2 -> 2 (0.00 %) blocks<br>
Max Waves: 17 -> 17 (0.00 %)<br>
Wait states: 0 -> 0 (0.00 %)<br>
<br>
The only difference was a manhattan31 shader.<br>
<br>
Acked-by: Timothy Arceri <<a href="mailto:tarceri@itsqueeze.com" target="_blank">tarceri@itsqueeze.com</a>><br>
---<br>
<br>
I included this in<br>
<a href="https://gitlab.freedesktop.org/mesa/mesa/merge_requests/1018" rel="noreferrer" target="_blank">https://gitlab.freedesktop.org/mesa/mesa/merge_requests/1018</a> since it was related to my goal of making sure that the NIR code added all the attributes that the TGSI code does for buffer stores/loads, but I'm sending it here for visibility since it affects the old paths too and involves some LLVM knowledge.<br>
<br>
 src/amd/common/ac_llvm_build.c                | 61 +++++++------------<br>
 src/amd/common/ac_llvm_build.h                | 16 ++---<br>
 src/amd/common/ac_llvm_util.h                 |  7 ---<br>
 src/amd/common/ac_nir_to_llvm.c               | 12 ++--<br>
 src/amd/vulkan/radv_nir_to_llvm.c             | 20 +++---<br>
 .../radeonsi/si_compute_prim_discard.c        |  4 +-<br>
 src/gallium/drivers/radeonsi/si_shader.c      | 26 ++++----<br>
 .../drivers/radeonsi/si_shader_tgsi_mem.c     |  8 +--<br>
 8 files changed, 61 insertions(+), 93 deletions(-)<br>
<br>
diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c index b93fdde023e..1e6247ad72e 100644<br>
--- a/src/amd/common/ac_llvm_build.c<br>
+++ b/src/amd/common/ac_llvm_build.c<br>
@@ -1116,7 +1116,6 @@ ac_build_llvm7_buffer_store_common(struct ac_llvm_context *ctx,<br>
                                   unsigned num_channels,<br>
                                   bool glc,<br>
                                   bool slc,<br>
-                                  bool writeonly_memory,<br>
                                   bool use_format)<br>
 {<br>
        LLVMValueRef args[] = {<br>
@@ -1141,7 +1140,7 @@ ac_build_llvm7_buffer_store_common(struct ac_llvm_context *ctx,<br>
        }<br>
<br>
        ac_build_intrinsic(ctx, name, ctx->voidt, args, ARRAY_SIZE(args),<br>
-                          ac_get_store_intr_attribs(writeonly_memory));<br>
+                          AC_FUNC_ATTR_INACCESSIBLE_MEM_ONLY);<br>
 }<br>
<br>
 static void<br>
@@ -1155,7 +1154,6 @@ ac_build_llvm8_buffer_store_common(struct ac_llvm_context *ctx,<br>
                                   LLVMTypeRef return_channel_type,<br>
                                   bool glc,<br>
                                   bool slc,<br>
-                                  bool writeonly_memory,<br>
                                   bool use_format,<br>
                                   bool structurized)<br>
 {<br>
@@ -1184,7 +1182,7 @@ ac_build_llvm8_buffer_store_common(struct ac_llvm_context *ctx,<br>
        }<br>
<br>
        ac_build_intrinsic(ctx, name, ctx->voidt, args, idx,<br>
-                          ac_get_store_intr_attribs(writeonly_memory));<br>
+                          AC_FUNC_ATTR_INACCESSIBLE_MEM_ONLY);<br>
 }<br>
<br>
 void<br>
@@ -1195,18 +1193,17 @@ ac_build_buffer_store_format(struct ac_llvm_context *ctx,<br>
                             LLVMValueRef voffset,<br>
                             unsigned num_channels,<br>
                             bool glc,<br>
-                            bool slc,<br>
-                            bool writeonly_memory)<br>
+                            bool slc)<br>
 {<br>
        if (HAVE_LLVM >= 0x800) {<br>
                ac_build_llvm8_buffer_store_common(ctx, rsrc, data, vindex,<br>
                                                   voffset, NULL, num_channels,<br>
                                                   ctx->f32, glc, slc,<br>
-                                                  writeonly_memory, true, true);<br>
+                                                  true, true);<br>
        } else {<br>
                ac_build_llvm7_buffer_store_common(ctx, rsrc, data, vindex, voffset,<br>
                                                   num_channels, glc, slc,<br>
-                                                  writeonly_memory, true);<br>
+                                                  true);<br>
        }<br>
 }<br>
<br>
@@ -1224,7 +1221,6 @@ ac_build_buffer_store_dword(struct ac_llvm_context *ctx,<br>
                            unsigned inst_offset,<br>
                            bool glc,<br>
                            bool slc,<br>
-                           bool writeonly_memory,<br>
                            bool swizzle_enable_hint)<br>
 {<br>
        /* Split 3 channel stores, because only LLVM 9+ support 3-channel @@ -1240,11 +1236,11 @@ ac_build_buffer_store_dword(struct ac_llvm_context *ctx,<br>
<br>
                ac_build_buffer_store_dword(ctx, rsrc, v01, 2, voffset,<br>
                                            soffset, inst_offset, glc, slc,<br>
-                                           writeonly_memory, swizzle_enable_hint);<br>
+                                           swizzle_enable_hint);<br>
                ac_build_buffer_store_dword(ctx, rsrc, v[2], 1, voffset,<br>
                                            soffset, inst_offset + 8,<br>
                                            glc, slc,<br>
-                                           writeonly_memory, swizzle_enable_hint);<br>
+                                           swizzle_enable_hint);<br>
                return;<br>
        }<br>
<br>
@@ -1267,7 +1263,6 @@ ac_build_buffer_store_dword(struct ac_llvm_context *ctx,<br>
                                                           num_channels,<br>
                                                           ctx->f32,<br>
                                                           glc, slc,<br>
-                                                          writeonly_memory,<br>
                                                           false, false);<br>
                } else {<br>
                        if (voffset)<br>
@@ -1277,7 +1272,7 @@ ac_build_buffer_store_dword(struct ac_llvm_context *ctx,<br>
                                                           ac_to_float(ctx, vdata),<br>
                                                           ctx->i32_0, offset,<br>
                                                           num_channels, glc, slc,<br>
-                                                          writeonly_memory, false);<br>
+                                                          false);<br>
                }<br>
                return;<br>
        }<br>
@@ -1294,7 +1289,7 @@ ac_build_buffer_store_dword(struct ac_llvm_context *ctx,<br>
<br>
        ac_build_raw_tbuffer_store(ctx, rsrc, vdata, voffset, soffset,<br>
                                   immoffset, num_channels, dfmt, nfmt, glc,<br>
-                                  slc, writeonly_memory);<br>
+                                  slc);<br>
 }<br>
<br>
 static LLVMValueRef<br>
@@ -2000,7 +1995,6 @@ ac_build_llvm8_tbuffer_store(struct ac_llvm_context *ctx,<br>
                             unsigned nfmt,<br>
                             bool glc,<br>
                             bool slc,<br>
-                            bool writeonly_memory,<br>
                             bool structurized)<br>
 {<br>
        LLVMValueRef args[7];<br>
@@ -2024,7 +2018,7 @@ ac_build_llvm8_tbuffer_store(struct ac_llvm_context *ctx,<br>
                 indexing_kind, type_name);<br>
<br>
        ac_build_intrinsic(ctx, name, ctx->voidt, args, idx,<br>
-                          ac_get_store_intr_attribs(writeonly_memory));<br>
+                          AC_FUNC_ATTR_INACCESSIBLE_MEM_ONLY);<br>
 }<br>
<br>
 static void<br>
@@ -2040,7 +2034,6 @@ ac_build_tbuffer_store(struct ac_llvm_context *ctx,<br>
                       unsigned nfmt,<br>
                       bool glc,<br>
                       bool slc,<br>
-                      bool writeonly_memory,<br>
                       bool structurized) /* only matters for LLVM 8+ */  {<br>
        if (HAVE_LLVM >= 0x800) {<br>
@@ -2050,8 +2043,7 @@ ac_build_tbuffer_store(struct ac_llvm_context *ctx,<br>
<br>
                ac_build_llvm8_tbuffer_store(ctx, rsrc, vdata, vindex, voffset,<br>
                                             soffset, num_channels, dfmt, nfmt,<br>
-                                            glc, slc, writeonly_memory,<br>
-                                            structurized);<br>
+                                            glc, slc, structurized);<br>
        } else {<br>
                LLVMValueRef params[] = {<br>
                        vdata,<br>
@@ -2073,7 +2065,7 @@ ac_build_tbuffer_store(struct ac_llvm_context *ctx,<br>
                         type_names[func]);<br>
<br>
                ac_build_intrinsic(ctx, name, ctx->voidt, params, 10,<br>
-                                  ac_get_store_intr_attribs(writeonly_memory));<br>
+                                  AC_FUNC_ATTR_INACCESSIBLE_MEM_ONLY);<br>
        }<br>
 }<br>
<br>
@@ -2089,12 +2081,11 @@ ac_build_struct_tbuffer_store(struct ac_llvm_context *ctx,<br>
                              unsigned dfmt,<br>
                              unsigned nfmt,<br>
                              bool glc,<br>
-                             bool slc,<br>
-                             bool writeonly_memory)<br>
+                             bool slc)<br>
 {<br>
        ac_build_tbuffer_store(ctx, rsrc, vdata, vindex, voffset, soffset,<br>
                               immoffset, num_channels, dfmt, nfmt, glc, slc,<br>
-                              writeonly_memory, true);<br>
+                              true);<br>
 }<br>
<br>
 void<br>
@@ -2108,12 +2099,11 @@ ac_build_raw_tbuffer_store(struct ac_llvm_context *ctx,<br>
                           unsigned dfmt,<br>
                           unsigned nfmt,<br>
                           bool glc,<br>
-                          bool slc,<br>
-                          bool writeonly_memory)<br>
+                          bool slc)<br>
 {<br>
        ac_build_tbuffer_store(ctx, rsrc, vdata, NULL, voffset, soffset,<br>
                               immoffset, num_channels, dfmt, nfmt, glc, slc,<br>
-                              writeonly_memory, false);<br>
+                              false);<br>
 }<br>
<br>
 void<br>
@@ -2122,8 +2112,7 @@ ac_build_tbuffer_store_short(struct ac_llvm_context *ctx,<br>
                             LLVMValueRef vdata,<br>
                             LLVMValueRef voffset,<br>
                             LLVMValueRef soffset,<br>
-                            bool glc,<br>
-                            bool writeonly_memory)<br>
+                            bool glc)<br>
 {<br>
        vdata = LLVMBuildBitCast(ctx->builder, vdata, ctx->i16, "");<br>
<br>
@@ -2132,8 +2121,7 @@ ac_build_tbuffer_store_short(struct ac_llvm_context *ctx,<br>
                ac_build_llvm8_buffer_store_common(ctx, rsrc, vdata, NULL,<br>
                                                   voffset, soffset, 1,<br>
                                                   ctx->i16, glc, false,<br>
-                                                  writeonly_memory, false,<br>
-                                                  false);<br>
+                                                  false, false);<br>
        } else {<br>
                unsigned dfmt = V_008F0C_BUF_DATA_FORMAT_16;<br>
                unsigned nfmt = V_008F0C_BUF_NUM_FORMAT_UINT; @@ -2141,8 +2129,8 @@ ac_build_tbuffer_store_short(struct ac_llvm_context *ctx,<br>
                vdata = LLVMBuildZExt(ctx->builder, vdata, ctx->i32, "");<br>
<br>
                ac_build_raw_tbuffer_store(ctx, rsrc, vdata, voffset, soffset,<br>
-                                          ctx->i32_0, 1, dfmt, nfmt, glc, false,<br>
-                                          writeonly_memory);<br>
+                                          ctx->i32_0, 1, dfmt, nfmt, glc,<br>
+                                          false);<br>
        }<br>
 }<br>
<br>
@@ -2152,8 +2140,7 @@ ac_build_tbuffer_store_byte(struct ac_llvm_context *ctx,<br>
                            LLVMValueRef vdata,<br>
                            LLVMValueRef voffset,<br>
                            LLVMValueRef soffset,<br>
-                           bool glc,<br>
-                           bool writeonly_memory)<br>
+                           bool glc)<br>
 {<br>
        vdata = LLVMBuildBitCast(ctx->builder, vdata, ctx->i8, "");<br>
<br>
@@ -2162,8 +2149,7 @@ ac_build_tbuffer_store_byte(struct ac_llvm_context *ctx,<br>
                ac_build_llvm8_buffer_store_common(ctx, rsrc, vdata, NULL,<br>
                                                   voffset, soffset, 1,<br>
                                                   ctx->i8, glc, false,<br>
-                                                  writeonly_memory, false,<br>
-                                                  false);<br>
+                                                  false, false);<br>
        } else {<br>
                unsigned dfmt = V_008F0C_BUF_DATA_FORMAT_8;<br>
                unsigned nfmt = V_008F0C_BUF_NUM_FORMAT_UINT; @@ -2171,8 +2157,7 @@ ac_build_tbuffer_store_byte(struct ac_llvm_context *ctx,<br>
                vdata = LLVMBuildZExt(ctx->builder, vdata, ctx->i32, "");<br>
<br>
                ac_build_raw_tbuffer_store(ctx, rsrc, vdata, voffset, soffset,<br>
-                                          ctx->i32_0, 1, dfmt, nfmt, glc, false,<br>
-                                          writeonly_memory);<br>
+                                          ctx->i32_0, 1, dfmt, nfmt, glc, false);<br>
        }<br>
 }<br>
 /**<br>
diff --git a/src/amd/common/ac_llvm_build.h b/src/amd/common/ac_llvm_build.h index bbdb01184e6..a1654d2b2c4 100644<br>
--- a/src/amd/common/ac_llvm_build.h<br>
+++ b/src/amd/common/ac_llvm_build.h<br>
@@ -271,7 +271,6 @@ ac_build_buffer_store_dword(struct ac_llvm_context *ctx,<br>
                            unsigned inst_offset,<br>
                            bool glc,<br>
                            bool slc,<br>
-                           bool writeonly_memory,<br>
                            bool swizzle_enable_hint);<br>
<br>
 void<br>
@@ -282,8 +281,7 @@ ac_build_buffer_store_format(struct ac_llvm_context *ctx,<br>
                             LLVMValueRef voffset,<br>
                             unsigned num_channels,<br>
                             bool glc,<br>
-                            bool slc,<br>
-                            bool writeonly_memory);<br>
+                            bool slc);<br>
<br>
 LLVMValueRef<br>
 ac_build_buffer_load(struct ac_llvm_context *ctx, @@ -395,8 +393,7 @@ ac_build_tbuffer_store_short(struct ac_llvm_context *ctx,<br>
                             LLVMValueRef vdata,<br>
                             LLVMValueRef voffset,<br>
                             LLVMValueRef soffset,<br>
-                            bool glc,<br>
-                            bool writeonly_memory);<br>
+                            bool glc);<br>
<br>
 void<br>
 ac_build_tbuffer_store_byte(struct ac_llvm_context *ctx, @@ -404,8 +401,7 @@ ac_build_tbuffer_store_byte(struct ac_llvm_context *ctx,<br>
                            LLVMValueRef vdata,<br>
                            LLVMValueRef voffset,<br>
                            LLVMValueRef soffset,<br>
-                           bool glc,<br>
-                           bool writeonly_memory);<br>
+                           bool glc);<br>
<br>
 void<br>
 ac_build_struct_tbuffer_store(struct ac_llvm_context *ctx, @@ -419,8 +415,7 @@ ac_build_struct_tbuffer_store(struct ac_llvm_context *ctx,<br>
                              unsigned dfmt,<br>
                              unsigned nfmt,<br>
                              bool glc,<br>
-                             bool slc,<br>
-                             bool writeonly_memory);<br>
+                             bool slc);<br>
<br>
 void<br>
 ac_build_raw_tbuffer_store(struct ac_llvm_context *ctx, @@ -433,8 +428,7 @@ ac_build_raw_tbuffer_store(struct ac_llvm_context *ctx,<br>
                           unsigned dfmt,<br>
                           unsigned nfmt,<br>
                           bool glc,<br>
-                          bool slc,<br>
-                          bool writeonly_memory);<br>
+                          bool slc);<br>
<br>
 LLVMValueRef<br>
 ac_get_thread_id(struct ac_llvm_context *ctx); diff --git a/src/amd/common/ac_llvm_util.h b/src/amd/common/ac_llvm_util.h index e1840b6f0a3..d2e3c85cfab 100644<br>
--- a/src/amd/common/ac_llvm_util.h<br>
+++ b/src/amd/common/ac_llvm_util.h<br>
@@ -120,13 +120,6 @@ ac_get_load_intr_attribs(bool can_speculate)<br>
                               AC_FUNC_ATTR_READONLY;<br>
 }<br>
<br>
-static inline unsigned<br>
-ac_get_store_intr_attribs(bool writeonly_memory) -{<br>
-       return writeonly_memory ? AC_FUNC_ATTR_INACCESSIBLE_MEM_ONLY :<br>
-                                 AC_FUNC_ATTR_WRITEONLY;<br>
-}<br>
-<br>
 unsigned<br>
 ac_count_scratch_private_memory(LLVMValueRef function);<br>
<br>
diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index f26e74cb63e..b73a0f599f1 100644<br>
--- a/src/amd/common/ac_nir_to_llvm.c<br>
+++ b/src/amd/common/ac_nir_to_llvm.c<br>
@@ -1622,13 +1622,11 @@ static void visit_store_ssbo(struct ac_nir_context *ctx,<br>
                if (num_bytes == 1) {<br>
                        ac_build_tbuffer_store_byte(&ctx->ac, rsrc, data,<br>
                                                    offset, ctx->ac.i32_0,<br>
-                                                   cache_policy & ac_glc,<br>
-                                                   writeonly_memory);<br>
+                                                   cache_policy & ac_glc);<br>
                } else if (num_bytes == 2) {<br>
                        ac_build_tbuffer_store_short(&ctx->ac, rsrc, data,<br>
                                                     offset, ctx->ac.i32_0,<br>
-                                                    cache_policy & ac_glc,<br>
-                                                    writeonly_memory);<br>
+                                                    cache_policy & ac_glc);<br>
                } else {<br>
                        int num_channels = num_bytes / 4;<br>
<br>
@@ -1654,8 +1652,7 @@ static void visit_store_ssbo(struct ac_nir_context *ctx,<br>
                                                    num_channels, offset,<br>
                                                    ctx->ac.i32_0, 0,<br>
                                                    cache_policy & ac_glc,<br>
-                                                   false, writeonly_memory,<br>
-                                                   false);<br>
+                                                   false, false);<br>
                }<br>
        }<br>
 }<br>
@@ -2556,8 +2553,7 @@ static void visit_image_store(struct ac_nir_context *ctx,<br>
<br>
                ac_build_buffer_store_format(&ctx->ac, rsrc, src, vindex,<br>
                                             ctx->ac.i32_0, src_channels,<br>
-                                            args.cache_policy & ac_glc, false,<br>
-                                            writeonly_memory);<br>
+                                            args.cache_policy & ac_glc, false);<br>
        } else {<br>
                args.opcode = ac_image_store;<br>
                args.data[0] = ac_to_float(&ctx->ac, get_src(ctx, instr->src[3])); diff --git a/src/amd/vulkan/radv_nir_to_llvm.c b/src/amd/vulkan/radv_nir_to_llvm.c<br>
index 755b7cb0246..d6f286fe4ec 100644<br>
--- a/src/amd/vulkan/radv_nir_to_llvm.c<br>
+++ b/src/amd/vulkan/radv_nir_to_llvm.c<br>
@@ -1585,13 +1585,13 @@ store_tcs_output(struct ac_shader_abi *abi,<br>
                if (!is_tess_factor && writemask != 0xF)<br>
                        ac_build_buffer_store_dword(&ctx->ac, ctx->hs_ring_tess_offchip, value, 1,<br>
                                                    buf_addr, ctx->oc_lds,<br>
-                                                   4 * (base + chan), 1, 0, true, false);<br>
+                                                   4 * (base + chan), 1, 0, false);<br>
        }<br>
<br>
        if (writemask == 0xF) {<br>
                ac_build_buffer_store_dword(&ctx->ac, ctx->hs_ring_tess_offchip, src, 4,<br>
                                            buf_addr, ctx->oc_lds,<br>
-                                           (base * 4), 1, 0, true, false);<br>
+                                           (base * 4), 1, 0, false);<br>
        }<br>
 }<br>
<br>
@@ -1858,7 +1858,7 @@ visit_emit_vertex(struct ac_shader_abi *abi, unsigned stream, LLVMValueRef *addr<br>
                                                    ctx->gsvs_ring[stream],<br>
                                                    out_val, 1,<br>
                                                    voffset, ctx->gs2vs_offset, 0,<br>
-                                                   1, 1, true, true);<br>
+                                                   1, 1, true);<br>
                }<br>
        }<br>
<br>
@@ -2773,7 +2773,7 @@ radv_emit_stream_output(struct radv_shader_context *ctx,<br>
        ac_build_buffer_store_dword(&ctx->ac, so_buffers[buf],<br>
                                    vdata, num_comps, so_write_offsets[buf],<br>
                                    ctx->ac.i32_0, offset,<br>
-                                   1, 1, true, false);<br>
+                                   1, 1, false);<br>
 }<br>
<br>
 static void<br>
@@ -3150,7 +3150,7 @@ handle_es_outputs_post(struct radv_shader_context *ctx,<br>
                                                            out_val, 1,<br>
                                                            NULL, ctx->es2gs_offset,<br>
                                                            (4 * param_index + j) * 4,<br>
-                                                           1, 1, true, true);<br>
+                                                           1, 1, true);<br>
                        }<br>
                }<br>
        }<br>
@@ -3283,7 +3283,7 @@ write_tess_factors(struct radv_shader_context *ctx)<br>
                ac_build_buffer_store_dword(&ctx->ac, buffer,<br>
                                            LLVMConstInt(ctx->ac.i32, 0x80000000, false),<br>
                                            1, ctx->ac.i32_0, tf_base,<br>
-                                           0, 1, 0, true, false);<br>
+                                           0, 1, 0, false);<br>
                tf_offset += 4;<br>
<br>
                ac_nir_build_endif(&inner_if_ctx);<br>
@@ -3292,11 +3292,11 @@ write_tess_factors(struct radv_shader_context *ctx)<br>
        /* Store the tessellation factors. */<br>
        ac_build_buffer_store_dword(&ctx->ac, buffer, vec0,<br>
                                    MIN2(stride, 4), byteoffset, tf_base,<br>
-                                   tf_offset, 1, 0, true, false);<br>
+                                   tf_offset, 1, 0, false);<br>
        if (vec1)<br>
                ac_build_buffer_store_dword(&ctx->ac, buffer, vec1,<br>
                                            stride - 4, byteoffset, tf_base,<br>
-                                           16 + tf_offset, 1, 0, true, false);<br>
+                                           16 + tf_offset, 1, 0, false);<br>
<br>
        //store to offchip for TES to read - only if TES reads them<br>
        if (ctx->options->key.tcs.tes_reads_tess_factors) { @@ -3313,7 +3313,7 @@ write_tess_factors(struct radv_shader_context *ctx)<br>
<br>
                ac_build_buffer_store_dword(&ctx->ac, ctx->hs_ring_tess_offchip, outer_vec,<br>
                                            outer_comps, tf_outer_offset,<br>
-                                           ctx->oc_lds, 0, 1, 0, true, false);<br>
+                                           ctx->oc_lds, 0, 1, 0, false);<br>
                if (inner_comps) {<br>
                        param_inner = shader_io_get_unique_index(VARYING_SLOT_TESS_LEVEL_INNER);<br>
                        tf_inner_offset = get_tcs_tes_buffer_address(ctx, NULL, @@ -3323,7 +3323,7 @@ write_tess_factors(struct radv_shader_context *ctx)<br>
                                ac_build_gather_values(&ctx->ac, inner, inner_comps);<br>
                        ac_build_buffer_store_dword(&ctx->ac, ctx->hs_ring_tess_offchip, inner_vec,<br>
                                                    inner_comps, tf_inner_offset,<br>
-                                                   ctx->oc_lds, 0, 1, 0, true, false);<br>
+                                                   ctx->oc_lds, 0, 1, 0, false);<br>
                }<br>
        }<br>
        ac_nir_build_endif(&if_ctx);<br>
diff --git a/src/gallium/drivers/radeonsi/si_compute_prim_discard.c b/src/gallium/drivers/radeonsi/si_compute_prim_discard.c<br>
index 3bed818d5ad..0f2934243a1 100644<br>
--- a/src/gallium/drivers/radeonsi/si_compute_prim_discard.c<br>
+++ b/src/gallium/drivers/radeonsi/si_compute_prim_discard.c<br>
@@ -811,7 +811,7 @@ void si_build_prim_discard_compute_shader(struct si_shader_context *ctx)<br>
                        };<br>
                        LLVMValueRef rsrc = ac_build_gather_values(&ctx->ac, desc, 4);<br>
                        ac_build_buffer_store_dword(&ctx->ac, rsrc, count, 1, ctx->i32_0,<br>
-                                                   ctx->i32_0, 0, true, true, true, false);<br>
+                                                   ctx->i32_0, 0, true, true, false);<br>
                } else {<br>
                        LLVMBuildStore(builder, count,<br>
                                       si_expand_32bit_pointer(ctx, vertex_count_addr)); @@ -864,7 +864,7 @@ void si_build_prim_discard_compute_shader(struct si_shader_context *ctx)<br>
<br>
                ac_build_buffer_store_format(&ctx->ac, output_indexbuf, vdata,<br>
                                             vindex, ctx->i32_0, 3, true,<br>
-                                            INDEX_STORES_USE_SLC, true);<br>
+                                            INDEX_STORES_USE_SLC);<br>
        }<br>
        lp_build_endif(&if_accepted);<br>
<br>
diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c<br>
index 92c68f21459..1f4954c43bf 100644<br>
--- a/src/gallium/drivers/radeonsi/si_shader.c<br>
+++ b/src/gallium/drivers/radeonsi/si_shader.c<br>
@@ -1351,7 +1351,7 @@ static void store_output_tcs(struct lp_build_tgsi_context *bld_base,<br>
                if (reg->Register.WriteMask != 0xF && !is_tess_factor) {<br>
                        ac_build_buffer_store_dword(&ctx->ac, buffer, value, 1,<br>
                                                    buf_addr, base,<br>
-                                                   4 * chan_index, 1, 0, true, false);<br>
+                                                   4 * chan_index, 1, 0, false);<br>
                }<br>
<br>
                /* Write tess factors into VGPRs for the epilog. */ @@ -1371,7 +1371,7 @@ static void store_output_tcs(struct lp_build_tgsi_context *bld_base,<br>
                LLVMValueRef value = ac_build_gather_values(&ctx->ac,<br>
                                                            values, 4);<br>
                ac_build_buffer_store_dword(&ctx->ac, buffer, value, 4, buf_addr,<br>
-                                           base, 0, 1, 0, true, false);<br>
+                                           base, 0, 1, 0, false);<br>
        }<br>
 }<br>
<br>
@@ -1479,7 +1479,7 @@ static void si_nir_store_output_tcs(struct ac_shader_abi *abi,<br>
                        ac_build_buffer_store_dword(&ctx->ac, buffer, value, 1,<br>
                                                    addr, base,<br>
                                                    4 * buffer_store_offset,<br>
-                                                    1, 0, true, false);<br>
+                                                    1, 0, false);<br>
                }<br>
<br>
                /* Write tess factors into VGPRs for the epilog. */ @@ -1499,7 +1499,7 @@ static void si_nir_store_output_tcs(struct ac_shader_abi *abi,<br>
                LLVMValueRef value = ac_build_gather_values(&ctx->ac,<br>
                                                            values, 4);<br>
                ac_build_buffer_store_dword(&ctx->ac, buffer, value, 4, addr,<br>
-                                           base, 0, 1, 0, true, false);<br>
+                                           base, 0, 1, 0, false);<br>
        }<br>
 }<br>
<br>
@@ -2660,7 +2660,7 @@ static void emit_streamout_output(struct si_shader_context *ctx,<br>
                                    vdata, num_comps,<br>
                                    so_write_offsets[buf_idx],<br>
                                    ctx->i32_0,<br>
-                                   stream_out->dst_offset * 4, 1, 1, true, false);<br>
+                                   stream_out->dst_offset * 4, 1, 1, false);<br>
 }<br>
<br>
 /**<br>
@@ -3054,7 +3054,7 @@ static void si_copy_tcs_inputs(struct lp_build_tgsi_context *bld_base)<br>
                LLVMValueRef value = lshs_lds_load(bld_base, ctx->ac.i32, ~0, lds_ptr);<br>
<br>
                ac_build_buffer_store_dword(&ctx->ac, buffer, value, 4, buffer_addr,<br>
-                                           buffer_offset, 0, 1, 0, true, false);<br>
+                                           buffer_offset, 0, 1, 0, false);<br>
        }<br>
 }<br>
<br>
@@ -3180,7 +3180,7 @@ static void si_write_tess_factors(struct lp_build_tgsi_context *bld_base,<br>
                ac_build_buffer_store_dword(&ctx->ac, buffer,<br>
                                            LLVMConstInt(ctx->i32, 0x80000000, 0),<br>
                                            1, ctx->i32_0, tf_base,<br>
-                                           offset, 1, 0, true, false);<br>
+                                           offset, 1, 0, false);<br>
                offset += 4;<br>
        }<br>
<br>
@@ -3189,12 +3189,12 @@ static void si_write_tess_factors(struct lp_build_tgsi_context *bld_base,<br>
        /* Store the tessellation factors. */<br>
        ac_build_buffer_store_dword(&ctx->ac, buffer, vec0,<br>
                                    MIN2(stride, 4), byteoffset, tf_base,<br>
-                                   offset, 1, 0, true, false);<br>
+                                   offset, 1, 0, false);<br>
        offset += 16;<br>
        if (vec1)<br>
                ac_build_buffer_store_dword(&ctx->ac, buffer, vec1,<br>
                                            stride - 4, byteoffset, tf_base,<br>
-                                           offset, 1, 0, true, false);<br>
+                                           offset, 1, 0, false);<br>
<br>
        /* Store the tess factors into the offchip buffer if TES reads them. */<br>
        if (shader->key.part.tcs.epilog.tes_reads_tess_factors) { @@ -3217,7 +3217,7 @@ static void si_write_tess_factors(struct lp_build_tgsi_context *bld_base,<br>
<br>
                ac_build_buffer_store_dword(&ctx->ac, buf, outer_vec,<br>
                                            outer_comps, tf_outer_offset,<br>
-                                           base, 0, 1, 0, true, false);<br>
+                                           base, 0, 1, 0, false);<br>
                if (inner_comps) {<br>
                        param_inner = si_shader_io_get_unique_index_patch(<br>
                                              TGSI_SEMANTIC_TESSINNER, 0); @@ -3228,7 +3228,7 @@ static void si_write_tess_factors(struct lp_build_tgsi_context *bld_base,<br>
                                    ac_build_gather_values(&ctx->ac, inner, inner_comps);<br>
                        ac_build_buffer_store_dword(&ctx->ac, buf, inner_vec,<br>
                                                    inner_comps, tf_inner_offset,<br>
-                                                   base, 0, 1, 0, true, false);<br>
+                                                   base, 0, 1, 0, false);<br>
                }<br>
        }<br>
<br>
@@ -3535,7 +3535,7 @@ static void si_llvm_emit_es_epilogue(struct ac_shader_abi *abi,<br>
                                                    ctx->esgs_ring,<br>
                                                    out_val, 1, NULL, soffset,<br>
                                                    (4 * param + chan) * 4,<br>
-                                                   1, 1, true, true);<br>
+                                                   1, 1, true);<br>
                }<br>
        }<br>
<br>
@@ -4247,7 +4247,7 @@ static void si_llvm_emit_vertex(struct ac_shader_abi *abi,<br>
                                                    ctx->gsvs_ring[stream],<br>
                                                    out_val, 1,<br>
                                                    voffset, soffset, 0,<br>
-                                                   1, 1, true, true);<br>
+                                                   1, 1, true);<br>
                }<br>
        }<br>
<br>
diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c b/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c<br>
index 5f60d8dc33f..a2e6a47cba3 100644<br>
--- a/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c<br>
+++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c<br>
@@ -635,7 +635,7 @@ static void store_emit_buffer(struct si_shader_context *ctx,<br>
                                            voff, ctx->i32_0, 0,<br>
                                            !!(cache_policy & ac_glc),<br>
                                            !!(cache_policy & ac_slc),<br>
-                                           writeonly_memory, false);<br>
+                                           false);<br>
        }<br>
 }<br>
<br>
@@ -728,13 +728,13 @@ static void store_emit(<br>
                                             ac_build_gather_values(&ctx->ac, chans, num_channels),<br>
                                             vindex, ctx->i32_0 /* voffset */,<br>
                                             num_channels,<br>
-                                            !!(args.cache_policy & ac_glc), false,<br>
-                                            writeonly_memory);<br>
+                                            !!(args.cache_policy & ac_glc),<br>
+                                            false);<br>
        } else {<br>
                args.opcode = ac_image_store;<br>
                args.data[0] = ac_build_gather_values(&ctx->ac, chans, 4);<br>
                args.dim = ac_image_dim_from_tgsi_target(ctx->screen, inst->Memory.Texture);<br>
-               args.attributes = ac_get_store_intr_attribs(writeonly_memory);<br>
+               args.attributes = AC_FUNC_ATTR_INACCESSIBLE_MEM_ONLY;<br>
                args.dmask = 0xf;<br>
<br>
                emit_data->output[emit_data->chan] =<br>
--<br>
2.17.2<br>
<br>
</blockquote></div>