On Mon, 2016-11-07 at 18:44 +0000, Tom Stellard wrote:
> ---
> 
> Build tested only so far.
> 
>  src/gallium/auxiliary/draw/draw_llvm.c            |  6 +-
>  src/gallium/auxiliary/gallivm/lp_bld_intr.c       | 48 +++++++++++++++-
>  src/gallium/auxiliary/gallivm/lp_bld_intr.h       | 13 ++++-
>  src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c |  4 +-
>  src/gallium/drivers/radeonsi/si_shader.c          | 69 
> ++++++++++++-----------
>  src/gallium/drivers/radeonsi/si_shader_tgsi_alu.c | 24 ++++----
>  6 files changed, 112 insertions(+), 52 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/draw/draw_llvm.c 
> b/src/gallium/auxiliary/draw/draw_llvm.c
> index 5b4e2a1..5d87318 100644
> --- a/src/gallium/auxiliary/draw/draw_llvm.c
> +++ b/src/gallium/auxiliary/draw/draw_llvm.c
> @@ -1568,8 +1568,7 @@ draw_llvm_generate(struct draw_llvm *llvm, struct 
> draw_llvm_variant *variant,
>     LLVMSetFunctionCallConv(variant_func, LLVMCCallConv);
>     for (i = 0; i < num_arg_types; ++i)
>        if (LLVMGetTypeKind(arg_types[i]) == LLVMPointerTypeKind)
> -         LLVMAddAttribute(LLVMGetParam(variant_func, i),
> -                          LLVMNoAliasAttribute);
> +         lp_add_function_attr(variant_func, i + 1, "noalias", 7);
>  
>     context_ptr               = LLVMGetParam(variant_func, 0);
>     io_ptr                    = LLVMGetParam(variant_func, 1);
> @@ -2193,8 +2192,7 @@ draw_gs_llvm_generate(struct draw_llvm *llvm,
>  
>     for (i = 0; i < ARRAY_SIZE(arg_types); ++i)
>        if (LLVMGetTypeKind(arg_types[i]) == LLVMPointerTypeKind)
> -         LLVMAddAttribute(LLVMGetParam(variant_func, i),
> -                          LLVMNoAliasAttribute);
> +         lp_add_function_attr(variant_func, i + 1, "noalias", 7);
>  
>     context_ptr               = LLVMGetParam(variant_func, 0);
>     input_array               = LLVMGetParam(variant_func, 1);
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_intr.c 
> b/src/gallium/auxiliary/gallivm/lp_bld_intr.c
> index f12e735..55afe6d 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_intr.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_intr.c
> @@ -120,13 +120,53 @@ lp_declare_intrinsic(LLVMModuleRef module,
>  }
>  
>  
> +#if HAVE_LLVM < 0x0400
> +static LLVMAttribute str_to_attr(const char *attr_name, unsigned attr_len)
> +{
> +   if (!strncmp("alwaysinline", attr_name, attr_len)) {
> +      return LLVMAlwaysInlineAttribute;
> +   } else if (!strncmp("byval", attr_name, attr_len)) {
> +      return LLVMByValAttribute;
> +   } else if (!strncmp("inreg", attr_name, attr_len)) {
> +      return LLVMInRegAttribute;
> +   } else if (!strncmp("noalias", attr_name, attr_len)) {
> +      return LLVMNoAlliasAttribute;
> +   } else if (!strncmp("readnone", attr_name, attr_len)) {
> +      return LLVMReadNoneAttribute;
> +   } else if (!strncmp("readonly", attr_name, attr_len)) {
> +      return LLVMReadOnlyAttribute;
> +   } else {
> +      _debug_printf("Unhandled function attribute: %s\n", attr_name);
> +      return 0;
> +   }
> +}
> +#endif
> +
> +void
> +lp_add_function_attr(LLVMValueRef function,
> +                     unsigned attr_idx,
> +                     const char *attr_name,
> +                     unsigned attr_len)
> +{
> +
> +#if HAVE_LLVM < 0x0400
> +   LLVMAttribute attr = str_to_attr(attr_name, attr_len);
> +   LLVMAddFunctionAttr(function, attr);

I think this will fail with argument attributes, since it ignores
attr_idx. I think you need something like:

if (attr_idx == -1)
  LLVMAddFunctionAttr(function, attr);
else  
  LLVMAddAttribute(LLVMGetParam(function, i - 1), attr);

Jan

> +#else
> +   LLVMContextRef context = 
> LLVMGetModuleContext(LLVMGetGlobalParent(function));
> +   unsigned kind_id = LLVMGetEnumAttributeKindForName(attr_name, attr_len);
> +   LLVMAttributeRef attr = LLVMCreateEnumAttribute(context, kind_id, 0);
> +   LLVMAddAttributeAtIndex(function, attr_idx, attr);
> +#endif
> +}
> +
>  LLVMValueRef
>  lp_build_intrinsic(LLVMBuilderRef builder,
>                     const char *name,
>                     LLVMTypeRef ret_type,
>                     LLVMValueRef *args,
>                     unsigned num_args,
> -                   LLVMAttribute attr)
> +                   const char *attr_str)
>  {
>     LLVMModuleRef module = 
> LLVMGetGlobalParent(LLVMGetBasicBlockParent(LLVMGetInsertBlock(builder)));
>     LLVMValueRef function;
> @@ -145,10 +185,14 @@ lp_build_intrinsic(LLVMBuilderRef builder,
>  
>        function = lp_declare_intrinsic(module, name, ret_type, arg_types, 
> num_args);
>  
> +      if (attr_str) {
> +         lp_add_function_attr(function, -1, attr_str, sizeof(attr_str));
> +      }
> +
>        /* NoUnwind indicates that the intrinsic never raises a C++ exception.
>         * Set it for all intrinsics.
>         */
> -      LLVMAddFunctionAttr(function, attr | LLVMNoUnwindAttribute);
> +      lp_add_function_attr(function, -1, "nounwind", 8);
>  
>        if (gallivm_debug & GALLIVM_DEBUG_IR) {
>           lp_debug_dump_value(function);
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_intr.h 
> b/src/gallium/auxiliary/gallivm/lp_bld_intr.h
> index 7d80ac2..b4558dc 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_intr.h
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_intr.h
> @@ -60,13 +60,24 @@ lp_declare_intrinsic(LLVMModuleRef module,
>                       LLVMTypeRef *arg_types,
>                       unsigned num_args);
>  
> +void
> +lp_remove_attr(LLVMValueRef value,
> +               const char *attr_name,
> +               unsigned attr_len);
> +
> +void
> +lp_add_function_attr(LLVMValueRef function,
> +                     unsigned attr_idx,
> +                     const char *attr_name,
> +                     unsigned attr_len);
> +
>  LLVMValueRef
>  lp_build_intrinsic(LLVMBuilderRef builder,
>                     const char *name,
>                     LLVMTypeRef ret_type,
>                     LLVMValueRef *args,
>                     unsigned num_args,
> -                   LLVMAttribute attr);
> +                   const char *attr);
>  
>  
>  LLVMValueRef
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c 
> b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
> index 1477a72..91e79a2 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
> @@ -60,6 +60,7 @@
>  #include "lp_bld_struct.h"
>  #include "lp_bld_quad.h"
>  #include "lp_bld_pack.h"
> +#include "lp_bld_intr.h"
>  
>  
>  /**
> @@ -3316,7 +3317,8 @@ lp_build_sample_soa_func(struct gallivm_state *gallivm,
>  
>        for (i = 0; i < num_param; ++i) {
>           if(LLVMGetTypeKind(arg_types[i]) == LLVMPointerTypeKind) {
> -            LLVMAddAttribute(LLVMGetParam(function, i), 
> LLVMNoAliasAttribute);
> +
> +            lp_add_function_attr(function, i + 1, "noalias", 7);
>           }
>        }
>  
> diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
> b/src/gallium/drivers/radeonsi/si_shader.c
> index b170eb9..ce7b9cc 100644
> --- a/src/gallium/drivers/radeonsi/si_shader.c
> +++ b/src/gallium/drivers/radeonsi/si_shader.c
> @@ -407,7 +407,7 @@ static void declare_input_vs(
>       args[2] = buffer_index;
>       input = lp_build_intrinsic(gallivm->builder,
>               "llvm.SI.vs.load.input", ctx->v4f32, args, 3,
> -             LLVMReadNoneAttribute);
> +             "readnone");
>  
>       /* Break up the vec4 into individual components */
>       for (chan = 0; chan < 4; chan++) {
> @@ -841,7 +841,7 @@ static LLVMValueRef build_buffer_load(struct 
> si_shader_context *ctx,
>                        type_names[func]);
>  
>               return lp_build_intrinsic(gallivm->builder, name, types[func], 
> args,
> -                                       ARRAY_SIZE(args), 
> LLVMReadOnlyAttribute);
> +                                       ARRAY_SIZE(args), "readonly");
>       } else {
>               LLVMValueRef args[] = {
>                       LLVMBuildBitCast(gallivm->builder, rsrc, ctx->v16i8, 
> ""),
> @@ -872,7 +872,7 @@ static LLVMValueRef build_buffer_load(struct 
> si_shader_context *ctx,
>                        type_names[func], arg_type);
>  
>               return lp_build_intrinsic(gallivm->builder, name, types[func], 
> args,
> -                                       ARRAY_SIZE(args), 
> LLVMReadOnlyAttribute);
> +                                       ARRAY_SIZE(args), "readonly");
>       }
>  }
>  
> @@ -1159,14 +1159,14 @@ static LLVMValueRef fetch_input_gs(
>       value = lp_build_intrinsic(gallivm->builder,
>                                  "llvm.SI.buffer.load.dword.i32.i32",
>                                  ctx->i32, args, 9,
> -                                LLVMReadOnlyAttribute);
> +                                "readonly");
>       if (tgsi_type_is_64bit(type)) {
>               LLVMValueRef value2;
>               args[2] = lp_build_const_int32(gallivm, (param * 4 + swizzle + 
> 1) * 256);
>               value2 = lp_build_intrinsic(gallivm->builder,
>                                           "llvm.SI.buffer.load.dword.i32.i32",
>                                           ctx->i32, args, 9,
> -                                         LLVMReadOnlyAttribute);
> +                                         "readonly");
>               return si_llvm_emit_fetch_64bit(bld_base, type,
>                                               value, value2);
>       }
> @@ -1279,12 +1279,12 @@ static void interp_fs_input(struct si_shader_context 
> *ctx,
>                       args[1] = attr_number;
>                       front = lp_build_intrinsic(gallivm->builder, intr_name,
>                                               ctx->f32, args, args[3] ? 4 : 3,
> -                                             LLVMReadNoneAttribute);
> +                                             "readnone");
>  
>                       args[1] = back_attr_number;
>                       back = lp_build_intrinsic(gallivm->builder, intr_name,
>                                              ctx->f32, args, args[3] ? 4 : 3,
> -                                            LLVMReadNoneAttribute);
> +                                            "readnone");
>  
>                       result[chan] = LLVMBuildSelect(gallivm->builder,
>                                               is_face_positive,
> @@ -1301,7 +1301,7 @@ static void interp_fs_input(struct si_shader_context 
> *ctx,
>               args[3] = interp_param;
>               result[0] = lp_build_intrinsic(gallivm->builder, intr_name,
>                                       ctx->f32, args, args[3] ? 4 : 3,
> -                                     LLVMReadNoneAttribute);
> +                                     "readnone");
>               result[1] =
>               result[2] = lp_build_const_float(gallivm, 0.0f);
>               result[3] = lp_build_const_float(gallivm, 1.0f);
> @@ -1316,7 +1316,7 @@ static void interp_fs_input(struct si_shader_context 
> *ctx,
>                       args[3] = interp_param;
>                       result[chan] = lp_build_intrinsic(gallivm->builder, 
> intr_name,
>                                               ctx->f32, args, args[3] ? 4 : 3,
> -                                             LLVMReadNoneAttribute);
> +                                             "readnone");
>               }
>       }
>  }
> @@ -1404,18 +1404,18 @@ static LLVMValueRef get_thread_id(struct 
> si_shader_context *ctx)
>  
>       if (HAVE_LLVM < 0x0308) {
>               tid = lp_build_intrinsic(gallivm->builder, "llvm.SI.tid",
> -                             ctx->i32,   NULL, 0, LLVMReadNoneAttribute);
> +                             ctx->i32,   NULL, 0, "readnone");
>       } else {
>               LLVMValueRef tid_args[2];
>               tid_args[0] = lp_build_const_int32(gallivm, 0xffffffff);
>               tid_args[1] = lp_build_const_int32(gallivm, 0);
>               tid_args[1] = lp_build_intrinsic(gallivm->builder,
>                                       "llvm.amdgcn.mbcnt.lo", ctx->i32,
> -                                     tid_args, 2, LLVMReadNoneAttribute);
> +                                     tid_args, 2, "readnone");
>  
>               tid = lp_build_intrinsic(gallivm->builder,
>                                       "llvm.amdgcn.mbcnt.hi", ctx->i32,
> -                                     tid_args, 2, LLVMReadNoneAttribute);
> +                                     tid_args, 2, "readnone");
>       }
>       set_range_metadata(ctx, tid, 0, 64);
>       return tid;
> @@ -1432,7 +1432,7 @@ static LLVMValueRef buffer_load_const(struct 
> si_shader_context *ctx,
>       LLVMValueRef args[2] = {resource, offset};
>  
>       return lp_build_intrinsic(builder, "llvm.SI.load.const", ctx->f32, 
> args, 2,
> -                            LLVMReadNoneAttribute);
> +                            "readnone");
>  }
>  
>  static LLVMValueRef load_sample_position(struct si_shader_context 
> *radeon_bld, LLVMValueRef sample_id)
> @@ -1670,7 +1670,7 @@ static void declare_system_value(
>               value = lp_build_intrinsic(gallivm->builder,
>                                          "llvm.amdgcn.ps.live",
>                                          ctx->i1, NULL, 0,
> -                                        LLVMReadNoneAttribute);
> +                                        "readnone");
>               value = LLVMBuildNot(gallivm->builder, value, "");
>               value = LLVMBuildSExt(gallivm->builder, value, ctx->i32, "");
>               break;
> @@ -1883,7 +1883,7 @@ static void si_llvm_init_export_args(struct 
> lp_build_tgsi_context *bld_base,
>                       packed = lp_build_intrinsic(base->gallivm->builder,
>                                                   "llvm.SI.packf16",
>                                                   ctx->i32, pack_args, 2,
> -                                                 LLVMReadNoneAttribute);
> +                                                 "readnone");
>                       args[chan + 5] =
>                               LLVMBuildBitCast(base->gallivm->builder,
>                                                packed, ctx->f32, "");
> @@ -2028,7 +2028,7 @@ static LLVMValueRef 
> si_scale_alpha_by_sample_mask(struct lp_build_tgsi_context *
>  
>       coverage = lp_build_intrinsic(gallivm->builder, "llvm.ctpop.i32",
>                                  ctx->i32,
> -                                &coverage, 1, LLVMReadNoneAttribute);
> +                                &coverage, 1, "readnone");
>  
>       coverage = LLVMBuildUIToFP(gallivm->builder, coverage,
>                                  ctx->f32, "");
> @@ -3469,7 +3469,7 @@ static void load_emit_buffer(struct si_shader_context 
> *ctx,
>       emit_data->output[emit_data->chan] = lp_build_intrinsic(
>                       builder, intrinsic_name, dst_type,
>                       emit_data->args, emit_data->arg_count,
> -                     LLVMReadOnlyAttribute);
> +                     "readonly");
>  }
>  
>  static LLVMValueRef get_memory_ptr(struct si_shader_context *ctx,
> @@ -3574,7 +3574,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,
> -                             LLVMReadOnlyAttribute);
> +                             "readonly");
>       } else {
>               get_image_intr_name("llvm.amdgcn.image.load",
>                               emit_data->dst_type,            /* vdata */
> @@ -3586,7 +3586,7 @@ static void load_emit(
>                       lp_build_intrinsic(
>                               builder, intrinsic_name, emit_data->dst_type,
>                               emit_data->args, emit_data->arg_count,
> -                             LLVMReadOnlyAttribute);
> +                             "readonly");
>       }
>  }
>  
> @@ -4014,7 +4014,7 @@ static void resq_emit(
>               out = lp_build_intrinsic(
>                       builder, "llvm.SI.getresinfo.i32", emit_data->dst_type,
>                       emit_data->args, emit_data->arg_count,
> -                     LLVMReadNoneAttribute);
> +                     "readnone");
>  
>               /* Divide the number of layers by 6 to get the number of cubes. 
> */
>               if (inst->Memory.Texture == TGSI_TEXTURE_CUBE_ARRAY) {
> @@ -4248,7 +4248,7 @@ static void txq_emit(const struct lp_build_tgsi_action 
> *action,
>       emit_data->output[emit_data->chan] = lp_build_intrinsic(
>               base->gallivm->builder, "llvm.SI.getresinfo.i32",
>               emit_data->dst_type, emit_data->args, emit_data->arg_count,
> -             LLVMReadNoneAttribute);
> +             "readnone");
>  
>       /* Divide the number of layers by 6 to get the number of cubes. */
>       if (target == TGSI_TEXTURE_CUBE_ARRAY ||
> @@ -4666,7 +4666,7 @@ static void si_lower_gather4_integer(struct 
> si_shader_context *ctx,
>       emit_data->output[emit_data->chan] =
>               lp_build_intrinsic(builder, intr_name, emit_data->dst_type,
>                                  emit_data->args, emit_data->arg_count,
> -                                LLVMReadNoneAttribute);
> +                                "readnone");
>  }
>  
>  static void build_tex_intrinsic(const struct lp_build_tgsi_action *action,
> @@ -4690,7 +4690,7 @@ static void build_tex_intrinsic(const struct 
> lp_build_tgsi_action *action,
>                       base->gallivm->builder,
>                       "llvm.SI.vs.load.input", emit_data->dst_type,
>                       emit_data->args, emit_data->arg_count,
> -                     LLVMReadNoneAttribute);
> +                     "readnone");
>               return;
>       }
>  
> @@ -4767,7 +4767,7 @@ static void build_tex_intrinsic(const struct 
> lp_build_tgsi_action *action,
>       emit_data->output[emit_data->chan] = lp_build_intrinsic(
>               base->gallivm->builder, intr_name, emit_data->dst_type,
>               emit_data->args, emit_data->arg_count,
> -             LLVMReadNoneAttribute);
> +             "readnone");
>  }
>  
>  static void si_llvm_emit_txqs(
> @@ -4865,13 +4865,13 @@ static void si_llvm_emit_ddxy(
>               args[1] = val;
>               tl = lp_build_intrinsic(gallivm->builder,
>                                       "llvm.amdgcn.ds.bpermute", ctx->i32,
> -                                     args, 2, LLVMReadNoneAttribute);
> +                                     args, 2, "readnone");
>  
>               args[0] = LLVMBuildMul(gallivm->builder, trbl_tid,
>                                      lp_build_const_int32(gallivm, 4), "");
>               trbl = lp_build_intrinsic(gallivm->builder,
>                                         "llvm.amdgcn.ds.bpermute", ctx->i32,
> -                                       args, 2, LLVMReadNoneAttribute);
> +                                       args, 2, "readnone");
>       } else {
>               LLVMValueRef store_ptr, load_ptr0, load_ptr1;
>  
> @@ -5054,7 +5054,7 @@ static void build_interp_intrinsic(const struct 
> lp_build_tgsi_action *action,
>               emit_data->output[chan] =
>                       lp_build_intrinsic(gallivm->builder, intr_name,
>                                          ctx->f32, args, args[3] ? 4 : 3,
> -                                        LLVMReadNoneAttribute);
> +                                        "readnone");
>       }
>  }
>  
> @@ -5223,10 +5223,10 @@ static void si_create_function(struct 
> si_shader_context *ctx,
>                * SGPR spilling significantly.
>                */
>               if (LLVMGetTypeKind(LLVMTypeOf(P)) == LLVMPointerTypeKind) {
> -                     LLVMAddAttribute(P, LLVMByValAttribute);
> +                     lp_add_function_attr(ctx->main_fn, i + 1, "byval", 5);
>                       lp_add_attr_dereferenceable(P, UINT64_MAX);
>               } else
> -                     LLVMAddAttribute(P, LLVMInRegAttribute);
> +                     lp_add_function_attr(ctx->main_fn, i + 1, "inreg", 5);
>       }
>  
>       if (ctx->screen->b.debug_flags & DBG_UNSAFE_MATH) {
> @@ -6177,7 +6177,7 @@ si_generate_gs_copy_shader(struct si_screen *sscreen,
>                                                
> lp_build_intrinsic(gallivm->builder,
>                                                                
> "llvm.SI.buffer.load.dword.i32.i32",
>                                                                ctx.i32, args, 
> 9,
> -                                                              
> LLVMReadOnlyAttribute),
> +                                                              "readonly"),
>                                                ctx.f32, "");
>               }
>       }
> @@ -6878,7 +6878,7 @@ static void si_build_wrapper_function(struct 
> si_shader_context *ctx,
>       unsigned gprs;
>  
>       for (unsigned i = 0; i < num_parts; ++i) {
> -             LLVMAddFunctionAttr(parts[i], LLVMAlwaysInlineAttribute);
> +             lp_add_function_attr(parts[i], -1, "alwaysinline", 12);
>               LLVMSetLinkage(parts[i], LLVMPrivateLinkage);
>       }
>  
> @@ -6989,8 +6989,13 @@ static void si_build_wrapper_function(struct 
> si_shader_context *ctx,
>                       is_sgpr = ac_is_sgpr_param(param);
>  
>                       if (is_sgpr) {
> +#if HAVE_LLVM < 0x0400
>                               LLVMRemoveAttribute(param, LLVMByValAttribute);
> -                             LLVMAddAttribute(param, LLVMInRegAttribute);
> +#else
> +                             unsigned kind_id = 
> LLVMGetEnumAttributeKindForName("byval", 5);
> +                             LLVMRemoveEnumAttributeAtIndex(parts[part], 
> param_idx + 1, kind_id);
> +#endif
> +                             lp_add_function_attr(parts[part], param_idx + 
> 1, "inreg", 5);
>                       }
>  
>                       assert(out_idx + param_size <= (is_sgpr ? num_out_sgpr 
> : num_out));
> diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_alu.c 
> b/src/gallium/drivers/radeonsi/si_shader_tgsi_alu.c
> index 18e905b..3260a46 100644
> --- a/src/gallium/drivers/radeonsi/si_shader_tgsi_alu.c
> +++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_alu.c
> @@ -399,7 +399,7 @@ static void emit_frac(const struct lp_build_tgsi_action 
> *action,
>  
>       LLVMValueRef floor = lp_build_intrinsic(builder, intr, 
> emit_data->dst_type,
>                                               &emit_data->args[0], 1,
> -                                             LLVMReadNoneAttribute);
> +                                             "readnone");
>       emit_data->output[emit_data->chan] = LLVMBuildFSub(builder,
>                       emit_data->args[0], floor, "");
>  }
> @@ -449,7 +449,7 @@ build_tgsi_intrinsic_nomem(const struct 
> lp_build_tgsi_action *action,
>       emit_data->output[emit_data->chan] =
>               lp_build_intrinsic(base->gallivm->builder, action->intr_name,
>                                  emit_data->dst_type, emit_data->args,
> -                                emit_data->arg_count, LLVMReadNoneAttribute);
> +                                emit_data->arg_count, "readnone");
>  }
>  
>  static void emit_bfi(const struct lp_build_tgsi_action *action,
> @@ -507,7 +507,7 @@ static void emit_bfe(const struct lp_build_tgsi_action 
> *action,
>  
>       bfe_sm5 = lp_build_intrinsic(builder, action->intr_name,
>                                    emit_data->dst_type, emit_data->args,
> -                                  emit_data->arg_count, 
> LLVMReadNoneAttribute);
> +                                  emit_data->arg_count, "readnone");
>  
>       /* Correct for GLSL semantics. */
>       cond = LLVMBuildICmp(builder, LLVMIntUGE, emit_data->args[2],
> @@ -539,7 +539,7 @@ static void emit_lsb(const struct lp_build_tgsi_action 
> *action,
>       LLVMValueRef lsb =
>               lp_build_intrinsic(gallivm->builder, "llvm.cttz.i32",
>                               emit_data->dst_type, args, ARRAY_SIZE(args),
> -                             LLVMReadNoneAttribute);
> +                             "readnone");
>  
>       /* TODO: We need an intrinsic to skip this conditional. */
>       /* Check for zero: */
> @@ -566,7 +566,7 @@ static void emit_umsb(const struct lp_build_tgsi_action 
> *action,
>       LLVMValueRef msb =
>               lp_build_intrinsic(builder, "llvm.ctlz.i32",
>                               emit_data->dst_type, args, ARRAY_SIZE(args),
> -                             LLVMReadNoneAttribute);
> +                             "readnone");
>  
>       /* The HW returns the last bit index from MSB, but TGSI wants
>        * the index from LSB. Invert it by doing "31 - msb". */
> @@ -593,7 +593,7 @@ static void emit_imsb(const struct lp_build_tgsi_action 
> *action,
>       LLVMValueRef msb =
>               lp_build_intrinsic(builder, "llvm.AMDGPU.flbit.i32",
>                               emit_data->dst_type, &arg, 1,
> -                             LLVMReadNoneAttribute);
> +                             "readnone");
>  
>       /* The HW returns the last bit index from MSB, but TGSI wants
>        * the index from LSB. Invert it by doing "31 - msb". */
> @@ -917,13 +917,13 @@ static LLVMValueRef build_cube_intrinsic(struct 
> gallivm_state *gallivm,
>               LLVMValueRef out[4];
>  
>               out[0] = lp_build_intrinsic(gallivm->builder, 
> "llvm.amdgcn.cubetc",
> -                                         f32, in, 3, LLVMReadNoneAttribute);
> +                                         f32, in, 3, "readnone");
>               out[1] = lp_build_intrinsic(gallivm->builder, 
> "llvm.amdgcn.cubesc",
> -                                         f32, in, 3, LLVMReadNoneAttribute);
> +                                         f32, in, 3, "readnone");
>               out[2] = lp_build_intrinsic(gallivm->builder, 
> "llvm.amdgcn.cubema",
> -                                         f32, in, 3, LLVMReadNoneAttribute);
> +                                         f32, in, 3, "readnone");
>               out[3] = lp_build_intrinsic(gallivm->builder, 
> "llvm.amdgcn.cubeid",
> -                                         f32, in, 3, LLVMReadNoneAttribute);
> +                                         f32, in, 3, "readnone");
>  
>               return lp_build_gather_values(gallivm, out, 4);
>       } else {
> @@ -937,7 +937,7 @@ static LLVMValueRef build_cube_intrinsic(struct 
> gallivm_state *gallivm,
>  
>               return lp_build_intrinsic(gallivm->builder, "llvm.AMDGPU.cube",
>                                         LLVMTypeOf(vec), &vec, 1,
> -                                       LLVMReadNoneAttribute);
> +                                       "readnone");
>       }
>  }
>  
> @@ -959,7 +959,7 @@ static void si_llvm_cube_to_2d_coords(struct 
> lp_build_tgsi_context *bld_base,
>                                                   
> lp_build_const_int32(gallivm, i), "");
>  
>       coords[2] = lp_build_intrinsic(builder, "llvm.fabs.f32",
> -                     type, &coords[2], 1, LLVMReadNoneAttribute);
> +                     type, &coords[2], 1, "readnone");
>       coords[2] = lp_build_emit_llvm_unary(bld_base, TGSI_OPCODE_RCP, 
> coords[2]);
>  
>       mad_args[1] = coords[2];

Attachment: signature.asc
Description: This is a digitally signed message part

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

Reply via email to