https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106950

            Bug ID: 106950
           Summary: Missed PRE full redundancy without post-loop use
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rguenth at gcc dot gnu.org
  Target Milestone: ---

when we have the situation of PR106922, aka g++.dg/tree-ssa/pr106922.C which is
XFAILed on !lp64 because of this there's

  mem = 0;
  do
    {
       if (mem)
         mem = 0;
       if (mem) // as 'char' instead of 'bool', maybe relevant
         bar ();
       if (i++ != n)
         break;
    }
  while (1);
  .. = mem;

with the use of 'mem' after the loop we get that antic-in in the loop
exit condition block and eventually figure the full redundancy in
the conditional redundant set to zero during PRE insertion.  When that
'mem' after the loop is _not_ there this isn't triggered (possibly
because of the 'char' vs. 'bool' here, but then one can eventually
elide the whole if (mem) bar () code).

Reply via email to