I tried #define LOGICAL_OP_NON_SHORT_CIRCUIT 1 in RISC-V port. The warning is 
still there.
Are you considering this 
patch:https://gcc.gnu.org/pipermail/gcc-patches/2022-August/600120.html 
to solve this issue ? Or you are trying another solution to fix this ?



juzhe.zh...@rivai.ai
 
From: Richard Biener
Date: 2022-08-23 17:34
To: Richard Biener
CC: Andrew Pinski; GCC Patches; Andrew Waterman; Andreas Schwab; Kito Cheng; 
juzhe.zhong
Subject: Re: [PATCH] RISC-V: Add runtime invariant support
On Mon, Aug 22, 2022 at 8:15 AM Richard Biener via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> On Sat, 20 Aug 2022, Andrew Pinski wrote:
>
> > On Sat, Aug 20, 2022 at 3:34 PM Andreas Schwab <sch...@linux-m68k.org> 
> > wrote:
> > >
> > > This breaks bootstrap:
> > >
> > > ../../gcc/tree-vect-loop-manip.cc: In function 'void 
> > > vect_gen_vector_loop_niters(loop_vec_info, tree, tree_node**, 
> > > tree_node**, bool)':
> > > ../../gcc/tree-vect-loop-manip.cc:1981:26: error: 'const_vf' may be used 
> > > uninitialized [-Werror=maybe-uninitialized]
> > >  1981 |   unsigned HOST_WIDE_INT const_vf;
> > >       |                          ^~~~~~~~
> > > cc1plus: all warnings being treated as errors
> > > make[3]: *** [Makefile:1146: tree-vect-loop-manip.o] Error 1
> > > make[2]: *** [Makefile:4977: all-stage2-gcc] Error 2
> > > make[1]: *** [Makefile:30363: stage2-bubble] Error 2
> > > make: *** [Makefile:1065: all] Error 2
> >
> >
> > This looks like a real uninitialized variable issue.
> > I even can't tell if the paths that lead to using const_vf will be
> > always set so how we expect GCC to do the same.
> > The code that uses const_vf was added with r11-5820-cdcbef3c3310,
> > CCing the author there.
>
> The key is
>
>   tree log_vf = NULL_TREE;
> ...
>   unsigned HOST_WIDE_INT const_vf;
>   if (vf.is_constant (&const_vf)
>       && !LOOP_VINFO_USING_PARTIAL_VECTORS_P (loop_vinfo))
>     {
> ...
>       log_vf = build_int_cst (type, exact_log2 (const_vf));
> ...
>     }
> ...
>       if (stmts != NULL && log_vf)
>         {
> ... use const_vf ...
>
> so it's uninit analysis little mind that is confused.  There is code
> that's supposed to handle the situation (setting flag under condition,
> testing that flag instead of condition) but maybe it's too twisted
> here.  One could refector this as
>
>  bool const_vf_p = vf.is_constant (&const_vf);
>  if (const_vf_p
>      && ...)
> ...
>    if (stmts != NULL && const_vf_p)
> ...
>
> and hope uninits mind is good enough to see log_vf is not used
> uninitialized.
>
> I can also look into why uninit doesn't get it, but preprocessed
> source would be handy then.
 
Btw, the riscv speciality is
 
gcc/config/riscv/riscv.h:#define LOGICAL_OP_NON_SHORT_CIRCUIT 0
 
with --param logical-op-non-short-circuit=1 the diagnostic does not occur.
 
>
> Richard.
 

Reply via email to