https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115363
Bug ID: 115363 Summary: Missing loop vectorization due to loop bound load not being pulled out Product: gcc Version: 15.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: enhancement Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: pinskia at gcc dot gnu.org Target Milestone: --- Take: ``` struct out { unsigned *array; }; struct m{ void f(out *output); void f1(out *output); int size; }; void m::f(out *output) { for (int k = 0; k < size; k++) { output->array[k] += 1; } } void m::f1(out *output) { int tmp = size; for (int k = 0; k < size; k++) { output->array[k] += 1; } } ``` We should be able to vectorize `m::f` but currently does not since this->size might alias array[k]. But we could version the loop to pull out the this->size out of the loop and we could vectorize the loop then.