https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117014
Bug ID: 117014 Summary: missed vectorization opportunity Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: 652023330028 at smail dot nju.edu.cn Target Milestone: --- Hello, we noticed that there seems to be a missing vectorization for the code below. reduced code: https://godbolt.org/z/YaEPdWM3n int data[100]; void f(int arr1[100], int arr2[100]) { for(int i = 0; i < 100; i++){ arr2[i] = -arr1[i]; int k = arr1[i] + arr2[i]; data[i] = data[i + k] + 1; } } GCC -O3 -fno-vect-cost-model -fwrapv: f(int*, int*): xor eax, eax .L2: mov ecx, DWORD PTR [rdi+rax*4] mov edx, ecx neg edx mov DWORD PTR [rsi+rax*4], edx mov edx, eax sub edx, ecx add edx, DWORD PTR [rdi+rax*4] movsx rdx, edx mov edx, DWORD PTR data[0+rdx*4] add edx, 1 mov DWORD PTR data[0+rax*4], edx add rax, 1 cmp rax, 100 jne .L2 ret Possibly due to omission: _8 = _7 + _26; ==> _8 = i_22 _4 = MEM[(int *)arr1_15(D) + ivtmp.5_21 * 4]; _6 = -_4; MEM[(int *)arr2_16(D) + ivtmp.5_21 * 4] = _6; # DEBUG BEGIN_STMT _7 = MEM[(int *)arr1_15(D) + ivtmp.5_21 * 4]; # DEBUG D#1 => -_4 # DEBUG k => _7 + D#1 # DEBUG BEGIN_STMT _26 = i_22 - _4; _8 = _7 + _26; _9 = data[_8]; Expected code: vectorize the loop body. For example, when assign k=0 directly ('int k = 0;'), gcc: f(int*, int*): lea rdx, [rdi+4] mov eax, OFFSET FLAT:data sub rax, rdx cmp rax, 8 mov rax, rsi seta cl sub rax, rdx cmp rax, 8 seta al test cl, al je .L5 mov rax, rsi sub rax, OFFSET FLAT:data-15 cmp rax, 30 jbe .L5 pcmpeqd xmm1, xmm1 xor eax, eax psrld xmm1, 31 .L3: movdqu xmm3, XMMWORD PTR [rdi+rax] pxor xmm0, xmm0 psubd xmm0, xmm3 movups XMMWORD PTR [rsi+rax], xmm0 movdqa xmm0, XMMWORD PTR data[rax] add rax, 16 paddd xmm0, xmm1 movaps XMMWORD PTR data[rax-16], xmm0 cmp rax, 400 jne .L3 ret .L5: xor eax, eax .L2: mov edx, DWORD PTR [rdi+rax] neg edx mov DWORD PTR [rsi+rax], edx add DWORD PTR data[rax], 1 add rax, 4 cmp rax, 400 jne .L2 ret Thank you very much for your time and effort! We look forward to hearing from you.