[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