> On Thu, 6 Feb 2014, Jan Hubicka wrote:
> 
> > Hi,
> > at WPA we currently read trees accessed by jump functions and then copy them
> > to remove location that is already known to be UNKNOWN and then keep copying
> > them for every inline clone introduced (and there are many for firefox)
> > 
> > This patch makes us to copy only when expression really has an location in 
> > it.
> > 
> > Bootstrapped/regtested x86_64-linux, OK?
> 
> Hmm, I think you either can use just
> 
> if (EXPR_P (expr))
>   walk_tree (&expr, prune_expr_location, NULL, NULL);
> 
> or you miss unsharing and create invalid shared trees when
> the expr does not contain locations.
> 
> I fear it's the latter, given how ipa_set_jf_* is used.

Well, ipa-prop analysis takes random operands from GIMPLE bodies and stores
them into jump function. Then it streams in/out, propagates and eventually uses
them as a replacements for bodies.

We use unshare_without_location primarily to prevent LTO from need to stream
stale BLOCK expressions and to avoid  inserting wrong blocks into clones
http://gcc.gnu.org/ml/gcc-patches/2012-12/msg01176.html
http://gcc.gnu.org/ml/gcc-patches/2012-09/msg01343.html

Calling prine_expr_location would kill locations in the original function body 
they
are taken from. For constant JF, they are IP invariants, so I do not think they 
need
unsharing. THe arithmetic is never inserted back to GIMPLE code.

I can also just add no_unshare parameter to jump functions to avoid the 
unsharing
during stream-in, possibly.

Honza

Reply via email to