[LLVMdev] Saving registers used by function

Alkis Evlogimenos alkis at cs.uiuc.edu
Wed Jun 9 06:34:01 PDT 2004


On Wed, 2004-06-09 at 05:26, Vladimir Prus wrote:
> Alkis Evlogimenos wrote:
> > On Wed, 2004-06-09 at 04:56, Vladimir Prus wrote:
> > > Hello!
> > > Is there an (semi)automatic way to save registers used by a function? For
> > > example, on my target I have to store ar0-ar4 and gr0-gr4, gr5, gr6. For
> > > now I just emit huge prologue code to push them all to stack -- even if
> > > they are not modified at all.
> > >
> > > Is there a way to tell LLVM which registers must be stored, and have it
> > > automatically issue pushes/pops? I can live with current design, just
> > > wondering.
> >
> > I assume you are talking about caller saved registers. 
> 
> Actually, about callee saved registers. The naive compiler pushes/pop all 
> registers which are used in a function and must be preserved.

You should define these as they are defined in the X86 and PowerPC
backends:

def X86 : Target {
  // Specify the callee saved registers.
  let CalleeSavedRegisters = [ESI, EDI, EBX, EBP];

PrologueEpilogue inserter will then add store/loads to each register in
this list that is modified.

-- 

Alkis




More information about the llvm-dev mailing list