tree-optimization/107833 - invariant motion of uninit uses
authorRichard Biener <rguenther@suse.de>
Fri, 2 Dec 2022 13:52:20 +0000 (14:52 +0100)
committerRichard Biener <rguenther@suse.de>
Mon, 5 Dec 2022 09:22:53 +0000 (10:22 +0100)
commit44c8402d35160515b3c09fd2bc239587e0c32a2b
treef592f253098750358187f2ee53bce15c1b97b175
parent824542bec24c09319fa55922a0162209a5f64963
tree-optimization/107833 - invariant motion of uninit uses

The following fixes a wrong-code bug caused by loop invariant motion
hoisting an expression using an uninitialized value outside of its
controlling condition causing IVOPTs to use that to rewrite a defined
value.  PR107839 is a similar case involving a bogus uninit diagnostic.

PR tree-optimization/107833
PR tree-optimization/107839
* cfghooks.cc: Include tree.h.
* tree-ssa-loop-im.cc (movement_possibility): Wrap and
make stmts using any ssa_name_maybe_undef_p operand
to preserve execution.
(loop_invariant_motion_in_fun): Call mark_ssa_maybe_undefs
to init maybe-undefined status.
* tree-ssa-loop-ivopts.cc (ssa_name_maybe_undef_p,
ssa_name_set_maybe_undef, ssa_name_any_use_dominates_bb_p,
mark_ssa_maybe_undefs): Move ...
* tree-ssa.cc: ... here.
* tree-ssa.h (ssa_name_any_use_dominates_bb_p,
mark_ssa_maybe_undefs): Declare.
(ssa_name_maybe_undef_p, ssa_name_set_maybe_undef): Define.

* gcc.dg/torture/pr107833.c: New testcase.
* gcc.dg/uninit-pr107839.c: Likewise.
gcc/cfghooks.cc
gcc/testsuite/gcc.dg/torture/pr107833.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/uninit-pr107839.c [new file with mode: 0644]
gcc/tree-ssa-loop-im.cc
gcc/tree-ssa-loop-ivopts.cc
gcc/tree-ssa.cc
gcc/tree-ssa.h