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