00:02 moritz_ joined, japhb_ joined, nwc10_ joined, hoelzro_ joined, ashleydev joined 00:03 BinGOs_ joined 00:06 BinGOs joined 00:45 avuserow joined 01:06 FROGGS_ joined
timotimo it seems like the optimize_can_op part of spesh no longer causes a problem (though i had to teach it about VMNull, too) 01:08
up to S17 for the spectests now 01:09
01:09 harrow joined
timotimo allof.t seems to be unhappy right now 01:10
nope. running it manually makes it pass, so it's only flappy 01:14
hm. 99problems-51-to-60.t segfaults in a gc run triggered by a MVM_exception_backtrace 01:15
not so good
i'll just commit and see if anybody who wakes up before i do wants to look at it :) 01:16
t/spec/integration/advent2013-day07.t fails one test, which seems to be because we changed parcels to be value types and their which now gives the same value for equivalent parcels 01:17
dalek arVM/optimize_can_op: a6d4e42 | (Timo Paulssen)++ | src/spesh/optimize.c:
reactivate optimize_can_op, teach it about VMNull.

currently makes t/spec/integration/99problems-51-to-60.t crash
01:24 harrow joined 06:02 mj41_nb joined
sergot hi o/ 06:25
06:58 zakharyas joined 07:32 odc joined 08:33 kjs_ joined 08:48 brrt joined 09:03 kjs_ joined 09:05 brrt left 09:37 daxim joined 09:42 donaldh joined
dalek arVM: c7bde5b | (Bart Wiegmans)++ | 3rdparty/dynasm:
Update dynasm (ignore minilua executable)
timotimo i wonder how we'd be able to fix something like "smart numify turns some object into a num, then we coerce the num into an int" when the smart numify itself was unboxing an int and coercing to a num ... 13:45
that sounds like a "peephole optimization" technique
13:48 FROGGS[mobile] joined 13:49 tadzik joined
jnthn Aye 13:49
And probably a rather useful one
timotimo i have not actually checked if this really does happen, mind you :) 13:55
jnthn It does. 13:57
timotimo OK 13:58
jnthn I'd be tempted to hack it into optimzie_smart_coerce
timotimo we could have a "want" mechanism for this case :P
jnthn But temptation isnt always a good thing... :)
timotimo as in "look forward in the instruction stream to see if the number we're building is going to be coerced to int soon"?
jnthn Yeah. I think it will always be next instruction, from what I know of code-gen. 14:00
So it's just a one instruction lookahead
timotimo mhm 14:01
what do you think of installing a "peephole optimization stage" right after spesh, btw? 14:02
jnthn Well, for this particular case it's easier with a lookaehad rather than Yet Another Pass 14:39
TimToady though C# seems to do fine with 50 passes or so 15:05
jnthn timotimo: Mini-project if it takes your fancy: work out why MATCH does not JIT, only speshes. 15:22
timotimo i suppose i could have a look :) 15:23
jnthn In the parse-json benchmark in NQP it's the hottest thing 15:24
timotimo i also considered stubbing the "this object has a destructor" thing in moarvm and nqp, but i ran into too many open questions 15:29
jnthn Yeah; that one is tricky. It's on my pondering list at the moment 15:30
timotimo especially: how do we handle DESTROY methods and subclasses?
jnthn It's a submethod, no?
timotimo i didn't look
if it is, that'd be simple
jnthn But you call from the kids up to granny, iirc 15:31
Opposite order from BILD submethod calls
timotimo that's not as simple any more :P
jnthn: i feel like we've already found this out once before; MATCH bails on bindattrs_i 15:45
timotimo looks into that some more 15:47
tadzik colomon: this looks like a good set of patches to me 15:48
timotimo it wants a is-type-object check to be emitted
tadzik oh, ww 15:49
timotimo (actually, it'll need a reprconv function for that anyway, as it also forces a write barrier apparently?)
15:51 odc joined
timotimo well, i can probably just re-use MVM_repr_bind_attr_inso for this ... curiously that one doesn't include the SC_WB ... it probably should, though 15:52
jnthn Yes, unless interp.c does it?
timotimo interp.c doesn't use MVM_repr_... 15:53
it directly uses the REPR(...)->...
now MATCH gets jitted 15:54
at least for the json benchmark
jnthn I don't see wy benchmark would make a diff :) 15:55
timotimo yup.
in the routines tab it gets an OSR flag and about 1/5 is spesh, the rest is JIT
(and probably an invisible amount is interp)
jnthn Ah, darn, its' midnight, I should be attempting to be unconcious... 15:58
timotimo interesting. !protoregex is not jitted at all, has 3520 calls from arraylist, but doesn't get jitted at all. can't find any bails in the jitlog, though
TimToady you've still got a minute
timotimo i'll do a rakudo build and spectest with the bindattrs implementation
jnthn timotimo: Is it inlined? 15:59
Oh no, it's normally things that call it that get inlined 16:00
Sinc ethe things that call it are just delegating to it.
Anyway, time to go rest... :) 16:01
lizmat gnight jnthn: sleep well, get better!
jnthn lizmat: Thanks, hopefully! :) 16:02
timotimo the second most time consuming piece of the json benchmark seems to be str, which isn't getting jitted because indexnat doesn't have a jit yet 16:24
after that comes ws, which bails on findnotcclass 16:25
dalek arVM: ede37df | (Timo Paulssen)++ | src/6model/reprconv.c:
MVM_repr_bind_attr_* needs to do a SC write barrier
arVM: fd94423 | (Timo Paulssen)++ | src/jit/graph.c:
can now jit bindattrs_*, which helps MATCH.
17:00 Ven_ joined 17:08 vendethiel joined 17:49 brrt joined 18:05 Ven_ joined
brrt uhm, why does MVM_string_char_at_in_string return -2 ? 18:42
right, out of bounds 18:43
is that ever used anywhere? 18:44
FROGGS brrt: yes, I remember that we made it -2 so we can check whether it was oob 18:48
brrt subtle
FROGGS brrt: look at interp.c:1455 18:51
brrt yeah, i've seen it
it's just that the magic needed to do that in ASM is quite subtle
two flappy tests on the spectests, i'll push
dalek arVM: 965b7af | (Bart Wiegmans)++ | src/jit/ (2 files):
Add indexnat to JIT
FROGGS typo "if it ise" 18:55
dalek arVM: 03626bd | (Bart Wiegmans)++ | src/jit/emit_x64.dasc:
Fix typo in comment
brrt FROGGS++
FROGGS <--- le awesome JIT hacker :P 18:57
brrt this should help timotimo's thingy 19:00
19:14 brrt left 19:33 Ven_ joined 19:39 Ven_ joined
timotimo cool, thanks! 20:13
indexnat is branchy, right?
i think that's what kept me from doing it in the past
findnotcclass and findcclass should be easily doable for me now
brrt++ # indexnat
oooh, indexat *and* indexnat 20:25
20:45 kjs_ joined
timotimo so what was the deal with argconst_s? i seem to recall those weren't supposed to show up any more? 20:57
with 10 frames bailed, it's pretty expensive for the json parsing benchmark 20:58
the core setting still has more than 100 bails caused by param_* op nonjittability 21:02
21:02 donaldh joined
dalek arVM: e2aa5a6 | (Timo Paulssen)++ | src/jit/graph.c:
JIT findcclass and findnotcclass
21:41 ggoebel1111112 joined 21:57 kjs_ joined 23:27 itz joined