[Bug tree-optimization/62012] Loop is not vectorized after function inlining (SCEV)

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Sep 8 11:29:00 GMT 2014


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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |WAITING
   Last reconfirmed|                            |2014-09-08
     Ever confirmed|0                           |1

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
So it's independend of LTO.

Confirmed.  We have

  _28 = &MEM[(struct Array *)&fa + 256B].a[0] + _3;
  *_28 = u_23;

which SCEV messes up because it ends up with

(instantiate_scev
  (instantiate_below = 4)
  (evolution_loop = 1)
  (chrec = &MEM[(struct Array *)&fa + 256B].a[0])
  (res = &MEM[(struct Array *)&fa + 256B].a[0]))
(instantiate_scev
  (instantiate_below = 4)
  (evolution_loop = 1)
  (chrec = {(long unsigned int) first_6(D) * 4, +, 4}_1)
  (res = {(long unsigned int) first_6(D) * 4, +, 4}_1))
(set_scalar_evolution
  instantiated_below = 4
  (scalar = _13)
  (scalar_evolution = {&MEM[(struct Array *)&fa + 256B].a[(sizetype)
first_6(D)], +, 4}_1))
)
failed: evolution of base is not affine.

Not sure why it thinks that.

Btw, on trunk we now vectorize this just fine probably because of the fix
for PR63148 which avoids moving first_6 * 4 inside the array-ref and we
get

  (scalar_evolution = {&MEM[(struct Array *)&fa + 256B].a[0] + (sizetype)
((long unsigned int) first_6(D) * 4), +, 4}_1))
)
success.

instead.

So - can you re-check please?



More information about the Gcc-bugs mailing list