diakopter well, caching the object's idx (where I think it would be cached) shaves 8% off core setting compilation time, but I get a 'Probable version skew' error when building restricted setting 00:14
diakopter so it either needs rebootstrapped or there's a make dependency problem or I'm stoopid 00:14
diakopter .tell jnthn shaved 8% off CORE compilation by writing the idx after looking it up in interp.c i.imgur.com/WX35mFe.png 01:00
timotimo diakopter: did you get the build problem fixed in the time since then? 01:50
diakopter yes, the build problem was for an earlier attempt (not in interp.c) 01:51
here's the addl line for OP(scgetobjidx): 01:53
MVM_set_idx_in_sc(&GET_REG(cur_op, 4).o->header, GET_REG(cur_op, 0).i64);
timotimo: (I tried to cache it in various places, interp.c was the only safe one) 01:55
brrt goood * #moarvm 13:32
i think i finally know a solution to a problem that's been bugging me
well, a few solutions to some problems
nwc10 good *, brrt 13:33
brrt good *, nwc10 13:38
problem one is, how to deal with the fact that register flow is broken during the compilation of an epxression tree as a result of the expression tree containing calls and conditionals 13:40
well, i'm not 100% finished with it, but i think the best thing is to divide the (linearised) tile list into ... basic blocks 13:41
(such innovation, many wow)
the second problem was how to ensure that some operations have their operands in speciifc registers 13:46
for instance, imul and idiv operands
need rax/rcx pair
so the solution, as far as i can see, is to give the tile a register flags field and implement a platform-specific flag decoder which can assign registers 13:49
these 13:50
'flagged' tiles can then be scanned first to assign registers first
whereas unflagged tiles can use any old register 13:51
dunno if any of that makes any sense.. :-) 13:54
nwc10 I'm not the right person to ask that question to 13:57
brrt hmm... well, ok
:-)
brrt brb 13:59
brrt anyway, i'm happy because i have a clear and reachable goal again 14:08
anyway, off again 14:10
see you
have a nice sunday :-)
diakopter best core setting compilation time in a bunch of runs (without the one-line patch above): 72.0 seconds 17:25
timotimo on my machine i usually get a bit under 50 17:26
diakopter try it with the patch?
50 for stage parse or the whole thing 17:27
timotimo parse stage 17:28
right, you're measuring everything
diakopter most of the improvement is actually in optimize/mast
timotimo where does that line go?
beginning? end?
diakopter best core setting compilation time in a bunch of runs (with the patch): 67.6 seconds
timotimo ah, at the end
my computer is too busy for a good benchmark at the moment 17:29
diakopter ok, moving onto the next hotspot that seems possible aberrant 17:30
*possibly
hoelzro o/ #moarvm 22:46
I'm looking at a memory leak in cleaning up comp units; it seems that body->callsites[i]->arg_flags is malloc'd, but never freed
problem is, callsites[i] may sometimes refer to a common callsite, so we can't just free its arg_flags 22:47
should I add a way to check if a callsite is a common callsite? or maybe there's a better way to go about this?