github.com/moarvm/moarvm | IRC logs at colabti.org/irclogger/irclogger_logs/moarvm
Set by AlexDaniel on 12 June 2018.
timotimo ah 00:00
00:00 lizmat joined 00:01 p6bannerbot sets mode: +v lizmat 00:02 nativecallable6 joined, bisectable6 joined, benchable6 joined 00:03 p6bannerbot sets mode: +v nativecallable6, p6bannerbot sets mode: +v bisectable6, p6bannerbot sets mode: +v benchable6 00:05 lizmat left 00:20 avar left 00:24 avar joined, avar left, avar joined, p6bannerbot sets mode: +v avar 00:25 p6bannerbot sets mode: +v avar 01:04 yoleaux joined, p6bannerbot sets mode: +v yoleaux 01:10 thurin27 joined 01:11 p6bannerbot sets mode: +v thurin27 01:12 MarkAtwood7 joined 01:13 p6bannerbot sets mode: +v MarkAtwood7 01:14 MarkAtwood7 left 01:16 thurin27 left
timotimo imgur.com/CVEXRdT - shiny new "show allocations for all children" feature; it's like "inclusive allocations" except it gets the inclusive allocations for each child call and displays them in-line 01:28
(there's actually more; i forgot to include the routien itself in the "get inclusive allocations" so only children of each children were accounted for) 01:30
02:41 SporkWitch5 joined 02:42 p6bannerbot sets mode: +v SporkWitch5, SporkWitch5 left 04:22 tx2 joined 04:23 p6bannerbot sets mode: +v tx2 04:28 tx2 left 05:17 brrt joined 05:18 p6bannerbot sets mode: +v brrt 05:43 diakopter left 05:45 yoleaux left, yoleaux joined 05:46 p6bannerbot sets mode: +v yoleaux 06:18 robertle joined 06:19 p6bannerbot sets mode: +v robertle 06:26 Kaypie joined, Kaiepi left
brrt do we ever clean up the spesh graphs that we allocated during inlining? 06:27
06:27 p6bannerbot sets mode: +v Kaypie 06:34 AlexDaniel joined, onur14 joined, onur14 left 06:35 p6bannerbot sets mode: +v AlexDaniel 06:49 lizmat joined, p6bannerbot sets mode: +v lizmat 06:50 brrt left 07:01 holodoc6 joined 07:02 p6bannerbot sets mode: +v holodoc6 07:05 holodoc6 left 07:12 brrt joined 07:13 p6bannerbot sets mode: +v brrt 07:21 Kaypie left 07:33 Kaiepi joined 07:34 p6bannerbot sets mode: +v Kaiepi
brrt \o 07:37
I think we leak graphs allocated for inlines
which we normally don't notice, because we assign the inlines to the candidate, and we assign the candidate to the staticframe, and so we keep that alive 07:39
08:01 zakharyas joined, robertle left 08:02 p6bannerbot sets mode: +v zakharyas 08:08 brrt left 08:10 Kaiepi left 08:11 Kaiepi joined, p6bannerbot sets mode: +v Kaiepi 08:12 Kaiepi left 08:13 Kaiepi joined, p6bannerbot sets mode: +v Kaiepi 08:24 Kaypie joined, Kaiepi left 08:25 p6bannerbot sets mode: +v Kaypie 08:34 Kaypie left 08:35 Kaypie joined, p6bannerbot sets mode: +v Kaypie 08:44 Kaypie is now known as Kaiepi
jnthn brrt: We stash them away inside of the inline data strucutre in order to free them at the end of the specialization of the enclosing thing, as I remember it 09:21
09:40 brrt joined 09:41 p6bannerbot sets mode: +v brrt
brrt \o 09:41
jnthn hi brrt
brrt I think we're going to need reference counting on spesh graphs
jnthn ? 09:42
Why?
We never share them
brrt we take a reference to a spesh graph when inlining
jnthn Not really, we take ownership of it
We produce that graph precisely for the purpose of inlining
brrt hmmm
jnthn Because we then mutate it a load as part of the inline process 09:43
So it should just be freed when the graph it's incorporated into is being freed
brrt that would suggest we can clean it up during staticframe spesh gc free
jnthn We should actually be able to clean it up at the point spesh is done with it
brrt that leads to use-after-free issues pretty fast...
jnthn That is, as soon as it spits out the optimized bytecode and JITted output, it can go away 09:44
brrt i'd think so, yes
hmmm
jnthn If that isn't happening, that's a bug
brrt anyway, we don't currently clean them up, no
jnthn darn...for some reason my fix last night doesn't help the case it was meant to
09:45 robertle joined
brrt oh, i know why my fix doesn't work 09:45
I cleaned them up during spesh-graph-destroy
09:46 p6bannerbot sets mode: +v robertle
brrt however, in case of recursive inlining, the cleaned-up inline is going to point to inlines that are already freed 09:46
jnthn Ohh...I wonder how we JIT return... 09:48
aha
Having to update both the lego JIT and the expresssion JIT gets a tad tiresome :) 09:51
(And yes, I know, I should help write templates so we can expression JIT everything...)
brrt jnthn: agreed and noted... 09:52
maybe we should make it a goal to eliminate the lego jit 09:53
there's virtually nothing it actually does better
and.
jnthn *nod*
I figured that was the goal anyway, just that - like all things - it needs time, which is a limited resource.
brrt we can translate a bunch of the dynamic, untemplateable things, to expressions
lizmat is there a way that other people can help towards this goal ?
brrt well, a bunch of people have already been adding templates 09:54
lizmat so more power to them?
brrt definitely
there's a few things that we can't do in the expression JIT yet, notably SSE register selection
jnthn That's needed for floating point? 09:55
brrt yes
we barely use floating point, so it's not come up yet
there is a minor instruction encoding bug in dynasm for the upper 8 sse registers
jnthn Yeah, Hm, what's `dov`? 09:56
brrt do-void
jnthn oh...do void maybe? 09:57
:)
brrt we can have a better name there :-)
jnthn btw, what is it that blocks expr JIT of guards? (I know I've asked if they can be done, asking in case it's something I can do :))
brrt hmm... the only thing that i can think of, is that we might need to flush the locals table before compiling a guard 09:58
jnthn I see we have (^exit) as a template macro, which'd seem to be one part of it
brrt and i recall you asking if we could avoid that
jnthn ah...would ^exit not make that happen anyway? 09:59
brrt no, let me check what ^exit actually points to...
jnthn As in, force flush if we were leaving
Oh, but that's maybe too late
Yes, it can be too late :)
We need to flush before we call the C function that does the deopt
If flush means what I think it means :)
brrt it almost means that... there is two meanings here, and i'm not using them nicely separated 10:00
the first meaning is, while building expression trees, we maintain the nodes that generated a local; if we find a reference to that local, we add a reference to that node (if we do not find it, we generate a node that says 'load this local' and use that as a reference instead) 10:01
the second meaning is, before we call we must ensure that values that are (potentially) clobbered are saved and restored; that's done by the register allocator 10:02
In the context of guards, i'm referring to the first meaning; and the implication is that before we return to the interpreter, the stack frame must be as if it was interpreted 10:03
It might be better to handle that explicitly via some kind of 'sync' node
anyway, to make a long story short 10:05
(i can also make it longer ;-)) 10:06
there shouldn't be a problem with implementing guards
hmm. i'm confused now; the spesh graph candidate code *does* clean up inline spesh graphs 10:15
jnthn Grrr...turns out that just fixing the return type side of things isn't quite enough 10:21
Though it occurs to me that I'm also looking at a rather wasteful situation 10:25
We're producing type specializations of the NQP sub `sub identity($obj) { $obj }` 10:26
Which is utterly pointless because there's nothing to specialize in there
We should just produce one simple ("certain") optimized version of it and be done
brrt odd... 10:28
jnthn Well, we don't yet do anythhing to analyze if type specializations are even worth it 10:29
brrt anyway, the issue is, we're not freeing spesh graphs that have been allocated as part of try_unoptimized
jnthn works on that :)
brrt and only those are a problem
jnthn Hm, is that the new path?
For when there was no existing specialization? 10:30
brrt correct
but as far as I can tell, these are as normal?
jnthn hmm, wonder if a destroy of the spesh graph if we can't inline it is missing
lizmat jnthn: I guess you are aware that "identity" takes about 5% in my average profile
jnthn lizmat: That's how I know the profiler is introducing its own measurement noise 10:31
lizmat aha... ok
:-)
jnthn I suspect that with the expr jit we turn the content of identity into 1 or 2 machine code instructions
Even calling the profiling logging is more than that
Let alone its actually recording work
*actual 10:32
brrt gist.github.com/bdw/699471e0b284c8...01782ef3de
we could, if inlined, and the optimizer works, and the register allocator optimizations work, etc. 10:33
no, we actually do clean that up.. hmm 10:39
o.O but, recursively, as well.. 10:40
10:43 d0nn1e joined 10:44 p6bannerbot sets mode: +v d0nn1e
brrt i could use a hint with the log above because i don't really get it 10:44
10:49 d0nn1e left
Geth MoarVM: 286b56079d | (Jonathan Worthington)++ | 4 files
Log return type in return from JIT to unspesh'd
10:52
MoarVM: 5ef56b7268 | (Jonathan Worthington)++ | 4 files
Add data on which ops are specializable

We'll use this data to decide when there's no point producing type specializations for a frame, and we should just go with making a single certain specialization for it instead.
jnthn Hm, it's the spesh graph structure itself that leaks, rather than the memory allocator within it... 10:53
brrt aye 10:55
well, also everything in it 10:56
11:04 zakharyas left 11:09 Exaeta joined, Exaeta left, travis-ci joined, p6bannerbot sets mode: +v travis-ci
travis-ci MoarVM build failed. Jonathan Worthington 'Add data on which ops are specializable 11:09
travis-ci.org/MoarVM/MoarVM/builds/413998366 github.com/MoarVM/MoarVM/compare/5...f56b726889
11:09 travis-ci left
Geth MoarVM: 0c5f6e52e4 | (Jonathan Worthington)++ | 4 files
Don't do worthless type specializations

Note whether a static frame contains anything that would benefit from type specialization. If it contains no such instructions, then only do a certain specialization of it. This works well with the `identity` sub written in NQP and produced by various spesh plugins. With a bit more work in Rakudo it may be possible to get Mu.sink to be considered as an unspecializable thing too.
11:16
lizmat jnthn: work in Rakudo where ?
jnthn Looking at the bytecode, seems 2 things (at least) 11:18
1) Don't bother spitting out a p6decontrv when we can see we're returning Nil (or something else that won't use it) 11:19
2) Twiddle the signature lowering so that a type constraint of Mu on an invocant won't spit out a hllize
Can't do that for non-invocant Mu things, but when it's the invocant, well, we'll get away with it I guess :) 11:20
Lunch time; will have a play with that afterwards 11:21
lizmat ok
meanwhile: I have a patch that will strip out the Stringy calls, making the core 36K smaller
jnthn OK, does it come out just as fast when interoplating non-Str? 11:22
lizmat faster
jnthn oh, nice :)
lizmat 1414 msecs vs 1713
jnthn bbiab
11:27 statisfiable6 joined, p6bannerbot sets mode: +v statisfiable6 11:34 travis-ci joined, p6bannerbot sets mode: +v travis-ci
travis-ci MoarVM build failed. Jonathan Worthington 'Don't do worthless type specializations 11:34
travis-ci.org/MoarVM/MoarVM/builds/414006475 github.com/MoarVM/MoarVM/compare/5...5f6e52e469
11:34 travis-ci left
dogbert17 brrt: did you see the asan output I posted on github.com/MoarVM/MoarVM/issues/862 ? 11:39
11:49 mcspud26 joined 11:50 p6bannerbot sets mode: +v mcspud26 11:51 rorx15 joined, AlexDaniel left, rorx15 left 11:55 mcspud26 left
jnthn Ah, turns out that there's also a decont in method sink and that has to be there, and that's desirable to specialize 12:08
So, we don't get it to fall under unspecializable. But still we can get it not to do a pointless p6decontrv :) 12:09
masak hm, Rakudo extops are going away? 12:12
jnthn Yes, slowly but surely 12:15
masak why? is the flexibility of extops not worth it? 12:18
or is this some sort of natural development like "moar is taking on more and more of the special needs rakudo has"? 12:19
lizmat masak: extops cannot be jitted
jnthn They made more sense when we were at the point where "write chunks of hot stuff in C" was good
masak ah, so this is a step in the lifting of things
jnthn Well, we can JIT the calls to them, but we can't look inside of them 12:20
So for example return type checking and deconting and so forth used to be a check we coulod not avoid
*could
And many Scalar allocations took place magically inside of C code that allocated them and set the descriptor and default value, which would be invisible to escape analysis 12:21
masak oh no
jnthn That bit was already changed :)
Note how if you have an interpreter and don't have any significant optimization infrastructure, it makes sense to do things with hunks of C in extops 12:22
But now we have compilation to machine code and an increasingly sophisticated optimizer
masak right
12:23 robertle left
masak will the extops go away completely, then? 12:23
will it just be "0 extops", or will it be "the extops mechanism can be removed now"? 12:24
lizmat masak: I think that's the plan 12:25
jnthn Since Rakudo is the only customer, I think we could even remove it 12:26
masak yay
jnthn One nice side-effect of this is that we then can do static builds of MoarVM
And they can run Rakudo
Which will be very helpful for those wanting to bundle stuff into a single executable for distribution purposes 12:27
masak yes, it was through that issue that I found that extops are going the way of the dodo 12:30
12:38 zakharyas joined 12:39 p6bannerbot sets mode: +v zakharyas 12:45 Kaiepi left, Kaypie joined 12:46 p6bannerbot sets mode: +v Kaypie 12:53 diakopter joined, p6bannerbot sets mode: +v diakopter 13:14 brrt left, brrt joined 13:15 p6bannerbot sets mode: +v brrt 13:20 dodobrain16 joined 13:21 p6bannerbot sets mode: +v dodobrain16, dodobrain16 left 13:35 brrt left 13:50 Kaypie left 13:52 Kaiepi joined 13:53 p6bannerbot sets mode: +v Kaiepi 13:58 davidebeatrici15 joined 13:59 p6bannerbot sets mode: +v davidebeatrici15 14:02 davidebeatrici15 left, JustTheDoctor joined, p6bannerbot sets mode: +v JustTheDoctor 14:03 AlexDaniel joined, JustTheDoctor left, p6bannerbot sets mode: +v AlexDaniel 14:04 AlexDaniel left, AlexDaniel joined, card.freenode.net sets mode: +v AlexDaniel, p6bannerbot sets mode: +v AlexDaniel 14:06 timotimo left, AlexDaniel left, AlexDaniel joined, p6bannerbot sets mode: +v AlexDaniel 14:16 nhandler23 joined, p6bannerbot sets mode: +v nhandler23 14:17 nhandler23 left 14:35 Kaiepi left, Kaiepi joined 14:36 p6bannerbot sets mode: +v Kaiepi 14:53 roger_rabbit17 joined 14:54 p6bannerbot sets mode: +v roger_rabbit17 14:55 roger_rabbit17 left 15:37 timo joined, p6bannerbot sets mode: +v timo, timo is now known as timotimo 15:41 lizmat left
Geth MoarVM: 210a4026f5 | (Jonathan Worthington)++ | 4 files
Make inline logging available through an env var

Having to compile it in my tweaking a #define every time gets quite tiresome. This also makes it accessible to those doing development on Rakudo, without them having to re-compile MoarVM.
15:42
timotimo ^- i like that 15:45
15:54 brand021 joined 15:55 p6bannerbot sets mode: +v brand021 15:56 brand021 left 15:58 zakharyas left 16:02 travis-ci joined, p6bannerbot sets mode: +v travis-ci
travis-ci MoarVM build failed. Jonathan Worthington 'Make inline logging available through an env var 16:02
travis-ci.org/MoarVM/MoarVM/builds/414122535 github.com/MoarVM/MoarVM/compare/0...0a4026f53c
16:02 travis-ci left 16:07 Zoffix joined, p6bannerbot sets mode: +v Zoffix
timotimo imgur.com/hNKA3lz - now you can also get the allocations for an "entire routine", rather than just in the call graph "per call" 16:20
even though actually using it has quite a few rough edges, i'll probably push it up to github and release it to the ecosystem Very Soon, plus a blog post 16:24
Zoffix New blog post: "The 100 Day Plan: The Update on Perl 6.d Preparations": rakudo.party/post/The-100-Day-Plan...6-d-Update 16:48
16:54 AlexDaniel left 16:55 AlexDaniel joined, p6bannerbot sets mode: +v AlexDaniel 16:58 thomas23 joined
jnthn Darn. I figured we could do a dead instruction pass before deopt use analysis, which would act mostly as a PHI prune 16:58
16:58 p6bannerbot sets mode: +v thomas23
jnthn And it makes a measurable difference in some benchmarks. Oddly, though, breaks the Rakudo build. It's odd, given it should be entirely safe.. 16:58
16:58 Zoffix left 16:59 thomas23 left
timotimo hah, yeah 17:03
i experienced something similar to that
when i tried to trim PHI nodes down to only have one mention of each register version
17:03 pwillard10 joined
timotimo maybe we've got some code that removes phi operands from a "pred" block when we remove something or other 17:04
and that lacks an idea of usage/reference count/whatever
17:04 p6bannerbot sets mode: +v pwillard10
jnthn Dunno 17:05
17:10 pwillard10 left 17:13 nesthib joined, p6bannerbot sets mode: +v nesthib 17:14 nesthib left 17:16 brrt joined 17:17 p6bannerbot sets mode: +v brrt 17:20 brrt left 17:23 brrt joined, p6bannerbot sets mode: +v brrt
jnthn hah, obvious problem in hindsight 17:32
timotimo cool, what was it?
jnthn It was doing it when re-using a specialization
And so threw out stuff that deopt analysis had carefully retained :)
timotimo huh, so it did it twice to the same phi?
jnthn Well, re-use means we make a graph from already specialized code
But we don't have enough information in the code to know that we can't just go throwing things away 17:33
(Because they will have no visible use, but will have been retained last time around for deopt reasons)
timotimo ooh
diakopter jnthn: it occurs to me that the spesh knowledge engine could be used to make a "real" type checker 17:35
(like, Agda/Coq/Idris-grade) 17:36
...if there was a Calculus of [inductive] Constructions HLL, that is 17:37
timotimo difficult to do, IMO, since we do multi-dispatch by caching what the actual dispatch code tends to do at run time 17:39
and then just ignore the other methods and such
jnthn Loads of stuff in spesh is done speculatively and so based on statistics
So it's be a probabalistic type checker... :) 17:40
diakopter but that's the essence of type-checking, proving that checks that could theoretically just be runtime checks are actually invariants that can be optimized away
timotimo we still keep a whole lot of these checks around, though
17:40 dimi34ka joined 17:41 p6bannerbot sets mode: +v dimi34ka
diakopter if one doesn't care about proving consistency of a program specification offline (doesn't mind encountering misdesigns/bugs at runtime), such a system would be just fine 17:42
17:44 dimi34ka left 17:49 brrt left
timotimo there's still lots of places we do invocations, where potentially all our knowledge is just gone 17:49
17:57 chachasmooth3 joined 17:58 p6bannerbot sets mode: +v chachasmooth3 18:03 chachasmooth3 left
Geth MoarVM: bfbbb0f75c | (Jonathan Worthington)++ | 9 files
Do dead instruction elim pass after usage setup

But before we do the deopt analysis. While it's of course possible that there was dead code in the input program, the main purpose of this is to trim away dead PHI nodes, recursively, so that they will not make extra work for the deopt analyzer nor cause things to be kept alive bogusly just because a PHI was used across a deopt point. ... (5 more lines)
18:11
jnthn oops, it's very much dinner time 18:15
yoleaux 17:48Z <Zoffix> jnthn: FYI: R#2195 github.com/rakudo/rakudo/issues/2195
synopsebot R#2195 [open]: github.com/rakudo/rakudo/issues/2195 [āš  blocker āš ] False positive throwage of "flattening of other hash reprs NYI"
jnthn bbl
18:34 travis-ci joined, p6bannerbot sets mode: +v travis-ci
travis-ci MoarVM build errored. Jonathan Worthington 'Do dead instruction elim pass after usage setup 18:34
travis-ci.org/MoarVM/MoarVM/builds/414185404 github.com/MoarVM/MoarVM/compare/2...bbb0f75c7f
18:34 travis-ci left 18:42 lizmat joined 18:43 p6bannerbot sets mode: +v lizmat 19:00 Guest42469 joined 19:01 p6bannerbot sets mode: +v Guest42469 19:02 Guest42469 left 19:05 varesa12 joined, p6bannerbot sets mode: +v varesa12 19:06 varesa12 left 19:27 cwre joined 19:28 p6bannerbot sets mode: +v cwre, cwre left 19:31 Zombie23 joined, Zombie23 left
dogbert17 jnthn: wrt to github.com/MoarVM/MoarVM/issues/937 the same problem shows up with every program, even ./perl6 -e '' 20:06
jnthn Looks harmless, if noisy 20:09
dogbert17 ok, no worries then but nwc10 will scream bloody murder tomorrow :) 20:10
jnthn Maybe, but he uses ASAN, and I'm not sure if that detects this particular kind of problem ;) 20:11
hm, does it happen for NQP code ever? 20:12
Geth MoarVM: efbc6c6389 | (Jonathan Worthington)++ | src/core/ext.c
Fix an uninitialized memory access

It was relatively harmless, and only happened when validating frames that used extops; this gives it an accurate value.
20:16
dogbert17 ooh, now that was fast, jnthn++ 20:17
can I ask another favor, what happens if you run ./perl6 t/spec/S06-signature/introspection.rakudo.moar 20:19
I get a strange error just near the end - Cannot invoke null object
jnthn hm, I get that too 20:20
Strange, didn't on my work machine
diakopter microcode-patched Intel CPU vs non- ? 20:21
jnthn Probably just timing related
diakopter :D
dogbert17 Ryzen here :)
seem to be the last commit you did before dinner, i.e. bfbbb0f75c7 20:31
timotimo if moar could analyze lexicals better, it could remove the "assign 0 to the lexical" before the argument gets assigned 20:35
this is talking about the Int candidate for ASSIGN-POS
timotimo looks at the int candidate instead 20:36
20:37 travis-ci joined, p6bannerbot sets mode: +v travis-ci
travis-ci MoarVM build failed. Jonathan Worthington 'Fix an uninitialized memory access 20:37
travis-ci.org/MoarVM/MoarVM/builds/414235385 github.com/MoarVM/MoarVM/compare/b...bc6c6389d7
20:37 travis-ci left
timotimo 592 bytes big, 54 from the scalar-assign-no-whence-no-typecheck farme it's inlined 20:38
20:38 lizmat_ joined 20:39 p6bannerbot sets mode: +v lizmat_ 20:40 lizmat left
timotimo maybe spesh should try to use getattr_o instead of getspeshslot + getattrs_o 20:41
maybe "if it can find the string in the string heap and it's already deserialized"
but that could be an expensive lookup, perhaps?
the getattrs_o could be made better if we could discover facts from the guards 20:45
but for that they would have to up the version of the register, or some other way to signal that what they are guarding against is only known to be true after the guard
jnthn It should be able to turn it into that 20:46
timotimo oh? well, it doesn't in this case :)
it has 0 facts about the register it's using for the getattrs_o, i.e. operand number 2 20:47
jnthn Yeah, I spotted that. Didn't figure out why yet.
timotimo oh, did you also see it's "KnTyp" on one of the target registers of getspeshslot? 20:48
like, only known type, not known value?
that's also odd
dogbert17 another observation, t/spec/S17-procasync/stress.t suddenly behaves very strangely
timotimo if it's gone through facts_discover, it must have known type *and* known value, unless the "obj" passed in is null 20:49
jnthn What the heck? when I set spesh_limit etc. I get a spesh log full of junk? 20:57
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
And nothing useful 20:58
timotimo that sounds like multithraeding
put a %d into the filename
that can help
not multithreading
multiple processes
like when precompilation happens
jnthn huh, indeed 21:01
timotimo ^@ is null 21:02
jnthn Perhpaps the test shells out
I do get 3 files
ah, and only one thing has something in it 21:03
timotimo only one reaches limit
jnthn Right 21:04
(That part is good, I odn't have to figure out which to look at :))
timotimo holding cat with othen hand
except for eliminating some "set"s and the getattrs_o thing that could have two less getspeshslot in front i don't see big opportunities for winning in bytecode size from spesh alone 21:10
hm, but each set is 3 x 16 bytes, right? so 48 21:11
i suppose that adds up rather quickly
if we don't mind special-casing it everywhere in the whole codebase, we could have a set instruction that only works on the first 256 registers, but encodes both arguments in 16 bytes instead of 32 for both 21:12
diakopter I think we considered that a while back 21:16
21:16 timotimo left
diakopter where'd e go 21:17
jnthn OK, the introspection.t failure is deopt related, it seems 21:19
21:34 timo2timo joined, p6bannerbot sets mode: +v timo2timo
timo2timo the shell host is a bit rebooty today it seems like 21:34
earlier today it was an update, no clue what it is this time
i mean we can also just deduct some bytes for every "set" instruction in the code 21:35
jnthn oh, very darn clever 21:43
So we have a bunch of deopt instructions
Well, deopt points 21:44
The deopt usage checker correctly considers them as deopt usages of the register that goes missing
However, after optimization, none of them are left on guards or other potentially deopt instructions 21:45
So it deletes them. All very good.
Except that one of the invokes was a completely non-speculative inline
And the inline deopts
But we don't factor that in anywhere
This was wrong before now, but all the surplus PHIs saved us
timo2timo hah 21:46
jnthn I think that may be relatively easy to fix
21:46 lizmat_ is now known as lizmat
jnthn I'd already been wanting the "does this inline have any deopt points" info anyway 21:49
21:59 sam21 joined 22:00 sam21 left, Kaiepi left 22:02 siniStar joined 22:03 siniStar left 22:08 timo2timo left 22:09 lizmat left 22:12 Kaiepi joined, p6bannerbot sets mode: +v Kaiepi 22:14 Turska-29 joined, lizmat joined, p6bannerbot sets mode: +v Turska-29 22:15 Turska-29 left, p6bannerbot sets mode: +v lizmat, __idiot__ joined, __idiot__ left 22:23 mark-otaris joined 22:24 mark-otaris is now known as Guest76862, p6bannerbot sets mode: +v Guest76862, Guest76862 left 22:31 timo2timo joined, MJ940 joined 22:32 p6bannerbot sets mode: +v timo2timo, p6bannerbot sets mode: +v MJ940, MJ940 left
jnthn Yay, seems I have a fix. 22:35
timo2timo \o/ 22:37
Geth MoarVM: 4fc267b607 | (Jonathan Worthington)++ | 6 files
Account for inlines that may cause deopts

It was possible for us to wrongly discard instructions based on them not being needed for deopt when:
  * There code being specialized did not need to use any of the deopt
   points between the definition and use of the SSA value
  * An inline inserted between the two could cause deopt
Fix by using a deopt point at the point of the call as a "proxy" for those deopts inside of the inline, when an inline has instructions that may cause deopt.
22:44
22:53 timo joined, p6bannerbot sets mode: +v timo, timo is now known as timotimo
dogbert17 there's a tiny problem left but that should perhaps be left for later 22:55
running ./perl6-valgrind-m t/spec/S06-signature/introspection.rakudo.moar will expose it 22:56
23:03 travis-ci joined, p6bannerbot sets mode: +v travis-ci
travis-ci MoarVM build failed. Jonathan Worthington 'Account for inlines that may cause deopts 23:03
travis-ci.org/MoarVM/MoarVM/builds/414291605 github.com/MoarVM/MoarVM/compare/e...c267b607b9
23:03 travis-ci left
timotimo most important user-facing feature: invoking the profiler UI when a profile was already loaded before will now immediately forward you to the profiler ui 23:04
now it'll have to load files specified on the commandline, too
23:27 greppable6 joined 23:28 p6bannerbot sets mode: +v greppable6 23:35 obserd joined 23:36 p6bannerbot sets mode: +v obserd 23:37 obserd left