http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50962
Bug #: 50962
Summary: Additional opportunity for AGU stall avoidance
optimization for Atom processor
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
AssignedTo: [email protected]
ReportedBy: [email protected]
We have now following code for attached testcase:
foo:
.LFB0:
.cfi_startproc
movl 4(%esp), %eax
testl %eax, %eax
je .L4
xorl %ecx, %ecx
jmp .L3
.p2align 4,,7
.p2align 3
.L5:
movl %eax, %ecx
movl %edx, %eax
.L3:
movl (%eax), %edx <--- AGU stall here on Atom since eax produced on
previous cycle. We should use lea in previous instruction.
movl %ecx, (%eax)
testl %edx, %edx
jne .L5
ret
.L4:
xorl %eax, %eax
ret
.cfi_endproc
So we can use lea before movl (%eax), %edx which is better for Atom.