I think the change is good. But I don’t have the permission for approval…
Qing > On Sep 25, 2017, at 12:36 PM, Steve Ellcey <sell...@cavium.com> wrote: > > Ping. > > Steve Ellcey > sell...@cavium.com > > > On Fri, 2017-09-15 at 11:22 -0700, Steve Ellcey wrote: >> PR 81356 points out that doing a __builtin_strcpy of an empty string on >> aarch64 does a copy from memory instead of just writing out a zero byte. >> In looking at this I found that it was because of >> aarch64_use_by_pieces_infrastructure_p, which returns false for >> STORE_BY_PIECES. The comment says: >> >> /* STORE_BY_PIECES can be used when copying a constant string, but >> in that case each 64-bit chunk takes 5 insns instead of 2 (LDR/STR). >> For now we always fail this and let the move_by_pieces code copy >> the string from read-only memory. */ >> >> But this doesn't seem to be the case anymore. When I remove this function >> and the TARGET_USE_BY_PIECES_INFRASTRUCTURE_P macro that uses it the code >> for __builtin_strcpy of a constant string seems to be either better or the >> same. The only time I got more instructions after removing this function >> was on an 8 byte __builtin_strcpy where we now generate a mov and 3 movk >> instructions to create the source followed by a store instead of doing a >> load/store of 8 bytes. The comment may have been applicable for >> -mstrict-align at one time but it doesn't seem to be the case now. I still >> get better code without this routine under that option as well. >> >> Bootstrapped and tested without regressions, OK to checkin? >> >> Steve Ellcey >> sell...@cavium.com >> >> >> >> 2017-09-15 Steve Ellcey <sell...@cavium.com> >> >> PR target/81356 >> * config/aarch64/aarch64.c >> (aarch64_use_by_pieces_infrastructure_p): >> Remove. >> (TARGET_USE_BY_PIECES_INFRASTRUCTURE_P): Remove define. >> >> >> 2017-09-15 Steve Ellcey <sell...@cavium.com> >> >> * gcc.target/aarch64/pr81356.c: New test.