On 12/2/22 07:30, Richard Biener via Gcc-patches wrote:
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.

Bootstrapped and tested on x86_64-unknown-linux-gnu.

OK?

Thanks,
Richard.

        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.
OK.

Jeff

Reply via email to