01:36 jdv79 joined 01:47 harrow joined 02:01 vendethiel- joined 06:25 domidumont joined 06:36 brrt joined
brrt good * #moarvm 06:37
interesting post on the pyston blog today
nwc10 ooh, thianks for checking on that
nwc10 reads
brrt our jit is comparatively boring 06:39
i.e. we really don't do runtime code modification
06:49 domidumont joined
brrt okay, i have something to put forth the court of #moarvm today again 06:52
06:52 domidumont joined
brrt i sometimes need to spill a value from a register 06:52
(this is another one of those 'i know how to do it the slow way. how to do it the quick and easy way, and is this worth it' stories) 06:53
nwc10 I have no idea about this sort of stuff (sorrY)
hopefully someone who is awake does
brrt hmm
its ultimately just a data structure question though 06:54
my 'value descriptors' sit in array-indexed linked lists so that i can find them by the node (virtual value they represent) or by register they inhabit (while live, anyway) 06:55
it can happen that a value ceases to be live but is not directly evicted from its register because a newer, longer lived value takes it place 06:56
so the list of values in the register slot can have any number of items, and not all of them need to be live
when i do need to spill something, i need to figure out a number of things, notably: which register to spill, whether to insert a store into the code stream, and if so, where to insert it 06:58
spilling, for what it is worth, has the minimum side effect of limiting the live range of values to the point where they are being spilled 06:59
if the value i'm spilling is the only or most long-lived value in the set, then i'll need to insert a store 07:01
if there is a longer lived value in the set of values that describe this node, i don't
so that is a lookup question: how can i efficiently find the longest lived value in the node 07:02
(sorting! .. linked list!)
finding which register to spill is also a difficulty; if there are registers which are already backed by a spilled value, in theory they should have preference over spilling a brand new value 07:04
(stack)
where to insert it is usually pretty simple, fortunately; that is just after the creation of the first live value 07:05
(the store)
doing this all with linked lists is easy enough, it is just busywork, that i'd rather replace with constant time ops 07:06
maintaining a single longest-lived-register is easy 07:07
maintaining a live-range heap is not necessarily so easy
although it is doable
but i'm not entirely sure what to do with it if you have it 07:09
ok, i'm clearly just rambling :-) 07:13
07:49 zakharyas joined 08:49 vendethiel joined 10:15 vendethiel joined 12:24 colomon joined 12:36 dalek joined 12:47 cognominal left 13:26 vendethiel- joined 17:46 domidumont joined 20:06 ilbot3 joined 21:48 harrow` joined 21:51 BinGOs_ joined, lnx_ joined 22:02 BinGOs joined