https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112736
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|vectorizer is introducing |[14 Regression] vectorizer |out of bounds memory access |is introducing out of | |bounds memory access Known to work| |13.1.0 Known to fail| |14.0 Last reconfirmed| |2023-11-27 Keywords| |needs-bisection, wrong-code Status|UNCONFIRMED |NEW Ever confirmed|0 |1 Target Milestone|--- |14.0 --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- vect__14.12_2 = MEM <vector(4) int> [(int *)&b + -4B]; vect__14.14_16 = VEC_PERM_EXPR <vect__14.12_2, vect__14.12_2, { 3, 3, 3, 3 }>; This might be ok, unless before b is unaligned and what is before is unmapped. # vectp_b.10_23 = PHI <vectp_b.10_13(5), &MEM <int[3]> [(void *)&b + -4B](2)> vect__14.12_1 = MEM <vector(4) int> [(int *)vectp_b.10_23]; vect__14.13_10 = VEC_PERM_EXPR <vect__14.12_1, vect__14.12_1, { 3, 2, 1, 0 }>; vectp_b.10_11 = vectp_b.10_23 + 12; vect__14.14_12 = VEC_PERM_EXPR <vect__14.13_10, vect__14.13_10, { 0, 0, 0, 0 }>; Note GCC 13 was ok: _1 = b[2]; _2 = {_1, _1, _1, _1}; MEM <vector(4) int> [(int *)&c + 40B] = _2;