01:05 jnap1 left 01:58 FROGGS joined 02:59 btyler joined 06:09 bcode_ joined 06:10 flussence joined
sergot morning o/ 06:31
07:28 FROGGS joined 08:14 brrt joined
brrt \o moarning 08:15
FROGGS morning brrt 08:18
brrt: you are excited?
brrt morning froggs :-)
yes
about what, actually?
FROGGS looks like I'm becoming a soccer fan on my ol' days
brrt haha ok, i see 08:19
FROGGS :o)
brrt there's a difference between a soccer fan who watches world cups and a soccer fan
brrt can't find his glasses 08:20
found them
FROGGS hehe
I'm just the former for sure :o)
brrt yay, sigsegv 08:48
FROGGS \O/ 08:52
nwc10 .tell jnthn I made you a cut down test case: paste.scsys.co.uk/407344 09:01
botfail
FROGGS nwc10: do it in #perl6 09:03
brrt ok, trampolining now works 09:09
jnthn morning 09:10
brrt: bouncy bouncy 09:11
brrt morning jnthn :-)
you shot a nice hole in my 'lets return whether we the jit code is done' theory
because when optimizing jit-jit calls, that is not a good idea 09:12
FROGGS brrt: now you can put it on the wall and watch it :o9
:o)
brrt :-D
jnthn Well, yeah, you may need to fall back into the JIT again when returning... 09:13
If you're doing the "always returns" model
brrt the always returns model isn't viable 09:14
returns-is-coupled-to-return-instruction is probably better
jnthn bbi5 09:17
brrt hmm.. when are frames constructed? 09:23
oh, found it, fixed it 09:24
brrt has the feeling that x64 is much more sensitive to segv than x86 was 09:25
ok, now i'm at infinite looping 09:31
jnthn segv at least gives a point that's a problem :) 09:35
brrt that is quite rare, in my case, since most of the time the point doesn't represent any code 09:42
jnthn ah, true :)
brrt hmm.. i thought conditional jumps could take registers 09:43
but they can't 09:46
jnthn aww
brrt no matter, an unconditional can 09:48
whut, a set with equal source and destination operands 09:51
jnthn That can happen 09:52
spesh may do decont dest, src ==> set dest, src 09:53
If it doesn't need to decont
But it doesn't clear up the sets yet
Which sounds like an easy optimization except you can't quite just make it fall out of usage analysis because if you take away a set (or other instruction) that puts something that's used across a deopt boundary, and you deopt there, then the data could be missing post-deopt... 09:54
dalek arVM/moar-jit: 63e201a | (Bart Wiegmans)++ | src/ (9 files):
Add support for fastinvoke.

There are several weaknesses with the current approach, and I'll get to them in due course. Note that this is only visible if you disable inlining first.
10:00
jnthn brrt: hehe, otherwise it will JIT-compile the inlined frame? 10:01
brrt yes, that's complex, and we'd have to find a way to have 'data restoration' aside from just frame restoration during deopt
jnthn Well, spesh knows where deopt boundaries are 10:02
So it can just factor that into it's analysis
I came up with a way to do that the other day
And now I seem to have forgotten it. tssk
brrt no, because the inliner wants too move the integer->object conversion to the frame instead of it being done by the return instruction
jnthn I'm sure it involved the dominator tree...
ah, yeah...
brrt can't really help there
jnthn np :) 10:03
brrt i've got to go run errands :-)
bbi3h
jnthn ok
o/
10:03 brrt left
jnthn nwc10: OK, sadly it doesn't blow up under anything here. 10:04
(anything I have)
10:04 cognominal joined
nwc10 jnthn: it's like this: paste.scsys.co.uk/407365 10:05
jnthn m: say 6400 / 8 10:08
camelia rakudo-moar 41574a: OUTPUTĀ«800ā¤Ā»
jnthn oh... 10:09
m: say 6400 / (8 * 4)
camelia rakudo-moar 41574a: OUTPUTĀ«200ā¤Ā»
nwc10 jnthn: try valgrind? paste.scsys.co.uk/407369 10:17
jnthn m: say 796 * 8 10:24
camelia rakudo-moar 41574a: OUTPUTĀ«6368ā¤Ā»
jnthn nwc10: Don't suppose you could try it with this patch: gist.github.com/jnthn/71d9084a495494f5bf2f 10:27
(and send me the output) 10:28
The data I get from it here doesn't add up to an overrun...
nwc10 from someone at work: pbs.twimg.com/media/BsEBVyPIYAEiFaQ.png - look, a scrollbar 10:45
jnthn lol 10:46
10:47 teodozjan joined
timotimo :D 10:48
jnthn The other clue I have on this is that there are some cases where we leave the routine before OSR logging is completed. 10:50
Then it's meant to degrade to normal logging. 10:51
nwc10 I'm redoing it with fprintf(stderr, ...) to get the output in the right order 10:52
OK, I thought that I was...
paste.scsys.co.uk/407382 10:55
logging at 796
logging at 800
==24858== Invalid write of size 8
jnthn huh, the 800 never happens here o.O
nwc10 that's probably the important poart
oh, curious
jnthn The highest I ever see is 796 10:56
nwc10 most strange
jnthn Things diverge after "logging at 796" 10:58
Seems your next entry is "OSR set up with 37 log slots" 10:59
Mine isn't that
I don't get the mass of 1s output either...what... 11:00
nwc10 yes, "what" ? 11:01
jnthn But...what in the script is meant to output those? 11:04
nwc10 say @b; 11:06
jnthn um...are we looking at the same script?
nwc10 that's in a block that was cut down from something longer in the original test
oh
I'm looking at the one in the URL on #perl6
jnthn There's no say @b in paste.scsys.co.uk/407344
nwc10 paste.scsys.co.uk/407345 11:07
that was the update
jnthn oh...
I'd assumed you'd linked me the same two...
nwc10 no, sorry
jnthn I get the 1s out now, but still it diverges a bit later 11:12
nwc10: I still struggle to replicate it, but I did find an off-by-one: gist.github.com/jnthn/f2538f88a794a1ca4516 11:21
nwc10 still have an invalid write :-( 11:33
jnthn :/ 11:34
nwc10: I'm betting gist.github.com/jnthn/90e65072fad8a978776f will fix it, but it's kinda a band-aid rather than hitting the root cause... 11:56
I think I mighta figured out the scenario where things go awry, though... 11:58
nwc10: gist.github.com/jnthn/206760395498553d4407 is latest 12:07
nwc10 OK, was going to finish the build & test of the previous
jnthn OK.
I need to eat :)
nwc10 this is a good plan.
jnthn So no hurry :)
nwc10 which reminds me to remind ilmari 12:08
jnthn Especially given the shop is an eating pre-req :)
12:11 cognominal joined 12:22 jnap joined
dalek arVM/moar-jit: 8d16619 | (Bart Wiegmans)++ | src/ (8 files):
Simplify JIT reentry (and renamed the label value)
12:28
12:34 brrt joined
jnthn back 12:39
brrt too
i'm in need of sage advice again 12:40
the perennial question
'now what'
jnthn Invocation and returning now works? :)
Including the non-spesh invoke? 12:41
brrt no, non-spesh invoke doesn't work yet 12:42
jnthn OK, that's probably a good target while invocation is swapped in to your brain :)
12:45 cognominal joined 12:54 ggoebel111117 joined
jnthn nwc10: Any results, or tied up with other things? :) 13:00
nwc10 ASAN clean 13:01
building with ASAN to see what valgrind thinks
that is, ASAN is clean on the "bodge" version, and your believed-actual-fix 13:02
jnthn ok :)
nwc10 has not fixed the other ASAN error (the 3 threads in the lock test)
jnthn hunts the browser tab with that one 13:03
grr...can't find it :/ 13:06
nwc10 can regenerate, with current line numbers 13:07
==30944== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 9 from 9) 13:08
jnthn ok, thanks
nwc10 PASS. Or Score!
jnthn \o/
nwc10 or whatever it is
yes, \o/ I think is best 13:09
dalek arVM: 8b777f5 | jnthn++ | src/ (3 files):
Fix OSR issues when we didn't reach finalize.

Harden the logging increment check to make sure it never logs too much; this is more robust than the exit counter. If we are leaving an OSR'd frame without doing enough iterations, complete optimization anyway, since we know it's hot; this as a side-effect also avoids a number of potential races with bad behavior. nwc10++ for helping to track this one down.
13:10
brrt brb :-) 13:11
14:12 ilbot3 joined
jnthn nwc10: I'm pretty sure that'll nail it. :) 14:12
nwc10 # FUDGED! 14:13
seems to. Will do full test
(takes a bit longer than a MoarVM rebuild)
14:15 synopsebot joined
lizmat so not time to bump MOAR_REVISION yet ? 14:18
14:26 brrt joined 14:27 carlin joined
nwc10 jnthn: yes. zero ASAN barf failures. 14:37
t/spec/S06-advanced/wrap.rakudo.moar fails actual tests
14:43 btyler joined
lizmat nwc10: that's a known one, and probably unrelated 14:51
jnthn Nice to be clean again. :) 14:58
lizmat I guess I'm gonna mark them as todo 14:59
[Coke] (please open a ticket for them, so I don't have to. :)
lizmat [Coke]: will do 15:01
nwc10 well, clean apart from that one 15:03
jnthn I meant ASAN-wise... 15:06
nwc10 yes, ASAN is barf-free
jnthn++ # taming ASAN
[Coke] lizmat++ 15:09
brrt much rejoice? 15:28
ok, i'm seeing a sp_getspeshslot between prepargs and invoke 15:39
jnthn ohhh 15:40
uh, yeah, those can sneak it.
By spesh
*in
brrt hmm
are they correct if they sneak in?
jnthn I *think* you can always pretend the thing happened before prepargs
Yes
It's done by the thingy that statically figures out what to call 15:41
Like, if it resolves a multi-dispatch
You'll typically find they come hand in hand with sp_fastinvoke
In theory we could try and make spesh shove them right before the prepargs...
brrt that would be ideal for my case 15:42
where would i find the source for this?
jnthn optimize.c
brrt i supposed so
jnthn Of note, optimize_call
line 529 is the money shot, I guess 15:43
arg_info will also let you locate the prep_args 15:44
*prepargs
brrt ok, very nice
jnthn So you'll want something like MVM_spesh_manipulate_insert_ins(tc, bb, the_preparg_ins->prev, ss_ins);
brrt uhuh 15:45
i'm checking it out :-) 15:46
thanks :-)
15:54 FROGGS[mobile] joined
dalek Heuristic branch merge: pushed 16 commits to MoarVM/moar-jit by bdw 16:00
brrt dalek++
ok, dinner& 16:05
jnthn nom well :)
16:13 FROGGS joined 16:22 cognominal joined
[Coke] bdw? 17:25
jnthn [Coke]: ? 17:32
17:34 brrt joined
brrt tnx 17:34
nwc10 jnthn: disable fixed size allocator and ASAN barfs on t/spec/integration/advent2010-day11.t 17:43
paste.scsys.co.uk/407476
[Coke] 12:00 < dalek> Heuristic branch merge: pushed 16 commits to MoarVM/moar-jit by bdw 17:44
FROGGS [Coke]: that's brrt 17:48
brrt bdw is the name of my github account, yes
17:57 woolfy1 joined
jnthn nwc10: If you set the env var MVM_SPESH_OSR_DISABLE, does it go away? 18:06
brrt moving sp_getspeshslot to before prepargs doesn't seem to cause any problems (as i expected it shouldn't :-)) 18:09
hmm 18:11
jnthn yeah, I'd have been very surprised if it did.
brrt i do get an error building rakudo, but that may be unconnected 18:12
FROGGS brrt: what error? 18:16
brrt let me see until it makes the error
Error while compiling op cleardispatcher: No registered operation handler for 'cleardispatcher' 18:17
FROGGS: is this a known error?
FROGGS brrt: this was added to nqp four days ago 18:18
brrt: looks like you just need to pull and build nqp and rakudo again
nwc10 jnthn: MVM_SPESH_OSR_DISABLE=1 and it still bargs 18:28
barfs
brrt seems so
(wrt to the nqp install)
(yay, JIT compiles no fewer than 326 fragments in the nqp compilation process) 18:29
timotimo hey, that's pretty good
do you have any data on how long these fragments end up being? 18:30
brrt not yet, should check the log
timotimo sounds very good, in any case :)
brrt yes, and apparantly, all fragments work, too 18:31
jnthn nwc10: Hm, OK. And, separately, MVM_SPESH_INLINE_DISABLE=1?
nwc10 pass
jnthn Aha. 18:32
brrt 249 bits in rakudo now
brrt expects that will be a greater number once invoke proper works
jnthn Still doesn't help me guess what's up, though...
OSR woulda narrowed it more.
timotimo d'aaw, the kitteh just let me pet 'is belly :3 18:33
dalek arVM/moar-jit: 66a7d29 | (Bart Wiegmans)++ | src/spesh/optimize.c:
Move sp_getspeshslot before prepargs in optimize_call

The optimizer sometimes inserts sp_getspeshslot node between the args instructions and the invoke instruction, which is annoying as it confuses the JIT, which likes to treat the sequence between prepargs and invoke as a single node.
18:34
timotimo brrt: afair our regex parsing code would end up not getting jitted at all because it'd invoke so many times, right? 18:37
brrt ehm... i'm not sure i parse that correctly, but if it is called many times then i expect it to be jitted (eventually) 18:39
timotimo i meant the other way around :)
jnthn was confused too :)
timotimo regexes use invocations a bunch of times, in my recollection
jnthn I'm confused which bit was meant to be the other way around :P
timotimo but also there's a whole bunch of opcodes you probably didn't even look at yet, like "iscclass" and "findcclass" and the uniprop codes 18:40
though these could all be handled with C function calls i believe
brrt well, right
jnthn I think that regexes won't be getting JITted yet 'cus of...yes, all those.
brrt there is still plenty to do
timotimo if you give me a short template i could copypaste and tell me how to build and test my changes, maybe i can help with that at some point ... 18:41
brrt hmmm 18:42
that is a really good idea
timotimo if you write that as a guide rather than as a conversation with me, it'd benefit more people and my laziness wouldn't be so terrible :) 18:43
brrt that is an even better idea
timotimo going to commute around a bit now
brrt see you 18:44
dalek arVM/moar-jit: a36616c | (Bart Wiegmans)++ | / (6 files):
Add fast invoke flag to JIT invoke node
18:51
19:00 btyler_ joined
brrt ok, invoke seems to work 19:14
jnthn \o/ 19:15
brrt++
FROGGS O.o
\o/
rurban brrt++
dalek arVM/moar-jit: b672fa1 | (Bart Wiegmans)++ | src/jit/emit_ (3 files):
Add support for 'proper' invoke calls
19:16
brrt please try it out :-) (and let me know if i'm wrong)
anyway, i'm off for tonight :-) 19:17
19:17 brrt left
dalek arVM: bc4bb42 | jnthn++ | src/spesh/facts. (2 files):
Cope with cross-deopt-point usage analysis.

If a register gets used after a deopt point, give its usage an extra bump. This means we won't kill a write to it when doing dead code elimination. Even if we don't actually read it later in the optimized code, we still need things set up right for if we deopt. This extra care will allow us to be a little more aggresive in decrementing usage in various other situations.
19:23
jnthn walk; bbiab 19:33
moritz jnthn: it seems like you're having great fun hacking on moarvm 19:36
FROGGS moritz: at least he can show his skills :o) 19:37
timotimo suh-weet! 19:48
hoelzro hup holland hup 20:20
jnthn Don't think this'll be another 7-1 :) 20:23
moritz: Yes, it's fun, though certain categories of bug are quite a pain to hunt.
hoelzro jnthn: I hope not 20:24
nwc10 All tests successful. 20:29
Files=903, Tests=31840, 566 wallclock secs (16.60 usr 4.54 sys + 10375.63 cusr 510.58 csys = 10907.35 CPU)
Result: PASS
jnthn: ^^^
(that's master/master/nom, back to the usual fixed sized allocator)
haven't had PASS in ages 20:30
jnthn++
jnthn nice :)
nwc10 "We have normality. I repeat, we have normality. Anything you still can't cope with is therefore your own problem."
jnthn Time to write more optimizations :P 20:31
nwc10 :-
)
20:35 teodozjan joined
FROGGS *g* 20:40
jnthn I'm not kidding, I'm working on two of them :P 20:44
FROGGS meh 20:45
:P
jnthn I think I mighta finally got lex2loc branch clean... 20:46
FROGGS ohh, I guess that feels good :o)
I am hacking on v5 to gain some motivation
20:51 itz__ joined
itz__ does bdw use irc? 20:54
jnthn Yes, he's brrt here
Though gone for the day, probably watching the foottie... :) 20:55
itz__ ah :)
20:55 brrt joined
brrt itz__: o/ 20:55
and yes, was watching, but its' commercial break 20:56
itz__ brrt: pull request to fix a simple typo .. two chars wrong way around
FROGGS here: github.com/MoarVM/MoarVM/pull/112
brrt oh, thanks for that 20:57
jnthn Nice to know folks are following the commits :)
brrt i'll pull it
dalek arVM/moar-jit: 22678c6 | (Steve Mynott)++ | src/jit/stub.c:
fix typo
arVM/moar-jit: ca998ba | (Bart Wiegmans)++ | src/jit/stub.c:
Merge pull request #112 from stmuk/moar-jit

fix typo
itz__ ty
brrt no, thank you :-)
also, if you want to try the actual jit compiler, you should configure with --enable-jit :-) 20:59
itz__ ah :) 21:01
21:02 teodozjan joined
brrt (soccer again :-)) 21:05
21:55 brrt left 22:32 jnap joined 22:53 dalek joined
dalek arVM/set-removal: 61ce13a | jnthn++ | src/spesh/optimize.c:
First pass at removing unrequried set ops.

This makes it all the way through the NQP build and test suite, all the way through the Rakudo build...then somehow manages to cause a bunch of Rakudo sanity tests to fail.
23:13
japhb wonders how something can cleanly build the setting and fail large portions of sanity .... 23:15
jnthn I really have no idea! 23:18
And it's 1:20am so I'm not planning to find out right now :)
japhb Heh
Sleep well. :-) 23:19