Message ID | 5756FAA0.7080905@foss.arm.com |
---|---|
State | New |
Headers | show |
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 >
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index 0f750bb08e817ba630d92566c6a991f81e095304..21adfcb531f3f3379653c67145ab0023c978fd82 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -5314,9 +5314,10 @@ simplify_cond_clz_ctz (rtx x, rtx_code cmp_code, rtx true_val, rtx false_val) 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))) + if (((op_code == CLZ + && CLZ_DEFINED_VALUE_AT_ZERO (GET_MODE (on_nonzero), op_val)) + || (op_code == CTZ + && CTZ_DEFINED_VALUE_AT_ZERO (GET_MODE (on_nonzero), op_val))) && op_val == INTVAL (on_zero)) return on_nonzero;