https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89198
Bug ID: 89198
Summary: GCC generates/fails to optimize unnecessary sign
extension instruction
Product: gcc
Version: 9.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: nok.raven at gmail dot com
Target Milestone: ---
Target: x86_64
GCC generates/fails to optimize unnecessary sign extension instruction.
unsigned char foo(char c)
{
unsigned i = c;
return ++i;
}
Results in:
movsx eax, dil
add eax, 1
ret
While this one:
unsigned char bar(char c)
{
unsigned char i = c;
return ++i;
}
Results in:
lea eax, [rdi+1]
ret
https://godbolt.org/z/I54SZr
I found a lot of reports about redundant sign/zero extension instructions, did
not open them all but the ten I had opened have more complex examples.