00:03 Geth joined 00:19 stmuk joined 01:07 Voldenet joined 01:13 stmuk_ joined 01:49 ilbot3 joined 03:16 eater joined
MasterDuke_ m: my $a = "a" x 2**30; 03:28
camelia ( no output )
MasterDuke_ m: my $a = "a" x 2**31;
camelia repeat count > 1073741824 arbitrarily unsupported...
in block <unit> at <tmp> line 1
MasterDuke_ m: my $a = "a" x 2**30; my $b = $a x 2**30 03:29
camelia Can't repeat string, required number of graphemes 1152921504606846976 > max allowed of 4294967295
in block <unit> at <tmp> line 1
MasterDuke_ given that we now have the error about required greater than max, couldn't we remove the arbitrary limit on x?
05:30 cantstanya joined 05:41 brrt joined
brrt good *, #moarvm 05:42
05:44 nwc10 joined
samcv good * 05:56
brrt ohai samcv 05:59
how are you this morning
samcv well 06:00
brrt wait, it's not at all morning for you 06:08
did you get to see my blog post?
07:15 brrt joined
samcv i have not yet 07:49
looking in a sec
i'm working on a SPDX -license identifier parser using grammars 07:53
07:53 brrt joined
samcv finally passing more than a few of my tests. finally :) 07:54
brrt \o/ 07:55
hmm, sp_p6obind_o does work if i remove the redundant let: 07:56
that's odd
samcv sp == spesh?
brrt yes 07:59
it's an instruction that is inserted by spesh if it can prove the layout of an object
so that we don't have to do dynamic dispatch
samcv oo 08:02
brrt it requires a write barrier, which makes it relatively complex 08:06
so it's a good test for the JIT
yesterday i had one implementation that consistently blew up in a weird way
now i've changed that in what should be an equivalent way, and now it doesn't blow up anymore
samcv so there's something that you aren't seeing i guess is the point right 08:12
reading your post now :-) 08:13
.tell brrt very cool post 08:23
yoleaux samcv: I'll pass your message to brrt.
08:30 brrt joined 08:47 Ven joined 09:22 Ven joined 09:26 Ven_ joined 10:19 Ven joined 10:31 brrt joined 10:32 brrt1 joined
jnthn brrt1: Great post! One typo: "That is very inconvenience" 10:56
brrt1 oh, thanks, i'll fix it :-) 10:57
11:01 brrt joined
brrt fixed :-) 11:10
yoleaux 08:23Z <samcv> brrt: very cool post
brrt thx samcv
11:15 Ven_ joined 11:34 Ven joined 11:41 AlexDaniel joined 11:47 brrt joined 12:40 zakharyas joined
brrt oh wow, all sorts of stuff goes wrong with the compilation of sp_p6bind_o 12:47
that's interesting... 12:48
timotimo i only saw sp_p6oget_o in the blog post, though :P 12:51
brrt yeah, i was experimenting with sp_p6obind yesterday afternoon 12:52
timotimo mhm 12:53
brrt it currently has this redundant let expression. with the let expression, it breaks grandly. without it, it works
(it's redundant because there is just a single ref)
i'm wondering what the 'working' version looks like, though 12:55
timotimo good thing we have a whole bunch of different debug outputs at our disposal :P 12:56
i was chasing a bug that 100% stumped me the day before yesterday, and i felt that gdb in moarvm still needs much improved :|
brrt always room for improvement 13:00
timotimo right
13:07 zakharyas joined
nine Is there a way to initiate dumping a heap snapshot from within MoarVM so I could use the heap analyzer to find out where an object is referenced from? 13:20
In a place where we'd otherwise just throw an exception
timotimo the heap snapshot tool depends on a piece of perl6 code to run :\
14:29 TimToady joined 14:41 ggoebel joined
jnthn nine: It takes a snapshot each time a GC happens, so just trigger GC 14:54
(nqp::force_gc or so)
Uh, or if you're inside of MoarVM then just call MVM_gc_enter_from_allocator(tc) or so 14:55
MasterDuke_ jnthn: what do you think about removing the arbitrary limit on string repeats since we now check that the resulting string wouldn't be too long anyway? 14:57
jnthn MasterDuke_: Well, we need to make sure that the repetition count in the strand will work out also 14:58
MasterDuke_ is that what `STRAND_CHECK(tc, result);` does? 15:00
jnthn No, there's a field that holds the repeat count
Which I think is a 32-bit value 15:01
MasterDuke_ ah. `result->body.storage.strands[0].repetitions = count - 1;` this need to be correct?
jnthn Yes
So we need a bound check 15:02
MasterDuke_ `MVMuint32 repetitions;` in struct MVMStringStrand
jnthn Right, so is the range check we're doing for soemthing smaller than we can fit in there? 15:03
We need one, but if it's for a smaller value then there's little need for that.
nine jnthn: I guess moarvm only writes the heap profile file in an orderly exit?
MasterDuke_ `repeat count > 1073741824 arbitrarily unsupported...`
jnthn: repetitions and num_graphs are both MVMuint32, so we should be good 15:05
jnthn nine: Yeah, well, actually it forms a string that is then written back in NQP land
m: say 1 +< 32 15:06
camelia 4294967296
timotimo oh, really? i was convinced we were assembling the data in nqp land from an array or something
jnthn Hmm
timotimo well, convinced is a bit much
jnthn Most of the concat is done in C land at least
MasterDuke_ m: my $a = "a" x 2**31; 15:07
camelia repeat count > 1073741824 arbitrarily unsupported...
in block <unit> at <tmp> line 1
MasterDuke_ m: my $a = "a" x 2**30; my $b = $a x 2**30
camelia Can't repeat string, required number of graphemes 1152921504606846976 > max allowed of 4294967295
in block <unit> at <tmp> line 1
15:07 brrt joined
timotimo jnthn is right 15:07
jnthn So it shouldn't be too much code to write a C function that dumps it out 15:08
MasterDuke_ jnthn: i'll create a PR to increase that repeat count limit, but feel free to reject 15:11
nine I tried just catching the exception, but still don't get a profile written. 15:15
15:17 domidumont joined
brrt i wonder if it's time to start writing the optimizer 15:20
jnthn brrt: For the JIT? :)
brrt yes
timotimo yes! always optimize! :D
brrt hehe 15:21
jnthn Maybe would be better to aim for merging it/enabling it by default first? :)
timotimo yeah, probably
brrt yeah, probably
i'm missing the stuff in arglist, it seems
jnthn I mean, the better quality code should already get us some speedups?
brrt well, some of the code is decidedly worse
okay, i've discovered what is wrong about the codegen, but not why 15:23
(of sp_p6obind_o)
timotimo how much worse?
do you have some examples? :) 15:24
brrt ehm, sure 15:26
timotimo also: good post 15:27
brrt ty 15:29
gist.github.com/bdw/1f5a6c07e8db33...d8c9fa329d 15:32
the reason is that the tiling doesn't pick the 'optimal' choice, whihc is a cost issue i think
timotimo now you're comparing exprjit vs hand-written, i thought we were going to compare template jit vs expr jit 15:34
brrt well, the template jit is hand-written code 15:36
for segments like these (write barrier)
and that is its strength
timotimo ah 15:45
brrt i've found my bug 15:46
i don't run special-tile code for stuff after the last live range start 15:47
timotimo that'll cause p6obind_o to work better?
brrt i hope 15:50
[Coke] so, not knowing where this project is, status wise - how close are we to a new jit? 15:52
brrt hmm, i want to expand with a very complete answer 15:54
the short answer is 'pretty close, but i don't know a good timeframe, since i'm time-limited' 15:55
the complete answer includes: note that the new jit is actually embedded in the old one
and relies - for so long as that is reasonable - on the old jit to handle some particularly nasty stuff (e.g. exceptions) 15:56
that can be done by the expr jit eventually as well, but i'm in no hurry
[Coke] OK. are you at a point where having more hands would be helpful?
brrt almost 15:59
i'm nailing down the final pieces of mechanism
Geth MoarVM/even-moar-jit: e1529f462c | (Bart Wiegmans)++ | src/jit/linear_scan.c
Make sure we run 'special tile' code after last live range

If we don't, we can miss ARGLIST argument setup and other essentials. This would break a write-barrier case in sp_p6obind_o.
[Coke] sweet. well, let us know. thanks for keeping at it. 16:01
16:33 Ven joined, nebuchad` joined
Geth MoarVM/even-moar-jit: 7a631fb7f2 | (Bart Wiegmans)++ | 2 files
Take requirement handling out of loop

So that we don't have to duplicate it, just the call. Also, enable sp_p6obind_o, and watch it not burn.
MoarVM/even-moar-jit: 2593e26ad3 | (Bart Wiegmans)++ | src/jit/core.expr
Remove 'let' in sp_p6obind_o

Not necessary to have it, so let's get rid of it, it'll make the generated code simpler.
16:42 ilmari joined 16:59 zakharyas joined 18:42 ggoebel joined 18:48 zakharyas joined 19:49 ggoebel joined 19:57 Ven joined 20:18 Zoffix joined 20:20 Ven_ joined 20:37 geekosaur joined 21:15 geekosaur joined