> On 11/05/14 07:09, Jiong Wang wrote:
> >the same ICE will happen on x86-64, if compile with -O2 -fPIC.
> >
> >the reason is for the following two functions, they are identical, so
> >IPA-ICF
> >pass try to transform the second function to call the first one directly.
> >
> >int
> >atomic_compare_exchange_STRONG_RELEASE_ACQUIRE (int a, int b)
> >{
> >   return __atomic_compare_exchange (&v, &a, &b,
> >                     STRONG, __ATOMIC_RELEASE,
> >                     __ATOMIC_ACQUIRE);
> >}
> >
> >int
> >atomic_compare_exchange_n_STRONG_RELEASE_ACQUIRE (int a, int b)
> >{
> >   return __atomic_compare_exchange_n (&v, &a, b,
> >                       STRONG, __ATOMIC_RELEASE,
> >                       __ATOMIC_ACQUIRE);
> >}
> >
> >while during this transformation, looks like there are something wrong
> >with the
> >function argument handling. take "a" for example, because later there
> >are "&a",
> >so it's marked as addressable. while after transformation, if we turn the
> >second function into
> >
> >int atomic_compare_exchange_n_STRONG_RELEASE_ACQUIRE (int a, int b)
> >{
> >   return atomic_compare_exchange_STRONG_RELEASE_ACQUIRE (a, b)
> >}
> >
> >then argument a is no longer addressable.
> >
> >so, in cgraph_node::release_body, when making the wrapper, except
> >clearing the
> >function body, we should also clear the addressable flag for function args
> >because they are decided by the function body which is cleared.
> >
> >bootstrap ok on x86-64 and no regression.
> >bootstrap ok on aarch64 juno.
> >ICE gone away on arm & x86-64
> >
> >ok for trunk?
> >
> >gcc/
> >
> >   PR  tree-optimization/63721
> >   * cgraph.c (cgraph_node::release_body): Clear addressable flag for
> >function args.
> While I understand the need to clear the addressable flag, I think
> release_body probably isn't the best place to do this.  Seems to me
> that ought to happen when we emit the thunk or otherwise transform
> the body into something that doesn't take the address of those
> parameters.

Yep, I would just move it into expand_thunk - the TREE_ADDRESSABLE bits are not 
really
well defined before we build the gimple body.

Honza
> 
> jeff

Reply via email to