During this change (recalculate BB and life info on the fly for spilled regs) I encountered another problem with the INOUT ARG_DIR argument of P-registers:

set P0, P1[2]

and similar instructions don't need, that P0 already exists at this instruction. P0 is set to point to a PMC located in the aggregate. This is different to, e.g.

set P0, 42

where this PMC must have been brought into life some instructions earlier, probably by some "new P0, .PerlSome" opcode.

I have currently a hack in imcc, which catches the former and sets the INOUT $1 to OUT $1.

So I think:
- when we have $1->vtable->foo, then the $1 should be IN
- when we have $1 = $2->vtable->bar, then $1 should be OUT

I know, we did have this discussion already, it was one of the first where I was involved :-) But there are still issues.
imcc is the only user of the ARG_DIR params, when PMCs are involved, JIT only looks at I and N regs (currently).


leo



Reply via email to