[Mesa-dev] [PATCH] ac/nir: Use context-specific LLVM types

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Mon Oct 15 15:23:31 UTC 2018


Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

Thanks!
On Mon, Oct 15, 2018 at 5:19 PM Alex Smith <asmith at feralinteractive.com> wrote:
>
> LLVMInt*Type() return types from the global context and therefore are
> not safe for use in other contexts. Use types from our own context
> instead.
>
> Fixes frequent crashes seen when doing multithreaded pipeline creation.
>
> Fixes: 4d0b02bb5a "ac: add support for 16bit load_push_constant"
> Fixes: 7e7ee82698 "ac: add support for 16bit buffer loads"
> Cc: "18.2" <mesa-stable at lists.freedesktop.org>
> Signed-off-by: Alex Smith <asmith at feralinteractive.com>
> ---
>  src/amd/common/ac_nir_to_llvm.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
> index e0a8e04cf3..402cf2d665 100644
> --- a/src/amd/common/ac_nir_to_llvm.c
> +++ b/src/amd/common/ac_nir_to_llvm.c
> @@ -1387,7 +1387,7 @@ static LLVMValueRef visit_load_push_constant(struct ac_nir_context *ctx,
>
>         if (instr->dest.ssa.bit_size == 16) {
>                 unsigned load_dwords = instr->dest.ssa.num_components / 2 + 1;
> -               LLVMTypeRef vec_type = LLVMVectorType(LLVMInt16Type(), 2 * load_dwords);
> +               LLVMTypeRef vec_type = LLVMVectorType(LLVMInt16TypeInContext(ctx->ac.context), 2 * load_dwords);
>                 ptr = ac_cast_ptr(&ctx->ac, ptr, vec_type);
>                 LLVMValueRef res = LLVMBuildLoad(ctx->ac.builder, ptr, "");
>                 res = LLVMBuildBitCast(ctx->ac.builder, res, vec_type, "");
> @@ -1671,7 +1671,7 @@ static LLVMValueRef visit_load_buffer(struct ac_nir_context *ctx,
>                         };
>                         results[idx] = ac_build_intrinsic(&ctx->ac, load_name, data_type, params, 5, 0);
>                         unsigned num_elems = ac_get_type_size(data_type) / elem_size_bytes;
> -                       LLVMTypeRef resTy = LLVMVectorType(LLVMIntType(instr->dest.ssa.bit_size), num_elems);
> +                       LLVMTypeRef resTy = LLVMVectorType(LLVMIntTypeInContext(ctx->ac.context, instr->dest.ssa.bit_size), num_elems);
>                         results[idx] = LLVMBuildBitCast(ctx->ac.builder, results[idx], resTy, "");
>                 }
>         }
> --
> 2.14.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list