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.