expr: Optimize noop copies [PR96539]
authorJakub Jelinek <jakub@redhat.com>
Tue, 11 Aug 2020 11:47:29 +0000 (13:47 +0200)
committerJakub Jelinek <jakub@redhat.com>
Tue, 11 Aug 2020 11:51:59 +0000 (13:51 +0200)
commit299c98578bda88c020a6d5b2c319c9e191a315d4
tree9a9d921e04e8d1facbb1c8bb31de1757883070af
parent6b815e113c9aec397a86d7194f66455eb189cc7a
expr: Optimize noop copies [PR96539]

At GIMPLE e.g. for __builtin_memmove we optimize away (to just the return
value) noop copies where src == dest, but at the RTL we don't, and as the
testcase shows, in some cases such copies can appear only at the RTL level
e.g. from trying to copy an aggregate by value argument to the same location
as it already has.  If the block move is expanded e.g. piecewise, we
actually manage to optimize it away, as the individual memory copies are
seen as noop moves, but if the target optabs are used, often the sequences
stay until final.

2020-08-11  Jakub Jelinek  <jakub@redhat.com>

PR rtl-optimization/96539
* expr.c (emit_block_move_hints): Don't copy anything if x and y
are the same and neither is MEM_VOLATILE_P.

* gcc.target/i386/pr96539.c: New test.
gcc/expr.c
gcc/testsuite/gcc.target/i386/pr96539.c [new file with mode: 0644]