This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/82991] memcpy and strcpy return value can be assumed to be equal to first argument
- From: "rguenth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 15 Nov 2017 08:35:40 +0000
- Subject: [Bug tree-optimization/82991] memcpy and strcpy return value can be assumed to be equal to first argument
- Auto-submitted: auto-generated
- References: <bug-82991-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82991
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |ASSIGNED
Last reconfirmed| |2017-11-15
Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org
Ever confirmed|0 |1
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #1)
> GCC tracks that fact, see gimple_call_return_flags ERF_RETURNS_ARG and
> ERF_RETURN_ARG_MASK to say which argument it is.
> From what I can see, it is used during aliasing and vrp (in the latter case
> only whether it is non-NULL or not). So it is just a matter of using it in
> further optimizations. But it needs to be used with care.
> Trying to optimize:
> return strcpy (x, y);
> as
> strcpy (x, y);
> return x;
> is not a good idea, it would make it not tail-call optimizable, and in many
> cases even for RA purposes it is cheaper to read the value from the return
> register rather than saving it in call saved register and restoring from
> there, etc. Which is why it is not that strightforward to say do it in SCCVN.
Yes, I've done it in SCCVN (I belive there's a dup of this PR), also to the
effect to transform
x = strcpy (y, z);
foo (y);
to
x = strcpy (y, z);
foo (x);
I can dig up the patch, it must be sitting somewhere on my disk...