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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |rguenth at gcc dot 
gnu.org

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
int foo (int *p, unsigned long sz)
{
  int sum = 0;
  for (unsigned i = 0; i < sz; ++i)
    sum += p[i];
  return sum;
}

is a simpler variant.  What works is that we set up to version the loop
with sz_7(D) + 18446744073709551615 <= 4294967294 and do
loop_constraint_set (loop, LOOP_C_FINITE), but that is not enough to make
SCEV analysis succeed for the DR (so we get a gather) or analyze the
index PHI in the induction defining the supposed gather index:

t.c:4:26: note:   Analyze phi: _15 = PHI <_4(6), 0(5)>
t.c:4:26: missed:   reduction used in loop.
t.c:4:26: missed:   Unknown def-use cycle pattern.
...
t.c:4:26: note:   worklist: examine stmt: _1 = _15 * 4;
t.c:4:26: note:   vect_is_simple_use: operand _15 = PHI <_4(6), 0(5)>, type of
def: unknown
t.c:4:26: missed:   Unsupported pattern.
t.c:5:13: missed:   not vectorized: unsupported use in stmt.
t.c:4:26: missed:  unexpected pattern.

I will see to fix this on the SCEV side.

Reply via email to