[Mesa-dev] [PATCH] gallivm: Fix build after removal of deprecated attribute API v2

Marek Olšák maraeo at gmail.com
Tue Nov 8 16:45:43 UTC 2016


On Mon, Nov 7, 2016 at 11:04 PM, Jan Vesely <jan.vesely at rutgers.edu> wrote:
> On Mon, 2016-11-07 at 21:06 +0000, Tom Stellard wrote:
>> v2:
>>   Fix adding parameter attributes with LLVM < 4.0.
>> ---
>>  src/gallium/auxiliary/draw/draw_llvm.c            |  6 +-
>>  src/gallium/auxiliary/gallivm/lp_bld_intr.c       | 52 ++++++++++++++++-
>>  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, 116 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..401e9a2 100644
>> --- a/src/gallium/auxiliary/gallivm/lp_bld_intr.c
>> +++ b/src/gallium/auxiliary/gallivm/lp_bld_intr.c
>> @@ -120,13 +120,57 @@ 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,
>> +                     int attr_idx,
>> +                     const char *attr_name,
>> +                     unsigned attr_len)
>
> Any reason to pass string length by hand rather than local strlen?

An enum would be better. Then lp_add_function_attr can translate the
enum to a string. The enums can be defined by gallivm.

Marek


More information about the mesa-dev mailing list