[LLVMdev] [PATCH] RegScavenger::scavengeRegister

Akira Hatanaka ahatanak at gmail.com
Mon Mar 25 13:41:21 PDT 2013

Hi Jakob,

I believe Hal is trying to enable register scavenger to find two (or more)
registers that can be used as temporaries.

One problem I see with this approach is that, if you use register scavenger
during PEI, you will have to pessimistically set aside two emergency spill
slots before you call scavengeRegister, even if it turns out you only need
one. Having an extra stack slot might not be a big problem, but still it is
nice if we can avoid allocating a slot unnecessarily.

I probably won't need these pseudo instructions that are expanded post-RA
in the first place if I can tell the register allocators to spill
accumulator registers to general purpose integer registers instead of
directly to stack and disallow copying between accumulator registers. But I
guess that is a much more difficult problem to solve. Is that right?

On Mon, Mar 25, 2013 at 1:06 PM, Jakob Stoklund Olesen <stoklund at 2pi.dk>wrote:

> On Mar 25, 2013, at 12:04 PM, Akira Hatanaka <ahatanak at gmail.com> wrote:
> > This patch adds parameter "EliminateFI" to
> RegScavenger::scavengeRegister, which tells register scavenger not to
> eliminate frame index of the emergency spill slot if set to false.
> >
> > I have pseudo load, store and copy instructions which are generated
> during register allocation and expanded post-RA but before the final stack
> size is known. I use register scavenger to search for a temporary integer
> GPR that is used during pseudo-expansion.
> >
> > This is what happens during pseudo-expansion:
> >
> > The following pseudo
> >
> > LoadAC $acc, FI // Pseudo load instructions. Load from FI to accumulator
> $acc.
> >
> >
> > is expanded into this sequence:
> >
> > LW $reg, FI         // load from FI to temporary GPR $reg
> > MTLO $reg         // copy $reg to register LO
> > LW $reg, FI + 4   // load from FI+4 to GPR $reg
> > MTHI $reg          // copy $reg to register HI
> Hi Akira,
> The register scavenger is not really supposed to be used in more than one
> pass, because you would need to allocate a separate emergency spill slot
> for each pass.
> I think Hal is trying to solve a very similar problem for PPC.
> Hal, are you expanding pseudos during PEI?
> /jakob
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130325/14fc9f12/attachment.html>

More information about the llvm-dev mailing list