00:00 TimToady left 00:20 TimToady joined 00:53 Kaiepi joined 02:48 lizmat left 03:10 Kaiepi left 03:11 Kaiepi joined 03:18 lizmat joined 03:23 lizmat left 04:35 AlexDaniel left 05:36 AlexDaniel joined 05:57 Kaiepi left, Kaypie joined 06:04 domidumont joined 06:08 domidumont left 06:09 domidumont joined 06:37 Merfont joined 06:39 Kaypie left 07:07 robertle joined 07:24 lizmat joined 07:51 Redfoxmoon left, Redfoxmoon joined, Redfoxmoon is now known as niom, niom is now known as Redfoxmoon 08:01 Merfont left 08:03 Kaiepi joined 08:21 zakharyas joined 08:28 zakharyas1 joined 08:30 zakharyas left 08:33 zakharyas1 left, zakharyas joined 08:39 brrt joined 08:44 AlexDaniel left
brrt good * 09:02
jnthn o/ 09:32
brrt jnthn: i wanted to know what you think regarding the whole type punning / strict aliasing thing; the context is that I want to union {} the 'node info' array with the 'tree nodes and references' array, since that saves me from having to manually keep them in sync every time the array is changed, which is often in the expression optimizer 09:45
my solution was either to have a union of structs, or simply an array-of-unions
the point is, since that is apparently all problematic under strict aliasing, i'm not sure whether or not to go ahead with it 09:46
jnthn Hm, I thought unions where part of the correct way to deal with such things? 09:51
brrt it is a vague matter 10:06
i thought that as well, but apparently only memcpy is legal
10:18 brrt left 10:50 AlexDaniel joined 10:57 brrt joined 11:11 zakharyas left
Geth MoarVM/pluggable-spesh: 6a022aa1ca | (Jonathan Worthington)++ | 3 files
Set facts on spesh plugin resolvee
11:14
brrt oh, now that you're probably online anyay, any thoughts on moving the p6 'extension ops' out of rakudo and into moarvm? 11:19
i assume that's orthogonal to your work in pluggable-spesh
11:25 Kaiepi left 11:26 lizmat left 11:40 AlexDaniel left
jnthn brrt: Actually, it's very related, because many of the extension ops relate to assignment, and I'm going to completely redo Scalar and assignment in terms of spesh plugins next week :) 12:16
And then I expect a lot of the C code will go away :)
brrt <3 12:18
jnthn Not all of it of course, but some :)
I'd rather consider the extops one by one and figure out what best to do with them
brrt okay. then my simple plan of copy-psting them in the moarvm source tree is redundant 12:19
thing is, i'm no longer seeing the point of having them separately maintained
and having them embedded in the interpreter makes things like a 'fakexecutable' for perl6 somewhat simpler 12:20
jnthn Yeah, agree
brrt but i'll happily await your redo of Scalar 12:21
:-)
plenty to do in the JIT, anyway; one of these days i want to tackle some improvmeents on the register allocator 12:22
jnthn btw, dunno if you saw the last commit I did in the Rakudo repo, but just wrote the first real spesh plugin and it gets us 6.6x faster private method calls inside of roles :) 12:23
brrt did not see, no 12:24
oh, i see 12:32
cool
12:36 zakharyas joined 12:53 AlexDaniel joined
jnthn Currently working on one for $foo.Bar::baz 13:08
Hm, blows up in the JIT, for an issue I thought I'd already fixed. 13:10
But with MVM_JIT_DISABLE=1 it's 13.3s -> 2.06s 13:11
Ah :S 13:15
It's about inline 13:16
I get I'm in trouble for taking a single deopt annotation and re-using it over a set of guards
*I but
hah, *I bet :) 13:18
Uff, yes. 13:23
13:25 AlexDani` joined 13:27 AlexDaniel left
jnthn Cool, after that fix it's 1.07s with the JIT :) 13:43
timotimo wowza, that's a nice improvement 13:49
Geth MoarVM/pluggable-spesh: c1d3f6e09a | (Jonathan Worthington)++ | 3 files
Only use a deopt table index once in the graph

Re-using them makes for great amounts of confusion when we take some specialized code for inlining and reconstruct the deopt annotations. If two annotations in the original graph shared a position in the table, then we cannot reconstruct both. The result would be a JIT oops if we inlined the specialization of a speshresolve that introduced more than one guard.
jnthn Yeah, I thought that was relatively rarely used 13:50
Then discovered there's 66 instances of it in CORE.setting
ah, some spectest fail to look at though :( 13:51
oh, duh
yes, good, it was just a silly thinko 13:54
I guess I can do this trick for .? too 14:15
brrt I thank my lucky stars that the JIT is sometimes codes sufficiently defensively 14:29
not always unfortunately
also, jnthn++
jnthn Yeah, some win on the .? case too 14:36
Looks like 1.5x - 2.5x though I used rand in the benchmark which is costs something 14:37
So the actual win on the .? itself will be more than that
It's 1.5x faster in a case that's 50/50 different objects, and 2.5x in a case that's 999/1 different objects 14:38
('cus in the latter case it's in the sufficiently monomorphic category) 14:39
brrt :-D 14:42
oh, can i subtly point you to MVM_VECTOR(...) - you're free and welcome to keep on writing your own vector management routines, but I find them to be worth the inconvenience of a free() at the end
which is especially easy to deal with for a spesh graph 14:43
jnthn Yeah, should probably switch a few things over to that
timotimo :D 14:50
i should be using that more often, indeed
i wonder if compiling guard tables will give another juicy win here 14:52
btw, have we ever considered jitting nfas? or are they not costly enough at the moment after the last improvement? 14:55
jnthn Well, in the monomorphic case we don't look at the guard table at all 14:57
timotimo right
i was refering to one of the last sentences in the commit message 14:58
jnthn Did occur to me that we can consider compiling them in the other case
Dunno how much of a win it'd be
timotimo the guard table is already rather compact in memory, i believe 14:59
jnthn Yeah
To really get a win we'd need to do more sophisticated splitting, I suspect
(e.g. explode the dependent code so we can inline the two options, for example) 15:00
timotimo mhm
jnthn brrt: Can something of the form `x = some_integer ? y : z` compile into something nice when we know x and y are simple constants, not expressions (e.g. some kind of conditional move)? 15:08
oops, when we know y and z
15:09 brrt left 15:11 domidumont left
Geth MoarVM/pluggable-spesh: bf60f5feff | (Jonathan Worthington)++ | src/spesh/plugin.c
Allow recursive use of nqp::speshresolve

Would be quite unusual, but could happen in meta-programming.
15:42
15:45 zakharyas left
Geth MoarVM/pluggable-spesh: 7ea08c9a35 | (Jonathan Worthington)++ | src/spesh/plugin.c
Fix a memory leak
15:46
jnthn Alright, I think I can merge this thing :) 15:47
15:47 Kaiepi joined
timotimo ooooooh 15:47
jnthn I've still got the attribute case to go, but no reason not to have this in already
Geth MoarVM/master: 27 commits pushed by (Jonathan Worthington)++
review: github.com/MoarVM/MoarVM/compare/c...a08c9a352c
15:48
timotimo and at some point scalars
jnthn The Scalars need that bit
I meant "of things directly relating to the plugin mechanism" though :)
timotimo i'm not entirely sure how scalars will be changed; we'll resolve a FETCH or STORE if we need to, and otherwise inline a super simple attribute assignment/access? 15:49
jnthn See gist.github.com/jnthn/e51a06c6882f...0a3dd373e6 for my notes on it
timotimo ah, i forgot about half the stuff already :D 15:50
jnthn (near the bottom)
16:03 lizmat joined 16:13 robertle left 16:16 Kaiepi left 16:56 brrt joined
brrt jnthn: yes, we can, but it is not necessarily an obvious win 16:58
well, hmm, now that i think of it, i can think of a cute way to compile that 16:59
you'd have to do a mov r1, const1; mov r2, const2; test condition; cmovz r1, r2; (or something like that) 17:02
i recall there being arguments that this wasn't ideal though
although it is shorter in code
17:29 domidumont joined 17:48 robertle joined 17:49 robertle left 18:04 brrt left 18:17 Kaiepi joined 18:20 lizmat left
japhb Noticed as I was browsing the merge -- github.com/MoarVM/MoarVM/commit/0e...162aa6ae7b does the opposite of what its commit message says. Accidental revert? 18:57
19:00 domidumont left 19:06 AlexDani` is now known as AlexDaniel
jnthn japhb: No, the commit is correct, then the commit message is wrong 19:12
d'oh
japhb Ah, gotcha. 19:19
19:48 Kaiepi left, Kaiepi joined
timotimo the moarvm fuzzing work has found its last unique crash 2 days, 15 hours ago 20:56
i wonder when i should terminate it
MasterDuke ah ha, that's another thing that should be automated! 20:57
timotimo hack.p6c.org/~timo/moar-fuzzing-stuff.tar.xz - 561ca412d9e53c7b09871e3a6eb825c8ae40a92ca3a7fbcf233528d442bd5938
MasterDuke and code coverage reports 20:58
i have so many good idea
timotimo it's just below 500 kilobytes big, but extracts to about 320 megs
MasterDuke timotimo: you know where the bug is?
timotimo what bug?
MasterDuke whatever causes the crash? 20:59
timotimo what's "the crash"?
i'm confused %)
you mean the crashes that the fuzzer has found? 21:00
MasterDuke yeah 21:02
timotimo well, it claims to have found 868 unique kinds of crashes
i have not looked into more than three or four
MasterDuke ah
timotimo the tar.xz has the .moar files that cause the crashes 21:03
more (or less) interesting is the nqp fuzzing, i.e. the fuzzer generates random nqp source code and tries to crash nqp/moar with it 21:06
it claims to have found 107 unique crashes, but none that i tried did anything at all
the inputs look interesting, like ... 21:07
00000000: 6865 636b 205d 0d2b 1022 0d0d 0d0d 2321 heck ].+."....#!
00000010: 2063 7170 1063 6b74 1022 6f5f 0a3c 2063 cqp.ckt."o_.< c
00000020: 68cd 9f0e 512d 72cd 9fcd 9263 0ec5 92cc h...Q-r....c....
00000030: 9f6f cd92 63cd 9220 004b 6b68 626e 41cd .o..c.. .KkhbnA.
that makes me think it's not being very successful in ifguring out what things do
huh, one of the files had an MVM environment variable name in it... how did that get there? perhaps i had the launcher script in there, too 21:09
21:12 AlexDaniel left 21:13 AlexDaniel joined
timotimo i'll go ahead and minimize the test files a little 21:13
MasterDuke hm. so it claims to have nqp code that crashes moar, but you can't repro? 21:14
timotimo even though it could very well be impossible to change the input file size because it might verify that it's long enough to have all its sections?
anyway, minimizing the files will still make the files better compressible 21:16
it'll take three quarters of forever 21:18
you want to have a look at the files that it believes makes nqp crash?
MasterDuke sure 21:21
timotimo hack.p6c.org/~timo/nqp_crashes.tar.xz - 5993e3e20787db6fb5dac5d53dd713f5f9c8b3d4c237a6fbfdc950de7a8dcb99 21:23
MasterDuke just run the scripts in nqp_input_raw? 21:27
timotimo cd into nqp_input_raw and run the files in ../findings/crashes/
MasterDuke why cd to nqp_input_raw? 21:35
timotimo because that's where the code was run from
if any of the files try to access any other files from ./, it'll have to be from there 21:36
MasterDuke no crashes for me 21:38
timotimo thought so :(
the moar files should crash so much more reliably
afl-tmin is fun. it replaces every character in the file that doesn't matter with an ascii 0 21:40
github's org-mode renderer doesn't understand = 21:44
"Macro parameters are prefixed by =,= (e.g. =,obj=),"
samcv so how do you see what ops were not jit'd timotimo 21:54
21:58 lizmat joined
jnthn samcv: iirc, MVM_JIT_LOG=somefile in the environment, then grep BAIL somefile 22:02
Geth MoarVM: jstuder-gh++ created pull request #872:
Define SIGBREAK on WIN32
22:13
MoarVM: cfbfdc130a | (Jeremy Studer)++ | src/io/signals.c
Define SIGBREAK on WIN32

SIGBREAK is another signal emulated by libuv on Windows, but is not defined in the platform's signal.h file. Using the same signum provided to it in NodeJS's os.constants.signals object.
22:41
MoarVM: 3d51256c1c | (Jonathan Worthington)++ (committed using GitHub Web editor) | src/io/signals.c
Merge pull request #872 from jstuder-gh/new_sig_sigbreak

Define SIGBREAK on WIN32
timotimo releasable6: status 22:47
releasable6 timotimo, Next release in ≈7 days and ≈20 hours. 4 blockers. 0 out of 60 commits logged
timotimo, Details: gist.github.com/e6c859b62fe5b01671...30cd3ae950
22:50 Kaiepi left 23:21 AlexDaniel left 23:22 AlexDaniel joined
timotimo test case minimization has reached id:000017 23:42