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.