<div dir="ltr"><div>Adding this:<br><br>diff --git a/meson.build b/meson.build<br>index 80ea60f..22eb702 100644<br>--- a/meson.build<br>+++ b/meson.build<br>@@ -991,12 +991,12 @@ endif<br> _llvm = get_option('llvm')<br> if _llvm == 'auto'<br>   dep_llvm = dependency(<br>-    'llvm', version : '>= 3.9.0', modules : llvm_modules,<br>+    'llvm', version : '>= 4.0.0', modules : llvm_modules,<br>     required : with_amd_vk or with_gallium_radeonsi or with_gallium_swr or with_gallium_opencl,<br>   )<br>   with_llvm = dep_llvm.found()<br> elif _llvm == 'true'<br>-  dep_llvm = dependency('llvm', version : '>= 3.9.0', modules : llvm_modules)<br>+  dep_llvm = dependency('llvm', version : '>= 4.0.0', modules : llvm_modules)<br>   with_llvm = true<br> else<br>   dep_llvm = []<br>@@ -1019,7 +1019,7 @@ if with_llvm<br>     '-DMESA_LLVM_VERSION_PATCH=@0@'.format(_llvm_patch),<br>   ]<br> elif with_amd_vk or with_gallium_radeonsi or with_gallium_swr<br>-  error('The following drivers requires LLVM: Radv, RadeonSI, SWR. One of these is enabled, but LLVM is disabled.')<br>+  error('The following drivers require LLVM: Radv, RadeonSI, SWR. One of these is enabled, but LLVM is disabled.')<br> endif<br> <br> dep_glvnd = []<br><br></div>Marek<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Feb 2, 2018 at 8:02 PM, Bas Nieuwenhuizen <span dir="ltr"><<a href="mailto:bas@basnieuwenhuizen.nl" target="_blank">bas@basnieuwenhuizen.nl</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Also change meson.build?<br>
<div><div class="h5"><br>
On Fri, Feb 2, 2018 at 7:34 PM, Marek Olšák <<a href="mailto:maraeo@gmail.com">maraeo@gmail.com</a>> wrote:<br>
> From: Marek Olšák <<a href="mailto:marek.olsak@amd.com">marek.olsak@amd.com</a>><br>
><br>
> Only these are supported:<br>
> - LLVM 4.0<br>
> - LLVM 5.0<br>
> - LLVM 6.0<br>
> - master (7.0)<br>
> ---<br>
>  <a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a>                                       |   4 +-<br>
>  src/amd/common/ac_llvm_build.c                     | 187 ++++++---------------<br>
>  src/amd/common/ac_llvm_helper.<wbr>cpp                  |  10 --<br>
>  src/amd/common/ac_llvm_util.c                      |  39 +----<br>
>  src/amd/common/ac_llvm_util.h                      |  14 +-<br>
>  src/amd/common/ac_nir_to_llvm.<wbr>c                    |  32 +---<br>
>  src/amd/vulkan/radv_device.c                       |   4 -<br>
>  src/gallium/drivers/radeonsi/<wbr>si_compute.c          |   3 +-<br>
>  src/gallium/drivers/radeonsi/<wbr>si_get.c              |  13 +-<br>
>  src/gallium/drivers/radeonsi/<wbr>si_shader_tgsi_mem.c  |   3 +-<br>
>  .../drivers/radeonsi/si_<wbr>shader_tgsi_setup.c        |   2 -<br>
>  11 files changed, 72 insertions(+), 239 deletions(-)<br>
><br>
> diff --git a/<a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a> b/<a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a><br>
> index a54b7cb..8ed606c 100644<br>
> --- a/<a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a><br>
> +++ b/<a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a><br>
> @@ -96,22 +96,22 @@ XDAMAGE_REQUIRED=1.1<br>
>  XSHMFENCE_REQUIRED=1.1<br>
>  XVMC_REQUIRED=1.0.6<br>
>  PYTHON_MAKO_REQUIRED=0.8.0<br>
>  LIBSENSORS_REQUIRED=4.0.0<br>
>  ZLIB_REQUIRED=1.2.3<br>
><br>
>  dnl LLVM versions<br>
>  LLVM_REQUIRED_GALLIUM=3.3.0<br>
>  LLVM_REQUIRED_OPENCL=3.9.0<br>
>  LLVM_REQUIRED_R600=3.9.0<br>
> -LLVM_REQUIRED_RADEONSI=3.9.0<br>
> -LLVM_REQUIRED_RADV=3.9.0<br>
> +LLVM_REQUIRED_RADEONSI=4.0.0<br>
> +LLVM_REQUIRED_RADV=4.0.0<br>
>  LLVM_REQUIRED_SWR=3.9.0<br>
><br>
>  dnl Check for progs<br>
>  AC_PROG_CPP<br>
>  AC_PROG_CC<br>
>  AC_PROG_CXX<br>
>  dnl add this here, so the help for this environmnet variable is close to<br>
>  dnl other CC/CXX flags related help<br>
>  AC_ARG_VAR([CXX11_CXXFLAGS], [Compiler flag to enable C++11 support (only needed if not<br>
>                                enabled by default and different  from -std=c++11)])<br>
> diff --git a/src/amd/common/ac_llvm_<wbr>build.c b/src/amd/common/ac_llvm_<wbr>build.c<br>
> index 6ede60a..3efcaa1 100644<br>
> --- a/src/amd/common/ac_llvm_<wbr>build.c<br>
> +++ b/src/amd/common/ac_llvm_<wbr>build.c<br>
> @@ -213,22 +213,21 @@ ac_to_float(struct ac_llvm_context *ctx, LLVMValueRef v)<br>
>         return LLVMBuildBitCast(ctx->builder, v, ac_to_float_type(ctx, type), "");<br>
>  }<br>
><br>
><br>
>  LLVMValueRef<br>
>  ac_build_intrinsic(struct ac_llvm_context *ctx, const char *name,<br>
>                    LLVMTypeRef return_type, LLVMValueRef *params,<br>
>                    unsigned param_count, unsigned attrib_mask)<br>
>  {<br>
>         LLVMValueRef function, call;<br>
> -       bool set_callsite_attrs = HAVE_LLVM >= 0x0400 &&<br>
> -                                 !(attrib_mask & AC_FUNC_ATTR_LEGACY);<br>
> +       bool set_callsite_attrs = !(attrib_mask & AC_FUNC_ATTR_LEGACY);<br>
><br>
>         function = LLVMGetNamedFunction(ctx-><wbr>module, name);<br>
>         if (!function) {<br>
>                 LLVMTypeRef param_types[32], function_type;<br>
>                 unsigned i;<br>
><br>
>                 assert(param_count <= 32);<br>
><br>
>                 for (i = 0; i < param_count; ++i) {<br>
>                         assert(params[i]);<br>
> @@ -714,34 +713,20 @@ ac_prepare_cube_coords(struct ac_llvm_context *ctx,<br>
>  LLVMValueRef<br>
>  ac_build_fs_interp(struct ac_llvm_context *ctx,<br>
>                    LLVMValueRef llvm_chan,<br>
>                    LLVMValueRef attr_number,<br>
>                    LLVMValueRef params,<br>
>                    LLVMValueRef i,<br>
>                    LLVMValueRef j)<br>
>  {<br>
>         LLVMValueRef args[5];<br>
>         LLVMValueRef p1;<br>
> -<br>
> -       if (HAVE_LLVM < 0x0400) {<br>
> -               LLVMValueRef ij[2];<br>
> -               ij[0] = LLVMBuildBitCast(ctx->builder, i, ctx->i32, "");<br>
> -               ij[1] = LLVMBuildBitCast(ctx->builder, j, ctx->i32, "");<br>
> -<br>
> -               args[0] = llvm_chan;<br>
> -               args[1] = attr_number;<br>
> -               args[2] = params;<br>
> -               args[3] = ac_build_gather_values(ctx, ij, 2);<br>
> -               return ac_build_intrinsic(ctx, "llvm.SI.fs.interp",<br>
> -                                         ctx->f32, args, 4,<br>
> -                                         AC_FUNC_ATTR_READNONE);<br>
> -       }<br>
><br>
>         args[0] = i;<br>
>         args[1] = llvm_chan;<br>
>         args[2] = attr_number;<br>
>         args[3] = params;<br>
><br>
>         p1 = ac_build_intrinsic(ctx, "llvm.amdgcn.interp.p1",<br>
>                                 ctx->f32, args, 4, AC_FUNC_ATTR_READNONE);<br>
><br>
>         args[0] = p1;<br>
> @@ -755,30 +740,20 @@ ac_build_fs_interp(struct ac_llvm_context *ctx,<br>
>  }<br>
><br>
>  LLVMValueRef<br>
>  ac_build_fs_interp_mov(struct ac_llvm_context *ctx,<br>
>                        LLVMValueRef parameter,<br>
>                        LLVMValueRef llvm_chan,<br>
>                        LLVMValueRef attr_number,<br>
>                        LLVMValueRef params)<br>
>  {<br>
>         LLVMValueRef args[4];<br>
> -       if (HAVE_LLVM < 0x0400) {<br>
> -               args[0] = llvm_chan;<br>
> -               args[1] = attr_number;<br>
> -               args[2] = params;<br>
> -<br>
> -               return ac_build_intrinsic(ctx,<br>
> -                                         "llvm.SI.fs.constant",<br>
> -                                         ctx->f32, args, 3,<br>
> -                                         AC_FUNC_ATTR_READNONE);<br>
> -       }<br>
><br>
>         args[0] = parameter;<br>
>         args[1] = llvm_chan;<br>
>         args[2] = attr_number;<br>
>         args[3] = params;<br>
><br>
>         return ac_build_intrinsic(ctx, "llvm.amdgcn.interp.mov",<br>
>                                   ctx->f32, args, 4, AC_FUNC_ATTR_READNONE);<br>
>  }<br>
><br>
> @@ -1202,34 +1177,31 @@ ac_build_ddxy(struct ac_llvm_context *ctx,<br>
>         result = LLVMBuildFSub(ctx->builder, trbl, tl, "");<br>
>         return result;<br>
>  }<br>
><br>
>  void<br>
>  ac_build_sendmsg(struct ac_llvm_context *ctx,<br>
>                  uint32_t msg,<br>
>                  LLVMValueRef wave_id)<br>
>  {<br>
>         LLVMValueRef args[2];<br>
> -       const char *intr_name = (HAVE_LLVM < 0x0400) ? "llvm.SI.sendmsg" : "llvm.amdgcn.s.sendmsg";<br>
>         args[0] = LLVMConstInt(ctx->i32, msg, false);<br>
>         args[1] = wave_id;<br>
> -       ac_build_intrinsic(ctx, intr_name, ctx->voidt, args, 2, 0);<br>
> +       ac_build_intrinsic(ctx, "llvm.amdgcn.s.sendmsg", ctx->voidt, args, 2, 0);<br>
>  }<br>
><br>
>  LLVMValueRef<br>
>  ac_build_imsb(struct ac_llvm_context *ctx,<br>
>               LLVMValueRef arg,<br>
>               LLVMTypeRef dst_type)<br>
>  {<br>
> -       const char *intr_name = (HAVE_LLVM < 0x0400) ? "llvm.AMDGPU.flbit.i32" :<br>
> -                                                      "llvm.amdgcn.sffbh.i32";<br>
> -       LLVMValueRef msb = ac_build_intrinsic(ctx, intr_name,<br>
> +       LLVMValueRef msb = ac_build_intrinsic(ctx, "llvm.amdgcn.sffbh.i32",<br>
>                                               dst_type, &arg, 1,<br>
>                                               AC_FUNC_ATTR_READNONE);<br>
><br>
>         /* The HW returns the last bit index from MSB, but NIR/TGSI wants<br>
>          * the index from LSB. Invert it by doing "31 - msb". */<br>
>         msb = LLVMBuildSub(ctx->builder, LLVMConstInt(ctx->i32, 31, false),<br>
>                            msb, "");<br>
><br>
>         LLVMValueRef all_ones = LLVMConstInt(ctx->i32, -1, true);<br>
>         LLVMValueRef cond = LLVMBuildOr(ctx->builder,<br>
> @@ -1363,151 +1335,90 @@ void ac_build_export(struct ac_llvm_context *ctx, struct ac_export_args *a)<br>
>         args[4] = LLVMConstInt(ctx->i32, a->compr, 0);<br>
>         memcpy(args + 5, a->out, sizeof(a->out[0]) * 4);<br>
><br>
>         ac_build_intrinsic(ctx, "llvm.SI.export", ctx->voidt, args, 9,<br>
>                            AC_FUNC_ATTR_LEGACY);<br>
>  }<br>
><br>
>  LLVMValueRef ac_build_image_opcode(struct ac_llvm_context *ctx,<br>
>                                    struct ac_image_args *a)<br>
>  {<br>
> -       LLVMTypeRef dst_type;<br>
>         LLVMValueRef args[11];<br>
>         unsigned num_args = 0;<br>
>         const char *name = NULL;<br>
>         char intr_name[128], type[64];<br>
><br>
> -       if (HAVE_LLVM >= 0x0400) {<br>
> -               bool sample = a->opcode == ac_image_sample ||<br>
> -                             a->opcode == ac_image_gather4 ||<br>
> -                             a->opcode == ac_image_get_lod;<br>
> -<br>
> -               if (sample)<br>
> -                       args[num_args++] = ac_to_float(ctx, a->addr);<br>
> -               else<br>
> -                       args[num_args++] = a->addr;<br>
> -<br>
> -               args[num_args++] = a->resource;<br>
> -               if (sample)<br>
> -                       args[num_args++] = a->sampler;<br>
> -               args[num_args++] = LLVMConstInt(ctx->i32, a->dmask, 0);<br>
> -               if (sample)<br>
> -                       args[num_args++] = LLVMConstInt(ctx->i1, a->unorm, 0);<br>
> -               args[num_args++] = ctx->i1false; /* glc */<br>
> -               args[num_args++] = ctx->i1false; /* slc */<br>
> -               args[num_args++] = ctx->i1false; /* lwe */<br>
> -               args[num_args++] = LLVMConstInt(ctx->i1, a->da, 0);<br>
> -<br>
> -               switch (a->opcode) {<br>
> -               case ac_image_sample:<br>
> -                       name = "llvm.amdgcn.image.sample";<br>
> -                       break;<br>
> -               case ac_image_gather4:<br>
> -                       name = "llvm.amdgcn.image.gather4";<br>
> -                       break;<br>
> -               case ac_image_load:<br>
> -                       name = "llvm.amdgcn.image.load";<br>
> -                       break;<br>
> -               case ac_image_load_mip:<br>
> -                       name = "llvm.amdgcn.image.load.mip";<br>
> -                       break;<br>
> -               case ac_image_get_lod:<br>
> -                       name = "llvm.amdgcn.image.getlod";<br>
> -                       break;<br>
> -               case ac_image_get_resinfo:<br>
> -                       name = "llvm.amdgcn.image.getresinfo"<wbr>;<br>
> -                       break;<br>
> -               default:<br>
> -                       unreachable("invalid image opcode");<br>
> -               }<br>
> +       bool sample = a->opcode == ac_image_sample ||<br>
> +                     a->opcode == ac_image_gather4 ||<br>
> +                     a->opcode == ac_image_get_lod;<br>
><br>
> -               ac_build_type_name_for_intr(<wbr>LLVMTypeOf(args[0]), type,<br>
> -                                           sizeof(type));<br>
> -<br>
> -               snprintf(intr_name, sizeof(intr_name), "%s%s%s%s.v4f32.%s.v8i32",<br>
> -                       name,<br>
> -                       a->compare ? ".c" : "",<br>
> -                       a->bias ? ".b" :<br>
> -                       a->lod ? ".l" :<br>
> -                       a->deriv ? ".d" :<br>
> -                       a->level_zero ? ".lz" : "",<br>
> -                       a->offset ? ".o" : "",<br>
> -                       type);<br>
> -<br>
> -               LLVMValueRef result =<br>
> -                       ac_build_intrinsic(ctx, intr_name,<br>
> -                                          ctx->v4f32, args, num_args,<br>
> -                                          AC_FUNC_ATTR_READNONE);<br>
> -               if (!sample) {<br>
> -                       result = LLVMBuildBitCast(ctx->builder, result,<br>
> -                                                 ctx->v4i32, "");<br>
> -               }<br>
> -               return result;<br>
> -       }<br>
> +       if (sample)<br>
> +               args[num_args++] = ac_to_float(ctx, a->addr);<br>
> +       else<br>
> +               args[num_args++] = a->addr;<br>
><br>
> -       args[num_args++] = a->addr;<br>
>         args[num_args++] = a->resource;<br>
> -<br>
> -       if (a->opcode == ac_image_load ||<br>
> -           a->opcode == ac_image_load_mip ||<br>
> -           a->opcode == ac_image_get_resinfo) {<br>
> -               dst_type = ctx->v4i32;<br>
> -       } else {<br>
> -               dst_type = ctx->v4f32;<br>
> +       if (sample)<br>
>                 args[num_args++] = a->sampler;<br>
> -       }<br>
> -<br>
>         args[num_args++] = LLVMConstInt(ctx->i32, a->dmask, 0);<br>
> -       args[num_args++] = LLVMConstInt(ctx->i32, a->unorm, 0);<br>
> -       args[num_args++] = LLVMConstInt(ctx->i32, 0, 0); /* r128 */<br>
> -       args[num_args++] = LLVMConstInt(ctx->i32, a->da, 0);<br>
> -       args[num_args++] = LLVMConstInt(ctx->i32, 0, 0); /* glc */<br>
> -       args[num_args++] = LLVMConstInt(ctx->i32, 0, 0); /* slc */<br>
> -       args[num_args++] = LLVMConstInt(ctx->i32, 0, 0); /* tfe */<br>
> -       args[num_args++] = LLVMConstInt(ctx->i32, 0, 0); /* lwe */<br>
> +       if (sample)<br>
> +               args[num_args++] = LLVMConstInt(ctx->i1, a->unorm, 0);<br>
> +       args[num_args++] = ctx->i1false; /* glc */<br>
> +       args[num_args++] = ctx->i1false; /* slc */<br>
> +       args[num_args++] = ctx->i1false; /* lwe */<br>
> +       args[num_args++] = LLVMConstInt(ctx->i1, a->da, 0);<br>
><br>
>         switch (a->opcode) {<br>
>         case ac_image_sample:<br>
> -               name = "llvm.SI.image.sample";<br>
> +               name = "llvm.amdgcn.image.sample";<br>
>                 break;<br>
>         case ac_image_gather4:<br>
> -               name = "llvm.SI.gather4";<br>
> +               name = "llvm.amdgcn.image.gather4";<br>
>                 break;<br>
>         case ac_image_load:<br>
> -               name = "llvm.SI.image.load";<br>
> +               name = "llvm.amdgcn.image.load";<br>
>                 break;<br>
>         case ac_image_load_mip:<br>
> -               name = "llvm.SI.image.load.mip";<br>
> +               name = "llvm.amdgcn.image.load.mip";<br>
>                 break;<br>
>         case ac_image_get_lod:<br>
> -               name = "llvm.SI.getlod";<br>
> +               name = "llvm.amdgcn.image.getlod";<br>
>                 break;<br>
>         case ac_image_get_resinfo:<br>
> -               name = "llvm.SI.getresinfo";<br>
> +               name = "llvm.amdgcn.image.getresinfo"<wbr>;<br>
>                 break;<br>
> +       default:<br>
> +               unreachable("invalid image opcode");<br>
>         }<br>
><br>
> -       ac_build_type_name_for_intr(<wbr>LLVMTypeOf(a->addr), type, sizeof(type));<br>
> -       snprintf(intr_name, sizeof(intr_name), "%s%s%s%s.%s",<br>
> +       ac_build_type_name_for_intr(<wbr>LLVMTypeOf(args[0]), type,<br>
> +                                   sizeof(type));<br>
> +<br>
> +       snprintf(intr_name, sizeof(intr_name), "%s%s%s%s.v4f32.%s.v8i32",<br>
>                 name,<br>
>                 a->compare ? ".c" : "",<br>
>                 a->bias ? ".b" :<br>
>                 a->lod ? ".l" :<br>
>                 a->deriv ? ".d" :<br>
>                 a->level_zero ? ".lz" : "",<br>
>                 a->offset ? ".o" : "",<br>
>                 type);<br>
><br>
> -       return ac_build_intrinsic(ctx, intr_name,<br>
> -                                 dst_type, args, num_args,<br>
> -                                 AC_FUNC_ATTR_READNONE |<br>
> -                                 AC_FUNC_ATTR_LEGACY);<br>
> +       LLVMValueRef result =<br>
> +               ac_build_intrinsic(ctx, intr_name,<br>
> +                                  ctx->v4f32, args, num_args,<br>
> +                                  AC_FUNC_ATTR_READNONE);<br>
> +       if (!sample) {<br>
> +               result = LLVMBuildBitCast(ctx->builder, result,<br>
> +                                         ctx->v4i32, "");<br>
> +       }<br>
> +       return result;<br>
>  }<br>
><br>
>  LLVMValueRef ac_build_cvt_pkrtz_f16(struct ac_llvm_context *ctx,<br>
>                                     LLVMValueRef args[2])<br>
>  {<br>
>         if (HAVE_LLVM >= 0x0500) {<br>
>                 LLVMTypeRef v2f16 =<br>
>                         LLVMVectorType(<wbr>LLVMHalfTypeInContext(ctx-><wbr>context), 2);<br>
>                 LLVMValueRef res =<br>
>                         ac_build_intrinsic(ctx, "llvm.amdgcn.cvt.pkrtz",<br>
> @@ -1731,33 +1642,29 @@ void ac_get_image_intr_name(const char *base_name,<br>
>                             LLVMTypeRef data_type,<br>
>                             LLVMTypeRef coords_type,<br>
>                             LLVMTypeRef rsrc_type,<br>
>                             char *out_name, unsigned out_len)<br>
>  {<br>
>          char coords_type_name[8];<br>
><br>
>          ac_build_type_name_for_intr(<wbr>coords_type, coords_type_name,<br>
>                              sizeof(coords_type_name));<br>
><br>
> -        if (HAVE_LLVM <= 0x0309) {<br>
> -                snprintf(out_name, out_len, "%s.%s", base_name, coords_type_name);<br>
> -        } else {<br>
> -                char data_type_name[8];<br>
> -                char rsrc_type_name[8];<br>
> -<br>
> -                ac_build_type_name_for_intr(<wbr>data_type, data_type_name,<br>
> -                                        sizeof(data_type_name));<br>
> -                ac_build_type_name_for_intr(<wbr>rsrc_type, rsrc_type_name,<br>
> -                                        sizeof(rsrc_type_name));<br>
> -                snprintf(out_name, out_len, "%s.%s.%s.%s", base_name,<br>
> -                         data_type_name, coords_type_name, rsrc_type_name);<br>
> -        }<br>
> +       char data_type_name[8];<br>
> +       char rsrc_type_name[8];<br>
> +<br>
> +       ac_build_type_name_for_intr(<wbr>data_type, data_type_name,<br>
> +                                   sizeof(data_type_name));<br>
> +       ac_build_type_name_for_intr(<wbr>rsrc_type, rsrc_type_name,<br>
> +                                   sizeof(rsrc_type_name));<br>
> +       snprintf(out_name, out_len, "%s.%s.%s.%s", base_name,<br>
> +                data_type_name, coords_type_name, rsrc_type_name);<br>
>  }<br>
><br>
>  #define AC_EXP_TARGET (HAVE_LLVM >= 0x0500 ? 0 : 3)<br>
>  #define AC_EXP_OUT0 (HAVE_LLVM >= 0x0500 ? 2 : 5)<br>
><br>
>  enum ac_ir_type {<br>
>         AC_IR_UNDEF,<br>
>         AC_IR_CONST,<br>
>         AC_IR_VALUE,<br>
>  };<br>
> diff --git a/src/amd/common/ac_llvm_<wbr>helper.cpp b/src/amd/common/ac_llvm_<wbr>helper.cpp<br>
> index 793737c..1d2369b 100644<br>
> --- a/src/amd/common/ac_llvm_<wbr>helper.cpp<br>
> +++ b/src/amd/common/ac_llvm_<wbr>helper.cpp<br>
> @@ -58,54 +58,44 @@ void ac_add_attr_dereferenceable(<wbr>LLVMValueRef val, uint64_t bytes)<br>
>  bool ac_is_sgpr_param(LLVMValueRef arg)<br>
>  {<br>
>         llvm::Argument *A = llvm::unwrap<llvm::Argument>(<wbr>arg);<br>
>         llvm::AttributeList AS = A->getParent()->getAttributes(<wbr>);<br>
>         unsigned ArgNo = A->getArgNo();<br>
>         return AS.hasAttribute(ArgNo + 1, llvm::Attribute::InReg);<br>
>  }<br>
><br>
>  LLVMValueRef ac_llvm_get_called_value(<wbr>LLVMValueRef call)<br>
>  {<br>
> -#if HAVE_LLVM >= 0x0309<br>
>         return LLVMGetCalledValue(call);<br>
> -#else<br>
> -       return llvm::wrap(llvm::CallSite(<wbr>llvm::unwrap<llvm::<wbr>Instruction>(call)).<wbr>getCalledValue());<br>
> -#endif<br>
>  }<br>
><br>
>  bool ac_llvm_is_function(<wbr>LLVMValueRef v)<br>
>  {<br>
> -#if HAVE_LLVM >= 0x0309<br>
>         return LLVMGetValueKind(v) == LLVMFunctionValueKind;<br>
> -#else<br>
> -       return llvm::isa<llvm::Function>(<wbr>llvm::unwrap(v));<br>
> -#endif<br>
>  }<br>
><br>
>  LLVMBuilderRef ac_create_builder(<wbr>LLVMContextRef ctx,<br>
>                                  enum ac_float_mode float_mode)<br>
>  {<br>
>         LLVMBuilderRef builder = LLVMCreateBuilderInContext(<wbr>ctx);<br>
><br>
> -#if HAVE_LLVM >= 0x0308<br>
>         llvm::FastMathFlags flags;<br>
><br>
>         switch (float_mode) {<br>
>         case AC_FLOAT_MODE_DEFAULT:<br>
>                 break;<br>
>         case AC_FLOAT_MODE_NO_SIGNED_ZEROS_<wbr>FP_MATH:<br>
>                 flags.setNoSignedZeros();<br>
>                 llvm::unwrap(builder)-><wbr>setFastMathFlags(flags);<br>
>                 break;<br>
>         case AC_FLOAT_MODE_UNSAFE_FP_MATH:<br>
>  #if HAVE_LLVM >= 0x0600<br>
>                 flags.setFast();<br>
>  #else<br>
>                 flags.setUnsafeAlgebra();<br>
>  #endif<br>
>                 llvm::unwrap(builder)-><wbr>setFastMathFlags(flags);<br>
>                 break;<br>
>         }<br>
> -#endif<br>
><br>
>         return builder;<br>
>  }<br>
> diff --git a/src/amd/common/ac_llvm_util.<wbr>c b/src/amd/common/ac_llvm_util.<wbr>c<br>
> index 5fd785a..b88c4e4 100644<br>
> --- a/src/amd/common/ac_llvm_util.<wbr>c<br>
> +++ b/src/amd/common/ac_llvm_util.<wbr>c<br>
> @@ -39,26 +39,25 @@ static void ac_init_llvm_target()<br>
>         LLVMInitializeAMDGPUTarget();<br>
>         LLVMInitializeAMDGPUTargetMC()<wbr>;<br>
>         LLVMInitializeAMDGPUAsmPrinter<wbr>();<br>
><br>
>         /* For inline assembly. */<br>
>         LLVMInitializeAMDGPUAsmParser(<wbr>);<br>
><br>
>         /* Workaround for bug in llvm 4.0 that causes image intrinsics<br>
>          * to disappear.<br>
>          * <a href="https://reviews.llvm.org/D26348" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D26348</a><br>
> +        *<br>
> +        * "mesa" is the prefix for error messages.<br>
>          */<br>
> -       if (HAVE_LLVM >= 0x0400) {<br>
> -               /* "mesa" is the prefix for error messages */<br>
> -               const char *argv[2] = { "mesa", "-simplifycfg-sink-common=<wbr>false" };<br>
> -               LLVMParseCommandLineOptions(2, argv, NULL);<br>
> -       }<br>
> +       const char *argv[2] = { "mesa", "-simplifycfg-sink-common=<wbr>false" };<br>
> +       LLVMParseCommandLineOptions(2, argv, NULL);<br>
>  }<br>
><br>
>  static once_flag ac_init_llvm_target_once_flag = ONCE_FLAG_INIT;<br>
><br>
>  LLVMTargetRef ac_get_llvm_target(const char *triple)<br>
>  {<br>
>         LLVMTargetRef target = NULL;<br>
>         char *err_message = NULL;<br>
><br>
>         call_once(&ac_init_llvm_<wbr>target_once_flag, ac_init_llvm_target);<br>
> @@ -139,81 +138,51 @@ LLVMTargetMachineRef ac_create_target_machine(enum radeon_family family, enum ac<br>
>                                      triple,<br>
>                                      ac_get_llvm_processor_name(<wbr>family),<br>
>                                      features,<br>
>                                      LLVMCodeGenLevelDefault,<br>
>                                      LLVMRelocDefault,<br>
>                                      LLVMCodeModelDefault);<br>
><br>
>         return tm;<br>
>  }<br>
><br>
> -<br>
> -#if HAVE_LLVM < 0x0400<br>
> -static LLVMAttribute ac_attr_to_llvm_attr(enum ac_func_attr attr)<br>
> -{<br>
> -   switch (attr) {<br>
> -   case AC_FUNC_ATTR_ALWAYSINLINE: return LLVMAlwaysInlineAttribute;<br>
> -   case AC_FUNC_ATTR_INREG: return LLVMInRegAttribute;<br>
> -   case AC_FUNC_ATTR_NOALIAS: return LLVMNoAliasAttribute;<br>
> -   case AC_FUNC_ATTR_NOUNWIND: return LLVMNoUnwindAttribute;<br>
> -   case AC_FUNC_ATTR_READNONE: return LLVMReadNoneAttribute;<br>
> -   case AC_FUNC_ATTR_READONLY: return LLVMReadOnlyAttribute;<br>
> -   default:<br>
> -          fprintf(stderr, "Unhandled function attribute: %x\n", attr);<br>
> -          return 0;<br>
> -   }<br>
> -}<br>
> -<br>
> -#else<br>
> -<br>
>  static const char *attr_to_str(enum ac_func_attr attr)<br>
>  {<br>
>     switch (attr) {<br>
>     case AC_FUNC_ATTR_ALWAYSINLINE: return "alwaysinline";<br>
>     case AC_FUNC_ATTR_INREG: return "inreg";<br>
>     case AC_FUNC_ATTR_NOALIAS: return "noalias";<br>
>     case AC_FUNC_ATTR_NOUNWIND: return "nounwind";<br>
>     case AC_FUNC_ATTR_READNONE: return "readnone";<br>
>     case AC_FUNC_ATTR_READONLY: return "readonly";<br>
>     case AC_FUNC_ATTR_WRITEONLY: return "writeonly";<br>
>     case AC_FUNC_ATTR_INACCESSIBLE_MEM_<wbr>ONLY: return "inaccessiblememonly";<br>
>     case AC_FUNC_ATTR_CONVERGENT: return "convergent";<br>
>     default:<br>
>            fprintf(stderr, "Unhandled function attribute: %x\n", attr);<br>
>            return 0;<br>
>     }<br>
>  }<br>
><br>
> -#endif<br>
> -<br>
>  void<br>
>  ac_add_function_attr(<wbr>LLVMContextRef ctx, LLVMValueRef function,<br>
>                       int attr_idx, enum ac_func_attr attr)<br>
>  {<br>
> -#if HAVE_LLVM < 0x0400<br>
> -   LLVMAttribute llvm_attr = ac_attr_to_llvm_attr(attr);<br>
> -   if (attr_idx == -1) {<br>
> -      LLVMAddFunctionAttr(function, llvm_attr);<br>
> -   } else {<br>
> -      LLVMAddAttribute(LLVMGetParam(<wbr>function, attr_idx - 1), llvm_attr);<br>
> -   }<br>
> -#else<br>
>     const char *attr_name = attr_to_str(attr);<br>
>     unsigned kind_id = LLVMGetEnumAttributeKindForNam<wbr>e(attr_name,<br>
>                                                        strlen(attr_name));<br>
>     LLVMAttributeRef llvm_attr = LLVMCreateEnumAttribute(ctx, kind_id, 0);<br>
><br>
>     if (LLVMIsAFunction(function))<br>
>        LLVMAddAttributeAtIndex(<wbr>function, attr_idx, llvm_attr);<br>
>     else<br>
>        LLVMAddCallSiteAttribute(<wbr>function, attr_idx, llvm_attr);<br>
> -#endif<br>
>  }<br>
><br>
>  void ac_add_func_attributes(<wbr>LLVMContextRef ctx, LLVMValueRef function,<br>
>                             unsigned attrib_mask)<br>
>  {<br>
>         attrib_mask |= AC_FUNC_ATTR_NOUNWIND;<br>
>         attrib_mask &= ~AC_FUNC_ATTR_LEGACY;<br>
><br>
>         while (attrib_mask) {<br>
>                 enum ac_func_attr attr = 1u << u_bit_scan(&attrib_mask);<br>
> diff --git a/src/amd/common/ac_llvm_util.<wbr>h b/src/amd/common/ac_llvm_util.<wbr>h<br>
> index 29dc0c1..3cf385a 100644<br>
> --- a/src/amd/common/ac_llvm_util.<wbr>h<br>
> +++ b/src/amd/common/ac_llvm_util.<wbr>h<br>
> @@ -35,23 +35,23 @@<br>
>  extern "C" {<br>
>  #endif<br>
><br>
>  enum ac_func_attr {<br>
>         AC_FUNC_ATTR_ALWAYSINLINE = (1 << 0),<br>
>         AC_FUNC_ATTR_INREG        = (1 << 2),<br>
>         AC_FUNC_ATTR_NOALIAS      = (1 << 3),<br>
>         AC_FUNC_ATTR_NOUNWIND     = (1 << 4),<br>
>         AC_FUNC_ATTR_READNONE     = (1 << 5),<br>
>         AC_FUNC_ATTR_READONLY     = (1 << 6),<br>
> -       AC_FUNC_ATTR_WRITEONLY    = HAVE_LLVM >= 0x0400 ? (1 << 7) : 0,<br>
> -       AC_FUNC_ATTR_INACCESSIBLE_MEM_<wbr>ONLY = HAVE_LLVM >= 0x0400 ? (1 << 8) : 0,<br>
> -       AC_FUNC_ATTR_CONVERGENT = HAVE_LLVM >= 0x0400 ? (1 << 9) : 0,<br>
> +       AC_FUNC_ATTR_WRITEONLY    = (1 << 7),<br>
> +       AC_FUNC_ATTR_INACCESSIBLE_MEM_<wbr>ONLY = (1 << 8),<br>
> +       AC_FUNC_ATTR_CONVERGENT = (1 << 9),<br>
><br>
>         /* Legacy intrinsic that needs attributes on function declarations<br>
>          * and they must match the internal LLVM definition exactly, otherwise<br>
>          * intrinsic selection fails.<br>
>          */<br>
>         AC_FUNC_ATTR_LEGACY       = (1u << 31),<br>
>  };<br>
><br>
>  enum ac_target_machine_options {<br>
>         AC_TM_SUPPORTS_SPILL = (1 << 0),<br>
> @@ -87,28 +87,26 @@ LLVMBuilderRef ac_create_builder(<wbr>LLVMContextRef ctx,<br>
><br>
>  void<br>
>  ac_llvm_add_target_dep_<wbr>function_attr(LLVMValueRef F,<br>
>                                      const char *name, int value);<br>
><br>
>  static inline unsigned<br>
>  ac_get_load_intr_attribs(bool can_speculate)<br>
>  {<br>
>         /* READNONE means writes can't affect it, while READONLY means that<br>
>          * writes can affect it. */<br>
> -       return can_speculate && HAVE_LLVM >= 0x0400 ?<br>
> -                                AC_FUNC_ATTR_READNONE :<br>
> -                                AC_FUNC_ATTR_READONLY;<br>
> +       return can_speculate ? AC_FUNC_ATTR_READNONE :<br>
> +                              AC_FUNC_ATTR_READONLY;<br>
>  }<br>
><br>
>  static inline unsigned<br>
>  ac_get_store_intr_attribs(bool writeonly_memory)<br>
>  {<br>
> -       return writeonly_memory && HAVE_LLVM >= 0x0400 ?<br>
> -                                 AC_FUNC_ATTR_INACCESSIBLE_MEM_<wbr>ONLY :<br>
> +       return writeonly_memory ? AC_FUNC_ATTR_INACCESSIBLE_MEM_<wbr>ONLY :<br>
>                                   AC_FUNC_ATTR_WRITEONLY;<br>
>  }<br>
><br>
>  #ifdef __cplusplus<br>
>  }<br>
>  #endif<br>
><br>
>  #endif /* AC_LLVM_UTIL_H */<br>
> diff --git a/src/amd/common/ac_nir_to_<wbr>llvm.c b/src/amd/common/ac_nir_to_<wbr>llvm.c<br>
> index 0f7d625..cfcd217 100644<br>
> --- a/src/amd/common/ac_nir_to_<wbr>llvm.c<br>
> +++ b/src/amd/common/ac_nir_to_<wbr>llvm.c<br>
> @@ -3628,32 +3628,24 @@ static LLVMValueRef visit_image_load(struct ac_nir_context *ctx,<br>
>                              dim == GLSL_SAMPLER_DIM_3D ||<br>
>                              dim == GLSL_SAMPLER_DIM_SUBPASS ||<br>
>                              dim == GLSL_SAMPLER_DIM_SUBPASS_MS;<br>
>                 LLVMValueRef da = is_da ? ctx->ac.i1true : ctx->ac.i1false;<br>
>                 LLVMValueRef glc = ctx->ac.i1false;<br>
>                 LLVMValueRef slc = ctx->ac.i1false;<br>
><br>
>                 params[0] = get_image_coords(ctx, instr);<br>
>                 params[1] = get_sampler_desc(ctx, instr->variables[0], AC_DESC_IMAGE, NULL, true, false);<br>
>                 params[2] = LLVMConstInt(ctx->ac.i32, 15, false); /* dmask */<br>
> -               if (HAVE_LLVM <= 0x0309) {<br>
> -                       params[3] = ctx->ac.i1false;  /* r128 */<br>
> -                       params[4] = da;<br>
> -                       params[5] = glc;<br>
> -                       params[6] = slc;<br>
> -               } else {<br>
> -                       LLVMValueRef lwe = ctx->ac.i1false;<br>
> -                       params[3] = glc;<br>
> -                       params[4] = slc;<br>
> -                       params[5] = lwe;<br>
> -                       params[6] = da;<br>
> -               }<br>
> +               params[3] = glc;<br>
> +               params[4] = slc;<br>
> +               params[5] = ctx->ac.i1false;<br>
> +               params[6] = da;<br>
><br>
>                 ac_get_image_intr_name("llvm.<wbr>amdgcn.image.load",<br>
>                                        ctx->ac.v4f32, /* vdata */<br>
>                                        LLVMTypeOf(params[0]), /* coords */<br>
>                                        LLVMTypeOf(params[1]), /* rsrc */<br>
>                                        intrinsic_name, sizeof(intrinsic_name));<br>
><br>
>                 res = ac_build_intrinsic(&ctx->ac, intrinsic_name, ctx->ac.v4f32,<br>
>                                          params, 7, AC_FUNC_ATTR_READONLY);<br>
>         }<br>
> @@ -3687,32 +3679,24 @@ static void visit_image_store(struct ac_nir_context *ctx,<br>
>                 bool is_da = glsl_sampler_type_is_array(<wbr>type) ||<br>
>                              dim == GLSL_SAMPLER_DIM_CUBE ||<br>
>                              dim == GLSL_SAMPLER_DIM_3D;<br>
>                 LLVMValueRef da = is_da ? ctx->ac.i1true : ctx->ac.i1false;<br>
>                 LLVMValueRef slc = ctx->ac.i1false;<br>
><br>
>                 params[0] = ac_to_float(&ctx->ac, get_src(ctx, instr->src[2]));<br>
>                 params[1] = get_image_coords(ctx, instr); /* coords */<br>
>                 params[2] = get_sampler_desc(ctx, instr->variables[0], AC_DESC_IMAGE, NULL, true, true);<br>
>                 params[3] = LLVMConstInt(ctx->ac.i32, 15, false); /* dmask */<br>
> -               if (HAVE_LLVM <= 0x0309) {<br>
> -                       params[4] = ctx->ac.i1false;  /* r128 */<br>
> -                       params[5] = da;<br>
> -                       params[6] = glc;<br>
> -                       params[7] = slc;<br>
> -               } else {<br>
> -                       LLVMValueRef lwe = ctx->ac.i1false;<br>
> -                       params[4] = glc;<br>
> -                       params[5] = slc;<br>
> -                       params[6] = lwe;<br>
> -                       params[7] = da;<br>
> -               }<br>
> +               params[4] = glc;<br>
> +               params[5] = slc;<br>
> +               params[6] = ctx->ac.i1false;<br>
> +               params[7] = da;<br>
><br>
>                 ac_get_image_intr_name("llvm.<wbr>amdgcn.image.store",<br>
>                                        LLVMTypeOf(params[0]), /* vdata */<br>
>                                        LLVMTypeOf(params[1]), /* coords */<br>
>                                        LLVMTypeOf(params[2]), /* rsrc */<br>
>                                        intrinsic_name, sizeof(intrinsic_name));<br>
><br>
>                 ac_build_intrinsic(&ctx->ac, intrinsic_name, ctx->ac.voidt,<br>
>                                    params, 8, 0);<br>
>         }<br>
> diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c<br>
> index aea723c..9fda419 100644<br>
> --- a/src/amd/vulkan/radv_device.c<br>
> +++ b/src/amd/vulkan/radv_device.c<br>
> @@ -1106,25 +1106,21 @@ VkResult radv_CreateDevice(<br>
>         device->pbb_allowed = device->physical_device->rad_<wbr>info.chip_class >= GFX9 &&<br>
>                               (device->instance->perftest_<wbr>flags & RADV_PERFTEST_BINNING);<br>
><br>
>         /* Disabled and not implemented for now. */<br>
>         device->dfsm_allowed = device->pbb_allowed && false;<br>
><br>
>  #ifdef ANDROID<br>
>         device->always_use_syncobj = device->physical_device->rad_<wbr>info.has_syncobj_wait_for_<wbr>submit;<br>
>  #endif<br>
><br>
> -#if HAVE_LLVM < 0x0400<br>
> -       device->llvm_supports_spill = false;<br>
> -#else<br>
>         device->llvm_supports_spill = true;<br>
> -#endif<br>
><br>
>         /* The maximum number of scratch waves. Scratch space isn't divided<br>
>          * evenly between CUs. The number is only a function of the number of CUs.<br>
>          * We can decrease the constant to decrease the scratch buffer size.<br>
>          *<br>
>          * sctx->scratch_waves must be >= the maximum posible size of<br>
>          * 1 threadgroup, so that the hw doesn't hang from being unable<br>
>          * to start any.<br>
>          *<br>
>          * The recommended value is 4 per CU at most. Higher numbers don't<br>
> diff --git a/src/gallium/drivers/<wbr>radeonsi/si_compute.c b/src/gallium/drivers/<wbr>radeonsi/si_compute.c<br>
> index ac4fab3..91d6810 100644<br>
> --- a/src/gallium/drivers/<wbr>radeonsi/si_compute.c<br>
> +++ b/src/gallium/drivers/<wbr>radeonsi/si_compute.c<br>
> @@ -152,22 +152,21 @@ static void *si_create_compute_state(<br>
>         struct si_context *sctx = (struct si_context *)ctx;<br>
>         struct si_screen *sscreen = (struct si_screen *)ctx->screen;<br>
>         struct si_compute *program = CALLOC_STRUCT(si_compute);<br>
><br>
>         pipe_reference_init(&program-><wbr>reference, 1);<br>
>         program->screen = (struct si_screen *)ctx->screen;<br>
>         program->ir_type = cso->ir_type;<br>
>         program->local_size = cso->req_local_mem;<br>
>         program->private_size = cso->req_private_mem;<br>
>         program->input_size = cso->req_input_mem;<br>
> -       program->use_code_object_v2 = HAVE_LLVM >= 0x0400 &&<br>
> -                                       cso->ir_type == PIPE_SHADER_IR_NATIVE;<br>
> +       program->use_code_object_v2 = cso->ir_type == PIPE_SHADER_IR_NATIVE;<br>
><br>
>         if (cso->ir_type == PIPE_SHADER_IR_TGSI) {<br>
>                 program->tokens = tgsi_dup_tokens(cso->prog);<br>
>                 if (!program->tokens) {<br>
>                         FREE(program);<br>
>                         return NULL;<br>
>                 }<br>
><br>
>                 program->compiler_ctx_state.<wbr>debug = sctx->debug;<br>
>                 program->compiler_ctx_state.<wbr>is_debug_context = sctx->is_debug;<br>
> diff --git a/src/gallium/drivers/<wbr>radeonsi/si_get.c b/src/gallium/drivers/<wbr>radeonsi/si_get.c<br>
> index 36e6018..46d5eee 100644<br>
> --- a/src/gallium/drivers/<wbr>radeonsi/si_get.c<br>
> +++ b/src/gallium/drivers/<wbr>radeonsi/si_get.c<br>
> @@ -182,24 +182,22 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)<br>
>         case PIPE_CAP_MEMOBJ:<br>
>         case PIPE_CAP_LOAD_CONSTBUF:<br>
>         case PIPE_CAP_INT64:<br>
>         case PIPE_CAP_INT64_DIVMOD:<br>
>         case PIPE_CAP_TGSI_CLOCK:<br>
>         case PIPE_CAP_CAN_BIND_CONST_<wbr>BUFFER_AS_VERTEX:<br>
>         case PIPE_CAP_ALLOW_MAPPED_BUFFERS_<wbr>DURING_EXECUTION:<br>
>         case PIPE_CAP_TGSI_ANY_REG_AS_<wbr>ADDRESS:<br>
>         case PIPE_CAP_SIGNED_VERTEX_BUFFER_<wbr>OFFSET:<br>
>         case PIPE_CAP_TGSI_FS_FBFETCH:<br>
> -               return 1;<br>
> -<br>
>         case PIPE_CAP_TGSI_VOTE:<br>
> -               return HAVE_LLVM >= 0x0400;<br>
> +               return 1;<br>
><br>
>         case PIPE_CAP_TGSI_BALLOT:<br>
>                 return HAVE_LLVM >= 0x0500;<br>
><br>
>         case PIPE_CAP_RESOURCE_FROM_USER_<wbr>MEMORY:<br>
>                 return !SI_BIG_ENDIAN && sscreen->info.has_userptr;<br>
><br>
>         case PIPE_CAP_DEVICE_RESET_STATUS_<wbr>QUERY:<br>
>                 return (sscreen->info.drm_major == 2 &&<br>
>                         sscreen->info.drm_minor >= 43) ||<br>
> @@ -737,28 +735,23 @@ static unsigned get_max_threads_per_block(<wbr>struct si_screen *screen,<br>
>  static int si_get_compute_param(struct pipe_screen *screen,<br>
>                                 enum pipe_shader_ir ir_type,<br>
>                                 enum pipe_compute_cap param,<br>
>                                 void *ret)<br>
>  {<br>
>         struct si_screen *sscreen = (struct si_screen *)screen;<br>
><br>
>         //TODO: select these params by asic<br>
>         switch (param) {<br>
>         case PIPE_COMPUTE_CAP_IR_TARGET: {<br>
> -               const char *gpu;<br>
> -               const char *triple;<br>
> -<br>
> -               if (HAVE_LLVM < 0x0400)<br>
> -                       triple = "amdgcn--";<br>
> -               else<br>
> -                       triple = "amdgcn-mesa-mesa3d";<br>
> +               const char *gpu, *triple;<br>
><br>
> +               triple = "amdgcn-mesa-mesa3d";<br>
>                 gpu = ac_get_llvm_processor_name(<wbr>sscreen->info.family);<br>
>                 if (ret) {<br>
>                         sprintf(ret, "%s-%s", gpu, triple);<br>
>                 }<br>
>                 /* +2 for dash and terminating NIL byte */<br>
>                 return (strlen(triple) + strlen(gpu) + 2) * sizeof(char);<br>
>         }<br>
>         case PIPE_COMPUTE_CAP_GRID_<wbr>DIMENSION:<br>
>                 if (ret) {<br>
>                         uint64_t *grid_dimension = ret;<br>
> diff --git a/src/gallium/drivers/<wbr>radeonsi/si_shader_tgsi_mem.c b/src/gallium/drivers/<wbr>radeonsi/si_shader_tgsi_mem.c<br>
> index b5fad34..ec1de40 100644<br>
> --- a/src/gallium/drivers/<wbr>radeonsi/si_shader_tgsi_mem.c<br>
> +++ b/src/gallium/drivers/<wbr>radeonsi/si_shader_tgsi_mem.c<br>
> @@ -289,31 +289,30 @@ static void image_append_args(<br>
>         LLVMValueRef i1true = LLVMConstInt(ctx->i1, 1, 0);<br>
>         LLVMValueRef r128 = i1false;<br>
>         LLVMValueRef da = tgsi_is_array_image(target) ? i1true : i1false;<br>
>         LLVMValueRef glc =<br>
>                 force_glc ||<br>
>                 inst->Memory.Qualifier & (TGSI_MEMORY_COHERENT | TGSI_MEMORY_VOLATILE) ?<br>
>                 i1true : i1false;<br>
>         LLVMValueRef slc = i1false;<br>
>         LLVMValueRef lwe = i1false;<br>
><br>
> -       if (atomic || (HAVE_LLVM <= 0x0309)) {<br>
> +       if (atomic) {<br>
>                 emit_data->args[emit_data-><wbr>arg_count++] = r128;<br>
>                 emit_data->args[emit_data-><wbr>arg_count++] = da;<br>
>                 if (!atomic) {<br>
>                         emit_data->args[emit_data-><wbr>arg_count++] = glc;<br>
>                 }<br>
>                 emit_data->args[emit_data-><wbr>arg_count++] = slc;<br>
>                 return;<br>
>         }<br>
><br>
> -       /* HAVE_LLVM >= 0x0400 */<br>
>         emit_data->args[emit_data-><wbr>arg_count++] = glc;<br>
>         emit_data->args[emit_data-><wbr>arg_count++] = slc;<br>
>         emit_data->args[emit_data-><wbr>arg_count++] = lwe;<br>
>         emit_data->args[emit_data-><wbr>arg_count++] = da;<br>
>  }<br>
><br>
>  /**<br>
>   * Append the resource and indexing arguments for buffer intrinsics.<br>
>   *<br>
>   * \param rsrc the v4i32 buffer resource<br>
> diff --git a/src/gallium/drivers/<wbr>radeonsi/si_shader_tgsi_setup.<wbr>c b/src/gallium/drivers/<wbr>radeonsi/si_shader_tgsi_setup.<wbr>c<br>
> index f70e2bd..44294f2 100644<br>
> --- a/src/gallium/drivers/<wbr>radeonsi/si_shader_tgsi_setup.<wbr>c<br>
> +++ b/src/gallium/drivers/<wbr>radeonsi/si_shader_tgsi_setup.<wbr>c<br>
> @@ -1371,24 +1371,22 @@ void si_llvm_optimize_module(struct si_shader_context *ctx)<br>
>         LLVMAddAlwaysInlinerPass(<wbr>gallivm->passmgr);<br>
><br>
>         /* This pass should eliminate all the load and store instructions */<br>
>         LLVMAddPromoteMemoryToRegister<wbr>Pass(gallivm->passmgr);<br>
><br>
>         /* Add some optimization passes */<br>
>         LLVMAddScalarReplAggregatesPas<wbr>s(gallivm->passmgr);<br>
>         LLVMAddLICMPass(gallivm-><wbr>passmgr);<br>
>         LLVMAddAggressiveDCEPass(<wbr>gallivm->passmgr);<br>
>         LLVMAddCFGSimplificationPass(<wbr>gallivm->passmgr);<br>
> -#if HAVE_LLVM >= 0x0400<br>
>         /* This is recommended by the instruction combining pass. */<br>
>         LLVMAddEarlyCSEMemSSAPass(<wbr>gallivm->passmgr);<br>
> -#endif<br>
>         LLVMAddInstructionCombiningPas<wbr>s(gallivm->passmgr);<br>
><br>
>         /* Run the pass */<br>
>         LLVMRunPassManager(gallivm-><wbr>passmgr, ctx->gallivm.module);<br>
><br>
>         LLVMDisposeBuilder(ctx->ac.<wbr>builder);<br>
>         LLVMDisposePassManager(<wbr>gallivm->passmgr);<br>
>         gallivm_dispose_target_<wbr>library_info(target_library_<wbr>info);<br>
>  }<br>
><br>
> --<br>
> 2.7.4<br>
><br>
</div></div>> ______________________________<wbr>_________________<br>
> mesa-dev mailing list<br>
> <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
> <a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</blockquote></div><br></div>