This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Q's about use of is_gimple_reg_rhs/is_gimple_tmp_var
- From: Jeffrey A Law <law at redhat dot com>
- To: Richard Kenner <kenner at vlsi1 dot ultra dot nyu dot edu>
- Cc: dnovillo at redhat dot com, gcc at gcc dot gnu dot org
- Date: Mon, 16 Aug 2004 23:13:54 -0600
- Subject: Re: Q's about use of is_gimple_reg_rhs/is_gimple_tmp_var
- Organization: Red Hat, Inc
- References: <10408161215.AA00339@vlsi1.ultra.nyu.edu>
- Reply-to: law at redhat dot com
On Mon, 2004-08-16 at 06:15, Richard Kenner wrote:
> V = foo();
>
> If the call to foo does throw, the semantics of throw imply that the
> assignment to V must not execute. That's why we expand this to:
>
> tmp = foo ();
> V = tmp;
>
> Standards are "as if". If there is no other assignment to V, then
> there's no way to detect if the assignment occurred or not since V's
> value if it did not occur is undefined.
Right. That would be a possible optimization. Forcing the LHS to be
a temporary ensures the condition that were is no other assignment to
the variable. If you have a clean way to test that this is the only
assignment to the RHS, then sure, you can avoid the temporary copy.
I'm not sure how useful that is since the copy propagator ought to do
the right thing in the case you're considering.
jeff