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

Tamar Christina <tnfchris at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2024-10-15
           Assignee|unassigned at gcc dot gnu.org      |tnfchris at gcc dot 
gnu.org
             Status|UNCONFIRMED                 |ASSIGNED

--- Comment #5 from Tamar Christina <tnfchris at gcc dot gnu.org> ---
Ok, mine then.

It looks like it's this loop:

    int n_3_TYPE1_int64_t = 32;
    int32_t x_3_int32_t = 233;
    int32_t x2_3_int32_t = 78;
    int64_t y_3_int64_t = 1234;
    int32_t f_3_int32_t[33 * 2 + 1] = { 0 };
    int64_t d_3_int64_t[33] = { 0 };
    test_1_TYPE1_int64_t (f_3_int32_t, d_3_int64_t, x_3_int32_t, x2_3_int32_t,
                          y_3_int64_t, n_3_TYPE1_int64_t);
    for (int i = 0; i < n_3_TYPE1_int64_t; ++i)
        {
            if (f_3_int32_t[i * 2 + 0] != x_3_int32_t)
                __builtin_abort ();
            if (f_3_int32_t[i * 2 + 1] != x2_3_int32_t)
                __builtin_abort ();
            if (d_3_int64_t[i] != y_3_int64_t)
                __builtin_abort ();
        }

the first two exits vectorize fine, the third one is vectorized but the
statement never gets replaced:

;;   basic block 7, loop depth 1, count 32534376 (estimated locally, freq
1.0000), maybe hot
;;    prev block 19, next block 32, flags: (NEW, REACHABLE, VISITED)
;;    pred:       5 [always]  count:32534376 (estimated locally, freq 1.0000)
(FALSE_VALUE,EXECUTABLE)
  _73 = loop_len_64 / 2;
  _75 = loop_len_65 / 2;
  if (_21 != 0)
    goto <bb 32>; [0.00%]
  else
    goto <bb 9>; [100.00%]

Looking into why the last update didn't happen.  I think I just need to get cc1
working so will try to build an rv32 cross.

Reply via email to