[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Lightning] Change to how register liveness is calculated after jit_jmpr
From: |
Paulo César Pereira de Andrade |
Subject: |
[Lightning] Change to how register liveness is calculated after jit_jmpr or jit_jmpi(absolute_address) |
Date: |
Mon, 1 Sep 2014 17:03:30 -0300 |
Hi,
This may affect some lightning usage, most likely for good, but
is a significant change.
Previously lightning would mark as live all registers that it
did not know the state whenever reaching a jit_jmpr, or a
jit_jmpi to an absolute address.
The problem is that it usually would mark all registers as
live, leaving no option to the register allocator for code
after a jit_jmpr, that would be likely due to a back jump to
just after the jit_jmpr. And this is exactly how the
experimental language at https://github.com/pcpa/owl calls
class virtual methods.
So, now it basically will treat jit_jmpr, or jit_jmpi to an absolute
address as a function call, and only consider live JIT_Vn registers.
It on purpose also marks all JIT_Rx and JIT_Fx as dead, even if
jit_callee_p(that-reg) is true, what happens in a few backends, so,
if that could be a problem, please let me know.
The previous behaviour was really a bug, and was uncovered by the
change in lightning 2.0.5 to force use of jit_class_nospill on
temporaries that are used to compute a conditional jump (or actual
address to jump).
Thanks,
Paulo
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Lightning] Change to how register liveness is calculated after jit_jmpr or jit_jmpi(absolute_address),
Paulo César Pereira de Andrade <=