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]$

Reply via email to