On Sun, Nov 25, 2018 at 10:52:08PM +1030, Alan Modra wrote:
> This split is disabled for power7 and up, so we don't often see its
> bad effects.  However, on a powerpc-linux compiler (which defaults
> to PPC750 judging from rs6000/sysv4.h) we see
> 
>       long double ld1 (void) { return 1.0L; }
> 
> compiled with -msoft-float -O2 -S resulting in
> 
>       ld1:
>               li 3,0
>               li 4,0
>               mr 6,4
>               mr 5,3
>               li 4,0
>               lis 3,0x3ff0
>               blr
> 
> Things go awry in init-regs, with the TFmode reg being initialized to
> zero on seeing the subreg from the split.  (And that initialization
> itself is split by rs6000_emit_move!)  Later passes apparently don't
> clean up the rubbish.
> 
> Since the split was added for Darwin (as the comment says), let's get
> rid of it on other targets.
> 
> Bootstrapped etc. powerpc64le-linux and powerpc64-linux.
> 
>       * config/rs6000/rs6000.c (rs6000_emit_move): Disable long
>       double split for targets other than Darwin.

Okay for trunk, thanks!


Segher

Reply via email to