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.
- Volodya
I assume you are talking about caller saved registers. If so, you can
make the call instruction implicitly define these registers and the
register allocator will handle the pushes/pops automatically.
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.