r266610 - in /trunk/gcc: ChangeLog config/rs600...

amodra@gcc.gnu.org amodra@gcc.gnu.org
Thu Nov 29 05:03:00 GMT 2018


Author: amodra
Date: Thu Nov 29 05:03:01 2018
New Revision: 266610

URL: https://gcc.gnu.org/viewcvs?rev=266610&root=gcc&view=rev
Log:
[RS6000] PR11848 rs6000_emit_move long double split

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.

	* config/rs6000/rs6000.c (rs6000_emit_move): Disable long
	double split for targets other than Darwin.

Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/rs6000/rs6000.c



More information about the Gcc-cvs mailing list