https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122357
Bug ID: 122357
Summary: missed optimization for sum of 2 volatiles on x86
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: benjamin.p.kallus.gr at dartmouth dot edu
Target Milestone: ---
Here's a C program:
> volatile int i, j;
> int main(void) { return i + j; }
x86-64 gcc trunk emits the following at -O3:
> "main":
> mov eax, DWORD PTR "i"[rip]
> mov edx, DWORD PTR "j"[rip]
> add eax, edx
> ret
> "j":
> .zero 4
> "i":
> .zero 4
This could be made a little more optimal:
> "main":
> mov eax, DWORD PTR "i"[rip]
> add eax, DWORD PTR "j"[rip]
> ret
> "j":
> .zero 4
> "i":
> .zero 4
This saves a register and an instruction, and is what clang emits.