PowerPC64 non-delegitimized UNSPEC_TOCREL

David Edelsohn dje.gcc@gmail.com
Thu Apr 28 18:15:00 GMT 2011


On Thu, Apr 28, 2011 at 11:22 AM, Alan Modra <amodra@gmail.com> wrote:
> This patch fixes the following warnings seen during a powerpc64
> bootstrap.
>
> libgomp/config/linux/sem.c: In function ‘gomp_sem_wait_slow’:
> libgomp/config/linux/sem.c:33:1: note: non-delegitimized UNSPEC UNSPEC_TOCREL (44) found in variable location
> libgomp/config/linux/bar.c: In function ‘gomp_barrier_wait_end’:
> libgomp/config/linux/bar.c:34:1: note: non-delegitimized UNSPEC UNSPEC_TOCREL (44) found in variable location
>
> What's happening is that we are getting an address that looked like
>  lo_sum ((reg 31)
>          (const (plus (unspec [symbol_ref ("some_var") tocrel]) 4)))
>
> but only expect to handle something like
>  lo_sum ((reg 31)
>          (const (unspec [symbol_ref ("some_var") tocrel])))
>
> I also tidied the macho code which used a mix of "orig_x" and "x",
> makeing the code fragile wrt. some future change that assigns "x"
> earlier in the function.  (If orig_x is a lo_sum, then x == orig_x
> currently.)
>
> Bootstrapped and regression tested powerpc64-linux.  OK to apply?
>
>        * config/rs6000/rs6000.c (rs6000_delegitimize_address): Handle
>        unspec plus offset.  Tidy macho code.

Looks good.

Thanks, David



More information about the Gcc-patches mailing list