------- Additional Comments From kazu at cs dot umass dot edu  2005-01-22 18:34 
-------
This is what I get at the end of tree-ssa optimizations.

foo (flag)
{
  int D.1318;
  _Bool D.1317;

<bb 0>:
  D.1317_2 = *flag_1;
  if (D.1317_2 != 0) goto <L0>; else goto <L1>;

<L0>:;
  bar ();

<L1>:;
  D.1317_4 = *flag_1;
  if (D.1317_4 != 0) goto <L2>; else goto <L3>;

<L2>:;
  bar () [tail call];

<L3>:;
  return;

}

Note that the load immediately after <L1>:; is partially redundant.
I remember Daniel Berlin saying that if PRE is extended to handle
partially redundant load, we can remove the load on one path
to <L1> like so:

<L0>:;
  bar ();
  D.1317_5 = *flag_1;

  D.1317_4 = PHI <D.1317_2(...), D.1317_5(...)>
<L1>:;
  if (D.1317_4 != 0) goto <L2>; else goto <L3>;

At this point, DOM can thread one of the incoming edges to <L1>.

One problem is that PRE will probably be still disabled under -Os
when it is extended to handle partially redundant loads even though
PRE would improve this particular case.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19516

Reply via email to