https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90178
H.J. Lu <hjl.tools at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|Missed optimization: |Missed optimization: |duplicated terminal basic |duplicated terminal basic |block |block with -mavx --- Comment #1 from H.J. Lu <hjl.tools at gmail dot com> --- This is triggered by -mavx: [hjl@gnu-cfl-1 pr90178]$ cat x.i int* find_ptr(int* mem, int sz, int val) { for (int i = 0; i < sz; i++) { if (mem[i] == val) { return &mem[i]; } } return 0; } [hjl@gnu-cfl-1 pr90178]$ make /export/build/gnu/tools-build/gcc-wip-debug/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/tools-build/gcc-wip-debug/build-x86_64-linux/gcc/ -O2 -mavx -S x.i [hjl@gnu-cfl-1 pr90178]$ cat x.s .file "x.i" .text .p2align 4 .globl find_ptr .type find_ptr, @function find_ptr: .LFB0: .cfi_startproc movq %rdi, %rax testl %esi, %esi jle .L4 leal -1(%rsi), %ecx leaq 4(%rdi,%rcx,4), %rcx jmp .L3 .p2align 4,,10 .p2align 3 .L9: addq $4, %rax cmpq %rcx, %rax je .L8 .L3: cmpl %edx, (%rax) jne .L9 ret .p2align 4,,10 .p2align 3 .L8: xorl %eax, %eax ret .L4: xorl %eax, %eax ret .cfi_endproc .LFE0: .size find_ptr, .-find_ptr .ident "GCC: (GNU) 9.0.1 20190418 (experimental)" .section .note.GNU-stack,"",@progbits [hjl@gnu-cfl-1 pr90178]$ /export/build/gnu/tools-build/gcc-wip-debug/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/tools-build/gcc-wip-debug/build-x86_64-linux/gcc/ -O2 -S x.i [hjl@gnu-cfl-1 pr90178]$ cat x.s .file "x.i" .text .p2align 4 .globl find_ptr .type find_ptr, @function find_ptr: .LFB0: .cfi_startproc movq %rdi, %rax testl %esi, %esi jle .L4 leal -1(%rsi), %ecx leaq 4(%rdi,%rcx,4), %rcx jmp .L3 .p2align 4,,10 .p2align 3 .L7: addq $4, %rax cmpq %rcx, %rax je .L4 .L3: cmpl %edx, (%rax) jne .L7 ret .p2align 4,,10 .p2align 3 .L4: xorl %eax, %eax ret .cfi_endproc .LFE0: .size find_ptr, .-find_ptr .ident "GCC: (GNU) 9.0.1 20190418 (experimental)" .section .note.GNU-stack,"",@progbits [hjl@gnu-cfl-1 pr90178]$