github.com/moarvm/moarvm | IRC logs at colabti.org/irclogger/irclogger_logs/moarvm
Set by AlexDaniel on 12 June 2018.
00:12 MissionCritical joined 00:15 regreg left 00:17 MissionCritical left 01:37 yaymuffins24 joined 01:39 yaymuffins24 left 02:38 bitch24 joined, bitch24 left 02:47 Auctus0 joined, Auctus0 left 04:07 Selfsigned11 joined 04:09 Selfsigned11 left 04:29 regreg joined, p6bannerbot sets mode: +v regreg 04:36 ZzZombo joined, p6bannerbot sets mode: +v ZzZombo 04:49 nate23 joined 04:52 nate23 left 05:00 Cronus19 joined 05:01 Cronus19 left 05:04 biberao0 joined, slackjeff joined 05:07 slackjeff left 05:08 biberao0 left 05:49 zopsi21 joined, zopsi21 left 06:15 suim4 joined 06:19 suim4 left 06:30 ZzZombo left 06:31 ZzZombo joined, p6bannerbot sets mode: +v ZzZombo 06:43 bjs4 joined, bjs4 left 07:30 norkle7 joined 07:31 norkle7 left 07:35 zakharyas joined 07:36 p6bannerbot sets mode: +v zakharyas 07:39 regreg left 07:57 K0HAX15 joined 07:58 K0HAX15 left 08:00 lizmat left 08:22 brrt joined 08:23 p6bannerbot sets mode: +v brrt
brrt \o 08:30
i'm seeing a bunch of MVM_oops that I think can be assert 08:31
jnthn But asserts ain't included in non-debug/optimized builds, I think? 09:09
yoleaux 00:40Z <Xliff> jnthn: What do you think of va_list conversion to NativeCall?
brrt that's the point :-)
jnthn Well, it ain't my point. :P 09:15
If we're going to do something awful, I'd prefer we do so with a message than can be reported back to us that gives us a hint at what went wrong 09:16
brrt so, my thought was, when that happens users are lost anyway 09:18
jnthn Note that on especially hot paths we do have debugging asserts 09:19
So it's not that we aren't using them already, just that it's a trade-off between the failure information we can produce and performance
09:20 nativecallable6 left, statisfiable6 left, greppable6 left, greppable6 joined, statisfiable6 joined, nativecallable6 joined, committable6 left 09:21 shareable6 left, benchable6 left, p6bannerbot sets mode: +v greppable6, p6bannerbot sets mode: +v statisfiable6, p6bannerbot sets mode: +v nativecallable6 09:28 lizmat joined 09:29 p6bannerbot sets mode: +v lizmat
Geth MoarVM/postrelease-opts: 4 commits pushed by (Jonathan Worthington)++ 09:33
jnthn Just a rebase so I've got the fix from master :)
09:48 brrt left, brrt joined 09:49 lizmat left, p6bannerbot sets mode: +v brrt
brrt hmm, i wanted to add a MVM_VECTOR_DESTROY and ended up rewrting to use alloca 10:05
10:08 lizmat joined 10:09 p6bannerbot sets mode: +v lizmat 10:10 lizmat left
Geth MoarVM: 86ba33728a | (Bart Wiegmans)++ | src/spesh/manipulate.c
[Spesh] Change MVM_VECTOR to alloca

Since we know at function entry how many basic blocks there are, we can allocate a fixed size buffer, and because we use alloca, we don't have to free it either.
10:11
brrt has done all too much size bounds analysis in the expression JIT for sanity, but it does sometimes pay off :-) 10:14
10:14 Random27 joined 10:17 lizmat joined, p6bannerbot sets mode: +v lizmat 10:18 committable6 joined, shareable6 joined, Random27 left 10:19 p6bannerbot sets mode: +v committable6, p6bannerbot sets mode: +v shareable6 10:20 regreg joined, p6bannerbot sets mode: +v regreg 10:22 justache4 joined 10:24 justache4 left 10:25 lizmat left 10:27 ZzZombo left 10:31 travis-ci joined, p6bannerbot sets mode: +v travis-ci
travis-ci MoarVM build failed. Bart Wiegmans '[Spesh] Change MVM_VECTOR to alloca 10:31
travis-ci.org/MoarVM/MoarVM/builds/416296753 github.com/MoarVM/MoarVM/compare/d...ba33728a34
10:31 travis-ci left 10:46 DLange24 joined 10:48 DLange24 left
brrt hmm, we should probably fix that 10:54
10:54 lizmat_ joined 10:55 p6bannerbot sets mode: +v lizmat_ 11:08 batman4216 joined 11:09 batman4216 left 11:13 brrt left 11:31 zakharyas left 11:32 bjs26 joined 11:34 stmuk joined 11:35 p6bannerbot sets mode: +v stmuk 11:37 bjs26 left, stmuk_ left 12:13 lizmat_ left 12:15 ^Phantom^18 joined 12:19 ^Phantom^18 left
jnthn Uff...this deopt bug is hard to hunt down :S 12:20
(It's exposed by the latest change in postrelease-opts, and there's no known cases of it manifesting in master, but I don't yet know what it is) 12:24
Ah, apparently lunch helped, I think I mighta found it 12:32
timotimo hooray for lunch! 12:37
i'm glad you're the one we entrusted the lunch codes to 12:38
jnthn tssk, apart from the fix breaks other things :S 12:43
12:44 brrt joined 12:45 p6bannerbot sets mode: +v brrt 12:47 zakharyas joined
jnthn So the set elimination opt can change a guard instruction such that its input and output are different 12:47
12:47 p6bannerbot sets mode: +v zakharyas
jnthn However we always wrote the output register whether or not we deopt'd 12:48
Changing it so we do that only if we aren't going to deopt fixed things. But it breaks other things.
But I've got deopt analysis being done after guard insertion. But guard insertion meddles with the SSA form. 12:49
Well, not the SSA form, it's still valid
But different versions show up either side of the guards
I'm wondering if that means deopt analysis coming after guard insertion makes it "too late"
timotimo optimization ordering again, huh 12:51
jnthn I guess the way to find out is to do 1) a usage pass, 2) deopt pass, 3) facts and guard insertion pass
And see if that helps 12:52
Of course, making the `set` optimization never touch a guard instruction is another option, but that feels like we'll just hit the same problem again in a different opt later on 12:53
13:03 rosseaux6 joined 13:04 diakopter joined, p6bannerbot sets mode: +v diakopter, rosseaux6 left, lizmat joined 13:05 p6bannerbot sets mode: +v lizmat
jnthn That may well have helped, though will keep quite until I see lots of passing tests :) 13:12
It's not so much optimization ordering as making sure that we get our deopt info gathered early enough and then take great care to honor it 13:15
timotimo OK 13:16
jnthn I'd thought we could get away with doing it a tad later so we could merge a couple of passes
I was wrong
Now we gather it as early as we possibly could
Yay, test and spectset pass 13:18
13:19 brrt left, brrt joined 13:20 p6bannerbot sets mode: +v brrt
jnthn Cool, next year's TPC Europe is in Riga! :D 13:20
That's probably a fun train journey :) 13:22
13:25 lizmat_ joined
Geth MoarVM/postrelease-opts: 981a180568 | (Jonathan Worthington)++ | 2 files
Mark [sp_]speshresolve as :invokish
13:25
13:26 p6bannerbot sets mode: +v lizmat_
Geth MoarVM/postrelease-opts: 3a18f3b38c | (Jonathan Worthington)++ | 3 files
Form deopt usage information before guard inserts

Otherwise, now that guards have a read and a write register, we can end up with the information being insufficiently accurate in order to keep things alive as needed for deopt.
13:28
MoarVM/postrelease-opts: 0f46730b2f | (Jonathan Worthington)++ | 2 files
Only write guard write regsister if not deopting

Otherwise, we might end up scribbling over a register that holds a useful value the other side of deopt, which can happen under our move aggressive `set` elimination optimizations, but potentially in others too.
jnthn langauge class &
timotimo have fun!
13:28 lizmat left
tadzik ooh, Riga again, nice :) 13:48
14:07 lizmat_ left 14:09 lizmat joined 14:10 p6bannerbot sets mode: +v lizmat 14:17 lizmat left
Geth MoarVM/spesh-leaks: 6104e045cf | (Bart Wiegmans)++ | src/moar.c
[FSA] Fix use-after-free in cleanup

If we cleanup the main thread (with it's per-thread FSA free list) after cleaning up the FSA itself, that corresponds to a use-after-free, and we should not.
14:18
MoarVM/spesh-leaks: 02ecc6bf77 | (Bart Wiegmans)++ | 8 files
[Spesh] Destroy inlinee after inlining

After we've inlined a graph the inliner claims ownership over the memory of the inlinee. With this patch, we destroy the original graph, which should simplify lifetime management. The memory region list is merged with the inliners graph so that the memory allocated for the inlinee nodes is not freed.
MoarVM/spesh-leaks: 06bd801563 | (Bart Wiegmans)++ | 2 files
[Spesh] Leak fixes

Many allocated things either come from a spesh candidate or from malloc (or realloc). Or they are assigned to a spesh candidate. So the only way to really know if they are shared with a spesh candidate
  (or static frame) is by checking if they are pointer-equal.
ASAN leaksanitizer is finally clean now for me.
14:27 brrt left 14:37 regreg left 14:38 lizmat joined 14:39 p6bannerbot sets mode: +v lizmat 14:46 spirit_pact0 joined 14:51 spirit_pact0 left
timotimo i blagged! wakelift.de/2018/08/15/the-first-p...c-release/ 14:52
lizmat weekly: wakelift.de/2018/08/15/the-first-p...c-release/ 14:54
notable6 lizmat, Noted!
jnthn timotimo: Nice post 15:11
timotimo thank you!
jnthn And nice work :D
timotimo \o/
jnthn About the Inclusive Allocations
For Str it looks like we allocate more per entry after spesh
timotimo i might have to double-check how that comes to be 15:12
if i'm properly summing up spesh/jit entries
perhaps it barfs if there's some calls with only spesh and some with also jit?
jnthn Dunno, it just seems odd
timotimo oh, i probably divide it by the entries to the routine on that page 15:13
15:13 lizmat left
timotimo depending on the data passed in, the actual behaviour of routines below that could be anything 15:13
15:14 lizmat joined, lizmat left
timotimo and perhaps it doesn't even make sense to give a "per entry" count there 15:14
nine Huh? Somehow much of the slowdown caused by hllbool has appeared over night. Now I think I may just have run a debug version of moar
timotimo isn't that the opposite of what should happen? :o 15:15
jnthn Maybe disappeared? :) 15:16
timotimo that'd be a good explanation 15:19
15:26 lizmat joined 15:27 p6bannerbot sets mode: +v lizmat 15:30 dogbert11 left 15:40 pppingme9 joined
Geth MoarVM/postrelease-opts: 4e0ae266d0 | (Jonathan Worthington)++ | 3 files
Propagate facts of inlined return value to inliner

In preparation for looking at eliminating unrequired guards. This is a common case where we will often be able to do guard elimination.
15:48
15:49 pppingme9 left
nine Oh, yes, I meant disappeared :) 15:52
15:54 dave492514 joined 15:57 dave492514 left
jnthn timotimo: How did your proven guards elimination patch misbehave, ooc? 15:57
timotimo hm, let me try again 16:00
jnthn Well, I've got it applied in my postrelease branch which means on top of various fixes
And so far it built NQP and passed tests, built Rakudo and passed tests, and now I'm doing spectest and it doesn't look bad so far 16:01
timotimo right, you want something that used to break so you can compare?
jnthn Plus I checked the code in a microbenchmark where I expected it to apply and it worked
So it's certainly tossing guards
ah, I think I just saw one failure in spectest 16:02
ah, but they both failed before this change 16:03
ah, one of 'em fails with spesh disabled 16:06
So it's just a busted spectest I guess
The other is a SEGV
timotimo actually i don't see it fail stuff any more even though i don't have the latest fixes 16:07
jnthn hm, odd :)
timotimo but maybe that was when i turned guardtype into guardjusttype which the commit i pushed doesn't do?
jnthn maybe
I'll drop that bit for now and clean it up and push it 16:08
timotimo t/spec/S03-operators/buf.t ........................................ Dubious, test returned 255 (wstat 65280, 0xff00) 16:09
doesn't happen to be this one?
jnthn No, that's just being behind Rakudo HEAD 16:10
timotimo OK
one thing that surprised me was that the post-guarded register seemed to have many more fact flags set than the pre-guarded register 16:11
wait, was that from a commit that was actually pushed to master?
* 37b7c7b79 - discover facts about a bunch of sp_guard ops (5 days ago) <Timo Paulssen> 16:12
jnthn yeah, I did git pull of Rakudo earlier today and that problem went away
timotimo right, that's in there
Geth MoarVM/postrelease-opts: 877054f600 | (Timo Paulssen)++ (committed by Jonathan Worthington) | src/spesh/optimize.c
Turn redundant sp_guard* ops into set

We can eliminate them when we can prove that the guard will always be true.
nine Oh....the expr JIT template for hllizefor may actually cause a slow down! Unlike the lego JIT version it will always run MVM_hll_get_config_for even if the HLL name is a known values (which it probably is always) 16:14
timotimo right :( 16:15
i think hll configs might actually be non-moving 16:16
so you can "just" put the address into an i64 register (hopefully properly truncated on 32bit)
and treat it as a pointer on the other end
by writing something like sp_hllizefor that takes an extra argument
jnthn Yeah, they don't move
And while you can't put them into a spesh split 16:17
You could put the true and false into spesh slots
And then JIT it into something involving those
timotimo this is for hllizefor in general i think?
jnthn With some sp_ternery
Oh, I thought for hllboolfor :)
nine And the template for hllize always calls MVM_hll_current while the Lego JIT version determines the pointer at compile time. 16:24
timotimo that's why we could generate a different instruction that has the current hll in its arguments :) 16:25
nine getcurhllsym just does (let: (($hllname (^getf (cu) MVMCompUnit body.hll_name))) 16:27
Geth MoarVM/postrelease-opts: 7668b82efd | (Timo Paulssen)++ (committed by Jonathan Worthington) | src/spesh/optimize.c
Turn redundant sp_guard* ops into set

We can eliminate them when we can prove that the guard will always be true.
16:29
jnthn Ammended version with a fix :)
16:31 brrt joined
timotimo trying to see the difference 16:32
failing
the only thing i see is that char *name was thrown out, because it was unused after the debug printfs have disappeared
jnthn Yes, that's what I removed
timotimo oh, ok!
jnthn I noticed it 'cus it discarded a const and so produced a warning :)
16:32 p6bannerbot sets mode: +v brrt
brrt .tell nine that's an interesting case for the jit optimizer... I want to make it so that we can use spesh facts that correspond to nodes 16:40
yoleaux brrt: I'll pass your message to nine.
brrt and maybe do some constant folding
timotimo i think we may want to have a bit more extra information
because we know for example that anything that hangs off of an STable can be considered constant up to a certain point
but how do we encode that in the jit itself? 16:41
16:43 lizmat left
brrt not in the jit, but in the optimizer, that's possible 16:47
anyway, i'll have to think about it some
timotimo++ interesting post 16:48
timotimo thanks :) 16:49
17:00 vegii20 joined 17:02 nolsen14 joined 17:03 vegii20 left
Geth MoarVM/postrelease-opts: ce5b2557ad | (Timo Paulssen)++ | src/spesh/graph.c
insert null-register-ops in ascending order
17:05
timotimo there's also this commit
17:06 nolsen14 left
Geth MoarVM/postrelease-opts: f4d93bcf96 | (Jonathan Worthington)++ | src/spesh/optimize.c
Clear up and start improving box optimization

  * Remove seemingly non-effective box and dead code unbox opts in the
   first optimize pass
  * In the second optimize pass, introduce code to delete dead box
   instructions that are rendered no longer required due to box/unbox
   pair elimination
... (7 more lines)
17:08
jnthn dinner &
timotimo i like that we have pips now 17:14
Geth MoarVM: bdw++ created pull request #941:
Fix Spesh Memory Leaks
17:18
17:24 brrt left 18:05 zakharyas left
Geth MoarVM/postrelease-opts: ae2832d09c | MasterDuke17++ (committed using GitHub Web editor) | src/spesh/optimize.c
Fix typo in comment
18:22
18:46 cheshire_cat joined 18:49 cheshire_cat left 19:57 zakharyas joined, p6bannerbot sets mode: +v zakharyas 20:37 zakharyas left 20:54 bobe11 joined, bobe11 left
MasterDuke samcv: you usually use clang, right? have you seen github.com/rakudo/rakudo/issues/2124 happen on your system? 21:30
22:18 robertle left
samcv MasterDuke: yeah i use clang 22:19
22:20 lizmat joined 22:21 p6bannerbot sets mode: +v lizmat
Geth MoarVM/postrelease-opts: 05a43615bf | (Jonathan Worthington)++ | 2 files
Lower box_[ns] with P6opaque

This covers boxing of both Num and Str objects in Perl 6, lowering them into a fastcreate and a p6o_bind_[ns], which avoids a C call and the indirections and checks that the normal code has to do.
22:41
MoarVM/postrelease-opts: a89b74c5a8 | (Jonathan Worthington)++ | src/spesh/optimize.c
Do a dead instruction pass after post-inline pass

This clears up things like hllboxtype instructions left behind by lowered or deleted boxing instructions.
jnthn m: say 1.234 / 1.367 22:43
camelia 0.902707
jnthn 10% off `my $n = 0e0; for ^10_000_000 { $n = $n + 1e1 }; say $n` 22:44
m: say 7.128 / 7.638 22:54
camelia 0.933229
jnthn That's for `my $x = "food"; for ^10_000_000 { $x.tc.flip }` but the code-gen for that is utterly shite 22:55
But that can be a problem for another day :)
MasterDuke i set a breakpoint in gdb while compiling an nqp file, is there an easy way to see what line in the file i'm compiling i'm at? 23:32
timotimo MasterDuke: perhaps a start to figuring this otu would be to call MVM_dump_bytecode and see if that gives you a hint 23:39
i often combine that with looking at a current spesh log 23:40
MasterDuke timotimo: hm. i set a breakpoint in MVM_coerce_smart_numify and then called MVM_dump_bytecode, but nothing jumps out at me 23:43
oh, the the annotations might be helpful... 23:44
timotimo exactly 23:45
though you could also try manually getting the annotation
MasterDuke huh, no annotation in this bytecode 23:46
timotimo dump_bytecode doesn't output them i don't think 23:47
MasterDuke i did see them the first time i ran it
oh, the annotation look like they're pointing to the location of the code that's getting run, not that's being processed 23:49
timotimo processed, eh? 23:50
MasterDuke well, parsed/interpreted/something 23:51
timotimo ah, yes, you would have to inspect the lexicals and such for that to work 23:52
that'd be a lot easier with the debugserver, bu tit's not made to handle the use case of "code was stopped in gdb, figure it out!"
MasterDuke yeah, the annotations are pointing to num processing code, which makes sense, but i want to see why that code is being called 23:53
you know, i still haven't used the debugserver yet
it would help for this?
timotimo you can find the callers with MVM_dump_bytecode_frame(tc, 1) and higher numbers iirc
well, you can use it to navigate the call stack as well as outers of frames and through items and containers and such 23:54
MasterDuke *_bytecode_of or *_bytecode_staticframe?
timotimo bytecode_of, i think 23:55
MasterDuke oh, i missed _stackframe, that looks like it
afk for a bit, but thanks, that looks like it'll help 23:57
23:58 Hobby12 joined