Dynamic number of registers

Hi, I'm pondering using LLVM's backend pipeline to generate code for a
virtual machine (the DTrace DIF emulator) where the number of
registers must in general be queried dynamically*. Is this a
functionality that LLVM's backend pipeline currently supports? Does
LLVM's current backend pipeline assume a statically known register
set?

* For you DTrace nerds out there, yes, I know that in practice you can
probably "get by" by assuming 8, but nevertheless the "correct" way
(as documented) is to query for this number dynamically with
DTRACEIOC_CONF. I'm mostly just asking because if it's not too
difficult, doing it the "correct" way would be nice.

--Sean Silva

It does, but you can dynamically reserve registers.

/jakob

It does, but you can dynamically reserve registers.

So, if I'm understanding this correctly, the approach would then be to
use a large upper bound on the number of registers (the instruction
encoding limits it to 256, so that is safe), and then say "don't use
registers [N,256)" in order to effectively codegen for registers
[0,N)?

Also, could you provide me some pointers to the APIs that allow
dynamically reserving registers?

Thanks,

--Sean Silva

It does, but you can dynamically reserve registers.

So, if I'm understanding this correctly, the approach would then be to
use a large upper bound on the number of registers (the instruction
encoding limits it to 256, so that is safe), and then say "don't use
registers [N,256)" in order to effectively codegen for registers
[0,N)?

Right.

Also, could you provide me some pointers to the APIs that allow
dynamically reserving registers?

TRI::getReservedRegs.

Thanks Jakob.

--Sean Silva