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

--- Comment #18 from Richard Biener <rguenth at gcc dot gnu.org> ---
So on trunk we are left with

  <bb 2> [0.01%]:
  a = {};

  <bb 3> [1.39%]:
  # ivtmp.77_134 = PHI <ivtmp.77_135(3), 0(2)>
  prephitmp_170 = (integer(kind=4)) ivtmp.77_134;
  vect_cst__281 = {prephitmp_170, prephitmp_170, prephitmp_170, prephitmp_170};
  vect__101.74_196 = vect_cst__281 + { 1, 1, 1, 1 };
  ivtmp.77_135 = ivtmp.77_134 + 1;
  if (ivtmp.77_135 == 10000000)
    goto <bb 4>; [1.01%]
  else
    goto <bb 3>; [98.99%]

  <bb 4> [0.01%]:
  MEM[(c_char * {ref-all})&a] = vect__101.74_196;
  MEM[(c_char * {ref-all})&a + 16B] = vect__101.74_196;
  MEM[(c_char * {ref-all})&a + 32B] = vect__101.74_196;
...

not too bad I'd say.  If we'd use SCEV-ccp as a service then for example
phi-only-cprop could clean this up (we'd need to teach SCEV about vectors
though... ugh).  Btw, it's IVOPTs that cleans up the load of IVs generated
by PRE.

Reply via email to