re-re-ping.

Steve Ellcey
sell...@cavium.com

On Tue, 2017-10-24 at 11:16 -0700, Steve Ellcey wrote:
> Re-ping.
> 
> Steve Ellcey
> sell...@cavium.com
> 
> On Mon, 2017-09-25 at 10:36 -0700, Steve Ellcey 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.

Reply via email to