[Bug tree-optimization/82991] memcpy and strcpy return value can be assumed to be equal to first argument

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Nov 24 12:48:00 GMT 2017


Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
         Depends on|                            |83142

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
Another concern was tail-call optimization which needs to learn that

  foo (x);
  return x;

can be tail-called when foo is returning the argument we return from the
function.  Not too difficult to add.

We don't seem to have a testcase verifying tail-calling of memcpy or another
function returning an argument, so this is an invisible regression of the

struct A { int i; int j; int k; };
void *bar (struct A *dest, struct A *src)
  return __builtin_memmove (dest, src, sizeof (struct A));

is optimized to the following at -O2 but no longer with the current patch:

        movl    $12, %edx
        jmp     memmove

the following testcase isn't optimized:

struct A { int i; int j; int k; };
void *bar (struct A *dest, struct A *src)
  __builtin_memmove (dest, src, sizeof (struct A));
  return dest;

both should be after a suitable fix.  -> PR83142.

Referenced Bugs:

[Bug 83142] Missed tail-call opportunity

More information about the Gcc-bugs mailing list