[patch][rfc] Hookize SMALL_REGISTER_CLASSES, make SSE register classes not small
Wed Dec 10 09:48:00 GMT 2008
> On Tue, Dec 09, 2008 at 11:30:58PM +0100, Steven Bosscher wrote:
> > Hi,
> > Attached is a patch to hookize the SMALL_REGISTER_CLASSES target
> > macro. But the actual purpose of the few hours I've spent on this,
> > was to make it possible to have SMALL_REGISTER_CLASSES be false for
> > some register classes but not for all.
> > In the current situation, SMALL_REGISTER_CLASSES is true or false, but
> > targets are not black and white. For x86-64, I've noticed we often
> > get better results with floating point code if I disable
> > SMALL_REGISTER_CLASSES, but it also results in lots of trouble with
> > INTEGRAL_MODE_P modes (similar to what happens if you enable
> > scheduling for x86-64).
> > With the patch, a target can choose to allow more optimizations when
> > it has good reason to believe that registers in some machine modes
> > will not be allocated to small register classes. I didn't test this
> > with a recent trunk, but before the IRA merge this gave me a ~1.3%
> > bonus (average) for the Fortran Polyhedron benchmarks.
> > As with the code-size aware PRE patch, I'm looking for opinions on
> > this approach. Does this look like a reasonable approach? Would it
> > be useful for other targets? (I've now simply converted the existing
> > SMALL_REGISTER_CLASSES definitions to hooks).
> Back when I was at AMD, I often times thought about making
> SMALL_REGISTER_CLASSES false for x86_64 bit (where you have more registers),
> but I never got around to doing it.
It won't work in general. Integer registers are still special purpose
and we are still using single register classes in constraints...
But I do like idea of disabling it for SSE. Will it work for x87 too?
(there is special class for top of stack that might spoil this)
> Michael Meissner, IBM
> 4 Technology Place Drive, MS 2203A, Westford, MA, 01886, USA
More information about the Gcc-patches