[Mesa-dev] [PATCH] ac/nir: silence maybe-uninitialized warnings

Nicolai Hähnle nhaehnle at gmail.com
Mon Aug 28 08:30:15 UTC 2017


On 27.08.2017 23:43, Grazvydas Ignotas wrote:
> These are likely false positives, but are also annoying because they
> show up on every "make install", which causes ac_nir_to_llvm to be
> rebuilt here. Initializing those variables to NULL should be harmless
> even when unnecessary.
> 
> Signed-off-by: Grazvydas Ignotas <notasas at gmail.com>
> ---
>   src/amd/common/ac_nir_to_llvm.c | 15 +++++++++------
>   1 file changed, 9 insertions(+), 6 deletions(-)
> 
> diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
> index 664d83b..823ea42 100644
> --- a/src/amd/common/ac_nir_to_llvm.c
> +++ b/src/amd/common/ac_nir_to_llvm.c
> @@ -1332,11 +1332,11 @@ static LLVMValueRef emit_i2b(struct ac_llvm_context *ctx,
>   
>   static LLVMValueRef emit_f2f16(struct nir_to_llvm_context *ctx,
>   			       LLVMValueRef src0)
>   {
>   	LLVMValueRef result;
> -	LLVMValueRef cond;
> +	LLVMValueRef cond = NULL;
>   
>   	src0 = to_float(&ctx->ac, src0);
>   	result = LLVMBuildFPTrunc(ctx->builder, src0, ctx->f16, "");
>   
>   	if (ctx->options->chip_class >= VI) {
> @@ -2052,11 +2052,11 @@ static LLVMValueRef radv_lower_gather4_integer(struct ac_llvm_context *ctx,
>   					       const nir_tex_instr *instr)
>   {
>   	enum glsl_base_type stype = glsl_get_sampler_result_type(instr->texture->var->type);
>   	LLVMValueRef coord = args->addr;
>   	LLVMValueRef half_texel[2];
> -	LLVMValueRef compare_cube_wa;
> +	LLVMValueRef compare_cube_wa = NULL;
>   	LLVMValueRef result;
>   	int c;
>   	unsigned coord_vgpr_index = (unsigned)args->offset + (unsigned)args->compare;
>   
>   	//TODO Rect
> @@ -2778,11 +2778,12 @@ load_tcs_input(struct nir_to_llvm_context *ctx,
>   
>   static LLVMValueRef
>   load_tcs_output(struct nir_to_llvm_context *ctx,
>   	       nir_intrinsic_instr *instr)
>   {
> -	LLVMValueRef dw_addr, stride;
> +	LLVMValueRef dw_addr;
> +	LLVMValueRef stride = NULL;
>   	LLVMValueRef value[4], result;
>   	LLVMValueRef vertex_index = NULL;
>   	LLVMValueRef indir_index = NULL;
>   	unsigned const_index = 0;
>   	unsigned param;
> @@ -2817,11 +2818,12 @@ static void
>   store_tcs_output(struct nir_to_llvm_context *ctx,
>   		 nir_intrinsic_instr *instr,
>   		 LLVMValueRef src,
>   		 unsigned writemask)
>   {
> -	LLVMValueRef stride, dw_addr;
> +	LLVMValueRef dw_addr;
> +	LLVMValueRef stride = NULL;
>   	LLVMValueRef buf_addr = NULL;
>   	LLVMValueRef vertex_index = NULL;
>   	LLVMValueRef indir_index = NULL;
>   	unsigned const_index = 0;
>   	unsigned param;
> @@ -3817,12 +3819,13 @@ static LLVMValueRef visit_interp(struct nir_to_llvm_context *ctx,
>   {
>   	LLVMValueRef result[2];
>   	LLVMValueRef interp_param, attr_number;
>   	unsigned location;
>   	unsigned chan;
> -	LLVMValueRef src_c0, src_c1;
> -	LLVMValueRef src0;
> +	LLVMValueRef src_c0 = NULL;
> +	LLVMValueRef src_c1 = NULL;
> +	LLVMValueRef src0 = NULL;

I think this one actually involves a real bug. Specifically, I suspect 
that the

     if (location == INTERP_SAMPLE || location == INTERP_CENTER) {

below should really be

     if (location == INTERP_SAMPLE || location == INTERP_OFFSET) {

because src_c0/c1 are set, and the enclosed logic makes sense, only in 
the nir_intrinsic_interp_var_at_{sample,offset} cases.

Apart from that, the patch looks good to me.

Cheers,
Nicolai


>   	int input_index = instr->variables[0]->var->data.location - VARYING_SLOT_VAR0;
>   	switch (instr->intrinsic) {
>   	case nir_intrinsic_interp_var_at_centroid:
>   		location = INTERP_CENTROID;
>   		break;
> 


-- 
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.


More information about the mesa-dev mailing list