02:34 vendethiel joined 03:16 kjs_ joined 05:46 TimToady_ joined 08:44 domidumont joined 08:49 domidumont joined 10:51 vendethiel joined 11:16 leont joined 11:27 18WABBFX8 joined 12:32 nebuchadnezzar joined 12:44 kjs_ joined
timotimo jnthn: frame.c has the instrumentation level barrier check if the levels are unequal. if they are, it sets to the instances current instrumentation level and then only does a single instrumentation; is that correct? perhaps we want to make profiling, cross-thread-writing, and coverage reporting to be mutually exclusive 12:55
13:41 moritz_ joined, arnsholt_ joined, ashleydev joined 13:42 Util joined 13:45 vendethiel joined
timotimo there seems to not be a precedent yet for allocating objects during a spesh or instrumentation phase. but i expect it'll be all right 13:45
13:55 kjs_ joined 13:57 ilmari joined
jnthn timotimo: We assume during spesh that we won't allocate, fwiw 14:21
(That's relied on in various places) 14:22
timotimo oh, good to know 14:24
14:24 vendethiel joined
timotimo how do i allocate a spesh slot that a later op can then allocate an object into? 14:24
can i just set it to 0 and later change the effective_spesh_slots array? 14:25
jnthn I...guess 14:27
timotimo i'm trying to give each spesh graph a little BOOTIntArray where it stores if a given line has already been reported
it feels icky; it looks like you agree :)
jnthn On the instrumentation: yeah, we don't have a story on composing those yet. It's a hard problem, so I decided to just leave it :)
For when there's time :) 14:28
timotimo right. i wasn't expecting it to be easy to just instrument one after the other
i could just go full insanity mode and use malloc to allocate that BOOTIntArray
jnthn You usually only use one or the other anyway
timotimo yeah, who would profile *and* coverage-analyze
jnthn You're not actually doing anything with spesh, just writing an instrumentation? 14:29
timotimo and if you expect things to blow up because of threadedness trouble, you wouldn't run a coverage log either
that's right
jnthn ah
Then at least if it busts it's low-impact :)
timotimo it puts a reporting op after each bb's batch of PHI ops
hehe.
then i'll keep the current way until i find it breaks
14:30 virtualsue joined
timotimo it'll be running against the spec test suite, so it'll have plenty of work and opportunity to asplode 14:30
if i pre-size that array at instrumentation time to hold all possible reportable numbers, it'll not be trouble to access the BOOTIntArray concurrently either!
i'm starting to think this isn't going to suck terribly :) 14:32
jnthn :)
timotimo cool. tc is null. that's new. 14:43
timotimo builds with 0 optimization
huh. effective_spesh_slots is 0 14:44
well, that's not so nice 14:45
dalek arVM/line_based_coverage: 5795ee0 | timotimo++ | / (11 files):
first prototype of a per-line coverage reporter
14:46
timotimo maybe it's something obvious that makes that happen. it occurs when the interpreter hits the coverage_log instruction 14:47
or perhaps it's impossible to use spesh slots from instrumentation because it neglects to set up ... something? 14:50
perhaps because it kicks out all spesh candidates after instrumenting? and perhaps that makes the spesh slots disappear, too? :\ 14:57
jnthn: maybe you can figure something out, i'll be AFK for a bit 14:59
15:20 ilmari joined 15:28 camelia joined 15:39 flussenc1 joined 15:55 flussence joined 16:07 kjs_ joined
JimmyZ so jvm has less than 300 opcode and we have more than 750 opcode? ;) 16:09
16:36 dalek joined
jnthn JimmyZ: Did you count all of their VM-implemented methods too? 16:57
JimmyZ jnthn: I didn't , but I know they have special VM-implemented methods 17:02
jnthn Right, so you need to count those too to get a fair comparison.
timotimo jnthn: got a clue about the disappearing spesh slots? 17:07
jnthn Oh... I guess it's that instrumenation does not actually go through the full spesh pipeline. 17:11
timotimo right
jnthn Otherwise we'd think instrumented frames were already specialized.
timotimo but i can do it for this one?
jnthn Um...not...easily... 17:12
timotimo OK, so i'll use malloc instead of the gc to alloc those arrays? :P
jnthn Or I can't see an asy way :(
Yeah, that'd do it
17:13 flussence joined, vendethiel joined
timotimo grmbl. we don't have a GET_I64 17:21
oh, we do 17:23
it's just named differently
hm. my MVMArray isn't being set up right, it seems 17:38
body->slots ends up being a null pointer 17:40
but body->elems is set to 1 17:41
.o( if we only have 1 element, we could totally store that in the body pointer! what a fantastic space saving idea!!)
oh, i have to use zeroed alloc 17:45
malloc*
i forgot malloc doesn't do that for you :)
that's a silly mistake to make :) 17:46
ho-hum. a segfault in "goto NEXT" 17:49
17:51 domidumont joined
timotimo my instruction is defined to be str int32 int32 int64 and i do cur_op += 20; that should be right, right? 17:52
haha. in my last commit i forgot to add the new files 17:55
dalek arVM/line_based_coverage: 6a7c350 | timotimo++ | / (6 files):
add missing files, adjust op to not use spesh slot

since instrumented frames are actually not fully speshed, and can't easily be, we have to rely on a literal int64 as a pointer to the line report store and allocate it without involving the GC, so it won't move.
17:57
timotimo oh! it's because i'm corrupting jumplists! 18:01
hum. 18:08
my jumplist detection code doesn't work here 18:09
there isn't actually a jumplist, so the bytecode itself must have been corrupted or something? 18:10
oh. my conclusion about jumplist not being there might well be wrong 18:13
as i used the spesh log, but that only triggers when frames get considered hot
whoa, ouch. num_preds is 0 for all those BBs? 18:17
jnthn timotimo: I think we may compute those as part of SSA
And if you just copied the profiler code, it knows it doesn't need that analysis doing 18:18
timotimo right, that'd make sense
:)
i did copy that! :)
jnthn So simply asks for a CFG without SSA applying.
timotimo if i can rely on all blocks following the jumplist to be chained in linear_next properly, i can just skip them that way
ho-hum. 18:20
now i just don't instrument bbs that have exactly one instruction which is a goto
and that gets me to ===SORRY!===
No lexical found with name 'decints'
damn. const_iX NYI; so i'm creating bogus bytecode here 18:22
neato! i have something that survives a simple "say 'hi!!'" 18:25
next step is to throw out the BOOTIntArray and use a little chunk of memory instead, to make the impact a bit less severe 18:31
dalek arVM/line_based_coverage: 479e645 | timotimo++ | src/instrument/line_coverage.c:
properly skip over jumplists
18:34
arVM/line_based_coverage: 0d94be2 | timotimo++ | src/ (3 files):
use a blob of memory instead of BOOTIntArray

this ought to make things a bit less expensive.
18:56
Heuristic branch merge: pushed 35 commits to MoarVM/even-moar-jit by bdw 19:29
timotimo ohai brrt
19:39 brrt joined
brrt ohai timotiom 19:40
i was actually just pushing something i'd merged earlier :-)
timotimo oh, ok 19:41
you know how happy i am every time i see you commit stuff ;)
i'll be afk for half an hour now, after that i'll teach spesh to kick out coverage reports that have already fired before we hit the spesh and that'll allow a few frames to be jitted again 19:42
but i'm running a full spec test run at the moment, collecting all coverage reports with tail -f on the one file and putting the result into another file
it's already 300 megabytes big :)
brrt wow :-o 19:45
anyway, i maybe get some work down on the tiler linearisation tomorrow 19:47
i hope :-)
see you!
jnthn o/ brrt
timotimo \o/ 20:12
20:37 JimmyZ joined 21:49 leont joined