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.