RE: [PATCH] clk: renesas: r8a7778: remove checker warnings: x | !y

From: David Laight
Date: Wed Jun 14 2023 - 06:17:21 EST


From: GONG, Ruiqi
> Sent: 13 June 2023 03:54
>
> Eliminate the following Sparse reports when building with C=1:
>
> drivers/clk/renesas/clk-r8a7778.c:85:52: warning: dubious: x | !y
> drivers/clk/renesas/clk-r8a7778.c:87:50: warning: dubious: x | !y
>
> Signed-off-by: GONG, Ruiqi <gongruiqi@xxxxxxxxxxxxxxx>
> ---
> drivers/clk/renesas/clk-r8a7778.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/clk/renesas/clk-r8a7778.c b/drivers/clk/renesas/clk-r8a7778.c
> index 797556259370..ad1a50f3b0cd 100644
> --- a/drivers/clk/renesas/clk-r8a7778.c
> +++ b/drivers/clk/renesas/clk-r8a7778.c
> @@ -81,11 +81,11 @@ static void __init r8a7778_cpg_clocks_init(struct device_node *np)
>
> BUG_ON(!(mode & BIT(19)));
>
> - cpg_mode_rates = (!!(mode & BIT(18)) << 2) |
> - (!!(mode & BIT(12)) << 1) |
> - (!!(mode & BIT(11)));

Try just adding a << 0 on the last line.

Recent gcc and clang optimise the code to 'shift + and'.

David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)