On Mon, Nov 7, 2016 at 11:04 PM, Jan Vesely <jan.ves...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev