https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102316
HaoChen Gui <guihaoc at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |guihaoc at gcc dot gnu.org, | |rguenth at gcc dot gnu.org --- Comment #4 from HaoChen Gui <guihaoc at gcc dot gnu.org> --- #define LEN 4 struct { char c[LEN] } d; extern int a; extern char* b; int p() { for (int i = 0; i < a; i++) { d.c[i] = b[i]; } return 0; } Above codes cause the same errors on x86. When setting the LEN to 8, it can be also reproduced on aarch64. It's a common problem. The iteration number of reset loop after vectorization should not only decided by variable "a" but also by the length of array. If the len is 5 and vector size is 4, the reset loop should be only executed once. Currently iteration number only depends on variable "a". Then it is complete unrolled 3 times if vector size is 4. That causes the warning. <bb 17> [local count: 398179264]: # i_30 = PHI <i_36(18), tmp.9_40(20)> _32 = (sizetype) i_30; _33 = b.0_1 + _32; _34 = *_33; d.c[i_30] = _34; i_36 = i_30 + 1; if (i_36 < a.1_13) // iterations depend on "a" only, the length of array is not take into consideration goto <bb 18>; [89.00%] else goto <bb 19>; [11.00%]