[Bug rtl-optimization/87238] New: Redundant Restore of $x0 when memcpy always returns the first argument.
hiraditya at msn dot com
gcc-bugzilla@gcc.gnu.org
Wed Sep 5 21:07:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87238
Bug ID: 87238
Summary: Redundant Restore of $x0 when memcpy always returns
the first argument.
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: hiraditya at msn dot com
Target Milestone: ---
$ cat test.cpp
struct BigStruct {
int x[64];
};
void structByValue(BigStruct s);
void callStructByValue(int unused, int unused2, BigStruct s) {
structByValue(s);
}
$ g++ -O3 -arch arm64 test.cpp -S -o -
callStructByValue(int, int, BigStruct):
stp x29, x30, [sp, -272]!
mov x1, x2
mov x2, 256
add x29, sp, 0
add x0, x29, 16 <<--------
bl memcpy
add x0, x29, 16 <<-------- redundant
bl structByValue(BigStruct)
ldp x29, x30, [sp], 272
ret
We could just do remove the second 'add x0, x29, 16' as memcpy is guaranteed to
return the pointer to desination.
http://man7.org/linux/man-pages/man3/memcpy.3.html
Possibly duplicate of PR82991 but not sure.
More information about the Gcc-bugs
mailing list