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

Samuel Pitoiset samuel.pitoiset at gmail.com
Mon Oct 15 15:27:00 UTC 2018


Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>

On 10/15/18 5:23 PM, Bas Nieuwenhuizen wrote:
> 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
> _______________________________________________
> 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