https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63677
Bug ID: 63677 Summary: Failure to constant fold with vectorization. Product: gcc Version: 5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: belagod at gcc dot gnu.org This piece of code: int __attribute__ ((noinline)) foo () { const int a[8] = { 0, 1, 2, 3, 4, 5, 6, 7 }; int i, sum; sum = 0; for (i = 0; i < sizeof (a) / sizeof (*a); i++) sum += a[i]; return sum; } when compiled with -O3 on x86_64 generates: foo: .LFB0: .cfi_startproc movdqa .LC1(%rip), %xmm0 paddd .LC0(%rip), %xmm0 movdqa %xmm0, %xmm1 psrldq $8, %xmm1 paddd %xmm1, %xmm0 movdqa %xmm0, %xmm1 psrldq $4, %xmm1 paddd %xmm1, %xmm0 movd %xmm0, %eax ret .cfi_endproc .LFE0: .size foo, .-foo .section .text.unlikely .LCOLDE3: .text .LHOTE3: .section .rodata.cst16,"aM",@progbits,16 .align 16 .LC0: .long 0 .long 1 .long 2 .long 3 .align 16 .LC1: .long 4 .long 5 .long 6 .long 7 .ident "GCC: (GNU) 5.0.0 20141023 (experimental)" .section .note.GNU-stack,"",@progbits but when compiled with -O3 -mno-sse generates: foo: .LFB0: .cfi_startproc movl $28, %eax ret .cfi_endproc .LFE0: .size foo, .-foo .section .text.unlikely .LCOLDE0: Why isn't constant folding happening when generating code for vector unit? $ gcc -v Using built-in specs. COLLECT_GCC=/work/dev/arm/bin_x86/install/bin/gcc COLLECT_LTO_WRAPPER=/work/dev/arm/bin_x86/install/libexec/gcc/x86_64-unknown-linux-gnu/5.0.0/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: ../src/gcc/configure --prefix=/work/dev/arm/bin_x86/install --enable-bootstrap --disable-nls --enable-languages=c,c++,fortran --disable-multilib Thread model: posix gcc version 5.0.0 20141023 (experimental) (GCC)