This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: IRA conflict graph & alternative selection


Ian Lance Taylor wrote:
Paolo Bonzini <bonzini@gnu.org> writes:

That is in brief how I see it and there are a lot of reload details
missed (like virtual register eliminations or addressing displacement
constraints etc).
I suppose those would stay in reload?

I see no reason for those to stay in reload (especially since I think
reload should disappear entirely). It is reasonable to pick the total
maximum size of the stack frame, and thus resolve all displacement
constraints, before register allocation. Carefully relaxing these
constraints during reload can give you slightly better results for some
instructions, but only in very very few cases, and only in functions
which already have unusually large stack frames. I don't consider that
to be an important optimization. Given that, we can determine the
maximum offset for all virtual registers before register allocation,
which suffices for selection of insn constraint alternatives, and then
determine the actual offset, once, after register allocation.
I would agree that careful relaxation of displacements is no longer as important as it once was, I don't think we can just hand wave away the displacement issues

1. The stack frames don't have to be that big to bump up against these problems.

2. The code we generate if we have to reload the address because the displacement was out of range can be horrific

3. There are targets where other registers used in the insn determine the range of the displacement. ie, in a load from memory, the destination register used determines the valid range of displacements (+-16 bytes vs +-8k on one target I'm aware of.

4. Register eliminations complicates matters as well. Enough that I don't think you can set maximum offsets until you've finalized everything in the stack -- which implies that you're done spilling.



Jeff




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]