[Bug target/108371] New: gcc for x86_64 may sign/zero extent arguments unnecessarily
dhowells at redhat dot com
gcc-bugzilla@gcc.gnu.org
Wed Jan 11 14:04:40 GMT 2023
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108371
Bug ID: 108371
Summary: gcc for x86_64 may sign/zero extent arguments
unnecessarily
Product: gcc
Version: 12.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: dhowells at redhat dot com
Target Milestone: ---
When compiling for x86_64, bool, char and short arguments that are passed
directly to an argument of exactly the same type on another function with no
modification, e.g.:
void __bio_release_pages(char mark_dirty);
void bio_release_pages(char mark_dirty)
{
__bio_release_pages(mark_dirty);
}
get sign/zero-extended unnecessarily. In the case of the above code, it
compiles to:
0: 40 0f be ff movsbl %dil,%edi
4: e9 00 00 00 00 jmp 9 <bio_release_pages+0x9>
with "gcc -Os -c test.c". Can the extension be optimised away? Granted, the
upper bits bits of RDI could contain rubbish on entry to bio_release_pages(),
so sanitisation is not unreasonable - but on the other hand,
__bio_release_pages() would surely have to assume the same and do the same
sanitisation?
The toolchain used is the Fedora 37 system compiler:
gcc-12.2.1-4.fc37.x86_64
binutils-2.38-25.fc37.x86_64
More information about the Gcc-bugs
mailing list