01:31 MasterDuke joined
MasterDuke missing template counts for building core.settings and running test-t gist.github.com/MasterDuke17/4a6b3...a4ed2c1370 01:39
what does it mean where there are 'null' or 'PHI' in the 'Build tree out of: [ ... ]' list? 01:43
timotimo PHI are actually no-ops, null is an op that nulls out a register 01:48
MasterDuke: we used to go through all registers that hold object values and null them out when entering a frame, but that was wasteful, now we emit a whole bunch of null instructions in spesh and let spesh remove useless nulls 01:49
MasterDuke hm. so what would be a useful metric? total length (number of elements in the list)? length - # of PHI/null? 01:51
timotimo yeah maybe, but phis are always at the beginning so they would always be in the expr jit part 01:53
MasterDuke uniq lists and their count, like for the individual missing templates? 01:54
gist updated 01:57
timotimo i think we should remove the PHI from being logged %) 02:05
MasterDuke it does distract a bit 02:08
timotimo lastexpayload should be very easy to do 02:10
isconcrete, too, if bitwise arithmetic is easy in the exprjit
prepargs is by its nature always followed by a bunch of arg_* ops and then some kind of invoke_* 02:11
or fastinvoke or something
that'll probably require a bunch more thought
i would have said "unless_o is easy since we already have if_o", but we don't have either of those 02:12
MasterDuke the interp.c implementation isn't that bad 02:13
but there a bit of a scary comment in the jit/graph.c implementation
timotimo which one do you mean?
i imagine not_i could be worth quite a bit 02:15
MasterDuke github.com/MoarVM/MoarVM/blob/mast...1695-L1733
timotimo huh, interesting 02:16
the good news is that we can express the "first do an istrue_o, then do the branching" in just a big expression tree 02:22
and we can probably just ask the exprjit for a local variable to store the result in as well 02:23
MasterDuke huh, we only have an istrue_s 02:25
timotimo oh the op is probably bool_o
no we have istrue and isfalse without _* 02:26
MasterDuke ah
02:58 ilbot3 joined 06:15 psch joined
nine timotimo: local variables are just like (let: (($val (load (add (^p6obody $1) $2) ptr_sz))). takedispatcher is an example for multiple variables 07:11
This is where the expr jit really shines compared to the lego jit
07:41 brrt joined
brrt good * #moarvm 07:44
07:51 domidumont joined
nine good brrt #moarvm! 07:52
brrt good nine! 07:53
are you coming to FOSDEM this year?
nine yeah!
you, too? 07:54
08:07 domidumont joined
nwc10 if NQP goes "boom" with "Expected native int argument, but got num" does that mean that it's still a *good* morning? 08:11
at gen/moar/stage1/QRegex.nqp:1624 (gen/moar/stage1/QRegex.moarvm:!cursor_pass)
...
psch at least it is a clear-ish error message; NQP does have a few less comprehensible ones :)
08:36 zakharyas joined 10:14 zakharyas joined
brrt i'm planning 10:15
10:56 zakharyas joined 10:59 AlexDaniel joined
jnthn About object alignment: the best way to do it would be to round up sizes at the point we calculate them 11:03
yoleaux 09:49Z <Zoffix> jnthn: Would you review this commit in a branch I made? github.com/rakudo/rakudo/commit/77fb61a719 It looks a bit nutty, especially the whole block-per-».-site thing and the perf boost isn't amazing. I think we can get the same benefits by improving slurpy dispatch caching instead.
jnthn Then the allocator doesn't have to be burdened with any extra checks 11:05
11:26 zakharyas joined 11:56 zakharyas joined 11:58 coverable6 joined, nativecallable6 joined, unicodable6 joined 12:01 reportable6 joined
wictory[m] jnthn: you are probably right ... the size argument to `MVM_gc_allocate_nursery()` comes either from a `sizeof()` (which can assume is aligned, and this can be checked using static analysis), or from `st->size`, where `st` is a `MVMSTable`. The `st->size` seems to mostly come from `sizeof()`s, except for two places in `src/6model/reprs/P6opaque.c`. I'm not sure, but could there be some more places that are not directly 12:02
visible from the code? It would be nice if some MVMSTable genius could verify this :)
Here is the places I found where `st->size` is set to something else than a `sizeof()` github.com/MoarVM/MoarVM/blob/e813...que.c#L876 github.com/MoarVM/MoarVM/blob/e813...que.c#L917 12:03
There are even some comments about that sizes should be aligned in `src/6model/reprs/P6opaque.c` 12:06
12:15 AlexDani` joined
MasterDuke brrt: any thoughts on github.com/MoarVM/MoarVM/pull/787 ? 12:17
brrt i'm checking 12:39
oh yeah, i had some thoughts about that
i'll post them 12:44
MasterDuke cool, thanks 12:50
brrt: and while you're here, what am i doing wrong here: `(template: isconcrete (if (and (nz $1) (^is_conc_obj $1)) (const 1 int_sz) (const 0 int_sz)))` ? 13:01
brrt ehm. good question
13:01 reportable6 joined
brrt you may stumble on a JIT bug :-P 13:01
MasterDuke error: Expected flag but got reg in template (if (and (nz $1) (zr (and (load (addr $1 (&offsetof MVMObject header.flags)) (&SIZEOF_MEMBER MVMObject header.flags)) (const (&QUOTE MVM_CF_TYPE_OBJECT) (&SIZEOF_MEMBER MVMObject header.flags))))) (const 1 int_sz) (const 0 int_sz)) child 0 13:02
brrt ehm.
maybe a JIT compiler bug
lemmetry
oh, i see 13:03
(and) is binary AND
like 1 & 2
what you're looking for is ALL
MasterDuke aahh 13:04
brrt which is boolean-shortcircuiting AND generalized
MasterDuke now it compiles 13:07
brrt :-)
otherwise it looks good
MasterDuke++ :-)
13:40 lizmat joined 14:10 zakharyas joined 14:45 brrt joined 15:00 MasterDuke joined 15:31 zakharyas joined 15:50 zakharyas joined 16:05 brrt joined 16:12 zakharyas joined
MasterDuke brrt: looks like cast isn't implemented? 16:35
brrt what kind of cast are you doing?
you rarely need to CAST by hand 16:36
timotimo maybe int ⋄ num?
MasterDuke for coerce_ni
moritz if you don't break your hand, you don't need a cast for it :-)
MasterDuke GET_REG(cur_op, 0).i64 = (MVMint64)GET_REG(cur_op, 2).n64;
timotimo aha! :)
MasterDuke timotimo++ 16:37
timotimo i like compose+<+> giving me ⋄ it's a pretty glyph 16:38
brrt oh, no, that's not a thing yet 16:45
because numeric registers are not a thing yet
16:52 zakharyas joined
MasterDuke ok, i'll leave those be for now 16:57
17:00 zakharyas1 joined
brrt :-) 17:02
17:44 reportable6 joined 17:46 reportable6 joined 17:47 reportable6 joined 17:48 reportable6 joined 18:52 reportable6 joined 19:23 MasterDuke joined
lizmat and another Perl 6 Weekly hits the Net: p6weekly.wordpress.com/2018/01/29/...s-modules/ 19:24
20:24 quotable6 joined
MasterDuke can there be string literals in templates? 20:28
20:42 coverable6 joined 20:50 coverable6 joined, bart__ joined
brrt MasterDuke: yes, but 20:51
let me think about how that worked 20:52
(i recently added support for string literals in the parser)
escaping-\" doesn't work
MasterDuke but if i don't need any "s in the string, (carg ="something here" ptr) should work? 20:54
or should that be str at the end? 20:55
or, is there any "built in" support for MVM_exception_throw_adhoc? 20:57
21:07 nativecallable6 joined
brrt no, i was working on that at some point 21:08
the interesting thing is that throw_adhoc and friends never return 21:09
21:09 nativecallable6 joined
brrt so we can be more clever around storing values to memory 21:09
21:10 Kaiepi joined
MasterDuke btw, think this looks reasonable? gist.github.com/MasterDuke17/ba861...8a43b3b534 21:11
it's not quite right though, "node is too short" 21:14
something about the dov/ifv 21:21
brrt IFV takes two branches. i think you want WHEN
MasterDuke heh, just noticing that now 21:22
now, Node (carg = "Cannot look up attributes in a %s type object" = str) is too short 21:23
brrt yeah, not sure, but i don't think that needs a = sign at all 21:24
and.. you can't put it like that literally, has to be wrapped with const_ptr
MasterDuke k 21:25
what is the =" "= form for?
brrt that's not something that i think actually works 21:31
is that in the templates now?
21:32 domidumont joined
brrt something like (const_ptr "foo bar") 21:32
MasterDuke no, just mentioned in github.com/MoarVM/MoarVM/blob/mast...org#syntax
brrt oh, that's an artifact of rendering 21:41
MasterDuke brrt: fyi, got the template compiling (and it seems to work), but there were some warnings
brrt the = should make it appear monospace 21:42
MasterDuke gist.github.com/MasterDuke17/ba861...8a43b3b534
ah!
brrt yeah, you should use const_ptr there
MasterDuke also in the same section: Macro parameters are prefixed by =,= (e.g. =,obj=), and they are replaced with whatever symbol or list is ‘bound’ to them when the macro is invoked. 21:43
`(carg (const_ptr (&QUOTE "Cannot look up attributes in a %s type object") ptr_sz) ptr)` ? 21:44
that causes: Use of uninitialized value in lc at tools/expr-template-compiler.pl line 114, <STDIN> line 514. 21:45
brrt that's probably something wrong yes 21:46
anyway, i have to go now
MasterDuke later. thanks for the help 21:48
22:12 reportable6 joined 23:44 Voldenet_ joined 23:48 yoleaux joined, evalable6 joined, quotable6 joined, coverable6 joined