https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81165
Bug ID: 81165 Summary: Regression in GCC-8.0.0's optimizer Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: ishiura-compiler at ml dot kwansei.ac.jp Target Milestone: --- We compiled the following program by GCC-8.0.0 and GCC-7.0.1 with -O3 option. GCC-7.0.1 performed better optimization than GCC-8.0.0. $ cat test.c void func() __attribute__((noinline)); short x0 = 15; int main (void){ long i; for(i = 0; i < 100000000; i++){ func(); } return 0; } void func (){ volatile int x1 = 1U; volatile char x2 = 0; char t0 = 0; unsigned long t1 = 2LU; int i = 0; if(1>>x2) { t0 = -1; t1 = (1&(short)(x1^8U))-1; } while(i > (int)((1U>>t1)+(char)(128%(10*(25LU&(29%x0)))))) { i += (int)(12L/(1!=(int)t1)); } if (t0 != -1) __builtin_abort(); if (t1 != 0L) __builtin_abort(); } $ gcc-8.0 test.c -O3 -o test.out && time ./test.out ./test.out 1.50s user 0.00s system 99% cpu 1.506 total $ gcc-7.0.1 test.c -O3 -o test.out && time ./test.out ./test.out 0.26s user 0.00s system 98% cpu 0.264 total +-------------------------------------+---------------------------------------+ |gcc-8.0.s (gcc-8.0 test.c -O3 -S) |gcc-7.0.1.s (gcc-7.0.1 test.c -O3 -S) | +-------------------------------------+---------------------------------------+ | .cfi_startproc | .cfi_startproc | | subq $24, %rsp | subq $24, %rsp | | .cfi_def_cfa_offset 32 | .cfi_def_cfa_offset 32 | | movl $1, %edi | movl $1, %eax | | movl $1, 12(%rsp) | movl $1, 12(%rsp) | | movb $0, 11(%rsp) | movb $0, 11(%rsp) | | movl %edi, %eax | | | movzbl 11(%rsp), %ecx | movzbl 11(%rsp), %ecx | | sarl %cl, %eax | sarl %cl, %eax | | testl %eax, %eax | testl %eax, %eax | | je .L7 | jne .L12 | | movl 12(%rsp), %ecx | | | movl $-1, %r9d | | | andl $1, %ecx | | | subl $1, %ecx | | | movslq %ecx, %r8 | | | shrl %cl, %edi | | |.L2: |.L2: | | movswl x0(%rip), %esi | call abort | | movl $29, %eax | .p2align 4,,10 | | cltd | .p2align 3 | | idivl %esi |.L12: | | movl $128, %eax | movl 12(%rsp), %eax | | andl $25, %edx | andl $1, %eax | | leaq (%rdx,%rdx,4), %rsi| subl $1, %eax | | xorl %edx, %edx | testl %eax, %eax | | addq %rsi, %rsi | jne .L2 | | divq %rsi | | | movsbl %dl, %edx | | | addl %edi, %edx | | | jns .L3 | | | cmpl $1, %ecx | | | je .L10 | | |.L3: | | | cmpb $-1, %r9b | | | jne .L6 | | | testq %r8, %r8 | | | jne .L6 | | | addq $24, %rsp | addq $24, %rsp | | .cfi_remember_state | | | .cfi_def_cfa_offset 8 | .cfi_def_cfa_offset 8 | | ret | ret | | .p2align 4,,10 | | | .p2align 3 | | |.L10: | | | .cfi_restore_state | | | ud2 | | | .p2align 4,,10 | | | .p2align 3 | | |.L7: | | | movl $2, %ecx | | | xorl %edi, %edi | | | movl $2, %r8d | | | xorl %r9d, %r9d | | | jmp .L2 | | | .cfi_endproc | .cfi_endproc | | .section .text.un...| | | .cfi_startproc | | | .type func.cold.0, @f...| | |func.cold.0: | | |.L6: | | | .cfi_def_cfa_offset 32 | | | call abort | | | .cfi_endproc | | |.LFE1: |.LFE1: | | .text | | | .size func, .-func | .size func, .-func | | .section .text.un...| | | .size func.cold.0, .-...| | |.LCOLDE0: | | | .text | | |.LHOTE0: | | | .section .text.st...| .section .text.st...| | .p2align 4,,15 | .p2align 4,,15 | | .globl main | .globl main | +-------------------------------------+---------------------------------------+ | movl $100000000, %ebx | movl $100000000, %ebx | | .p2align 4,,10 | .p2align 4,,10 | | .p2align 3 | .p2align 3 | |.L12: |.L14: | | xorl %eax, %eax | xorl %eax, %eax | | call func | call func | | subq $1, %rbx | subq $1, %rbx | | jne .L12 | jne .L14 | | xorl %eax, %eax | xorl %eax, %eax | | popq %rbx | popq %rbx | | .cfi_def_cfa_offset 8 | .cfi_def_cfa_offset 8 | +-------------------------------------+---------------------------------------+ | .size x0, 2 | .size x0, 2 | |x0: |x0: | | .value 15 | .value 15 | | .ident "GCC: (GNU) 8....| .ident "GCC: (GNU) 7.0.1 ...| | .section .note.GN...| .section .note.GN...| +-------------------------------------+---------------------------------------+ $ gcc-8.0 -v using built-in specs. COLLECT_GCC=gcc-8.0 COLLECT_LTO_WRAPPER=/home/kota/opt/gcc-8.0/libexec/gcc/x86_64-pc-linux-gnu/8.0.0/lto-wrapper target: x86_64-pc-linux-gnu configure woth: ../gcc/configure --prefix=/home/kota/opt/gcc --program-suffix=-8.0 --disable-multilib --enable-languages=c thred model: posix gcc version 8.0.0 20170621 (experimental) (GCC) $ gcc-7.0.1 -v using built-in specs. COLLECT_GCC=gcc-7.0.1 COLLECT_LTO_WRAPPER=/home/kota/opt/gcc-7.0.1/libexec/gcc/x86_64-pc-linux-gnu/7.0.1/lto-wrapper target: x86_64-pc-linux-gnu configure woth: ../gcc/configure --prefix=/home/kota/opt/gcc --program-suffix=-7.0.1 --disable-multilib --enable-languages=c thred model: posix gcc version 7.0.1 20170216 (experimental) (GCC)