[PATCH][3/3][RTL ifcvt] PR middle-end/37780: Conditional expression with __builtin_clz() should be optimized out

Kyrill Tkachov kyrylo.tkachov@foss.arm.com
Tue Jun 7 16:51:00 GMT 2016


On 07/06/16 17:47, Kyrill Tkachov wrote:
>
> On 07/06/16 08:37, Andreas Schwab wrote:
>> Kyrill Tkachov <kyrylo.tkachov@foss.arm.com> writes:
>>
>>> +static rtx
>>> +simplify_cond_clz_ctz (rtx x, rtx_code cmp_code, rtx true_val, rtx false_val)
>>> +{
>>> +  if (cmp_code != EQ && cmp_code != NE)
>>> +    return NULL_RTX;
>>> +
>>> +  /* Result on X == 0 and X !=0 respectively.  */
>>> +  rtx on_zero, on_nonzero;
>>> +  if (cmp_code == EQ)
>>> +    {
>>> +      on_zero = true_val;
>>> +      on_nonzero = false_val;
>>> +    }
>>> +  else
>>> +    {
>>> +      on_zero = false_val;
>>> +      on_nonzero = true_val;
>>> +    }
>>> +
>>> +  rtx_code op_code = GET_CODE (on_nonzero);
>>> +  if ((op_code != CLZ && op_code != CTZ)
>>> +      || !rtx_equal_p (XEXP (on_nonzero, 0), x)
>>> +      || !CONST_INT_P (on_zero))
>>> +    return NULL_RTX;
>>> +
>>> +  HOST_WIDE_INT op_val;
>>> +  machine_mode mode = GET_MODE (on_nonzero);
>>> +  if (((op_code == CLZ && CLZ_DEFINED_VALUE_AT_ZERO (mode, op_val))
>>> +    || (op_code == CTZ && CTZ_DEFINED_VALUE_AT_ZERO (mode, op_val)))
>>> +      && op_val == INTVAL (on_zero))
>>> +    return on_nonzero;
>>> +
>>> +  return NULL_RTX;
>>> +}
>> ../../gcc/simplify-rtx.c: In function 'rtx_def* simplify_cond_clz_ctz(rtx, rtx_code, rtx, rtx)':
>> ../../gcc/simplify-rtx.c:5304:16: error: unused variable 'mode' [-Werror=unused-variable]
>>     machine_mode mode = GET_MODE (on_nonzero);
>>                  ^~~~
>>
>> Andreas.
>
> That must be on targets that don't define CLZ_DEFINED_VALUE_AT_ZERO or CTZ_DEFINED_VALUE_AT_ZERO.
> defaults.h then defines them to just "0".
> I think GCC shouldn't warn in these cases as 'mode' is used in the function
> it's defined, it's just the macro where it's used as an argument discards it.
> Anyway, this patch removes that variable and fixes the warning.
>
> Tested on arm-none-eabi after manually undefining CLZ_DEFINED_VALUE_AT_ZERO and CTZ_DEFINED_VALUE_AT_ZERO to reproduce
> the warning and checking that it's fixed.
> Committing as obvious in the interest of fixing bootstrap on the relevant targets.
>

With the ChangeLog entry:

2016-06-07  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

     * simplify-rtx.c (simplify_cond_clz_ctz): Delete 'mode' local
     variable.

> Thanks,
> Kyrill
>



More information about the Gcc-patches mailing list