00:18 lizmat joined 01:01 vendethiel joined 01:48 ilbot3 joined 01:57 vendethiel joined 06:42 domidumont joined 07:34 zakharyas joined 09:42 brrt joined 09:59 zakharyas joined
dalek arVM/line_based_coverage_3: 83468b5 | (Daniel Green)++ | tools/parse_coverage_report.p6:
Break out percentage into its own column and add some JS+CSS to sort the table
11:03
arVM/line_based_coverage_3: 641b736 | (Daniel Green)++ | tools/parse_coverage_report.p6:
Switch to the non-minified JS
arVM/line_based_coverage_3: c5b9ae3 | lizmat++ | tools/parse_coverage_report.p6:
Merge pull request #381 from MasterDuke17/line_based_coverage_3

Give percentage its own column and add some JS+CSS to make the table sortable
11:32 brrt joined
brrt good * #moarvm 11:33
one more question, and then i'm done
how long do the live range objects themselves need to live? 11:34
a): for the whole of the allocation scheme
b): just as long as my cursor is within their range
i.e. after spilling a live range, do i need to keep the descriptor arround 11:35
if i do a): then splitting the register allocation from register assignment is somewhat simpler 11:36
however, that may not really be a worthwhile goal anyway, because precoloring (assigning values to the place they are needed) needs to be coupled to register assignment anyway 11:37
12:02 vendethiel joined 13:06 brrt joined
timotimo brrt: i wish i knew the/an answer 13:45
brrt well, no reason to despair :-) 14:08
the safe answer is just to keep them arround 14:09
timotimo i'd like to take a few more baby steps toward building the deopt bridges
brrt luajit, of course, only generates them on demand 14:14
timotimo you mean the bridges? 14:20
brrt well, they call them side traces 14:22
but yes
anyway, what's keeping you from starting with a few baby steps :-0
:-)
timotimo dunno :\ 14:23
i'll be duplicating the guard instructions with versions that take a BB 14:24
there's so many of them :|
and i don't really know which are most common(ly hit)
brrt why not start with just one 14:26
timotimo right. i probably should
make a suggestion? :)
brrt the simplest one... sp_guardtype or sp_guardconc 14:29
timotimo if i'm not mistaken, i need an op for each kind of deopt we can do, right? to put at the end of the bridge? 14:30
but i'll know at spesh time which one i need to emit because there's the deopt annotations in the code belonging to the guard 14:31
timotimo puts a speshlog in front of him 14:32
359 sp_guardconc 14:33
42 sp_guardtype
34 sp_guardrwconc
now if only i knew which one gets hit more often ...
now for some debugspam :) 14:36
brrt hmmmm 14:37
timotimo 701148 guardrwconc b0rked
1273 guardtype b0rked
727 guardconc b0rked
brrt it depends on how you want to do it
timotimo would you have guessed?
brrt no, wouldn't 14:38
timotimo wait a minute
i actually want to build bridges for the least often taken paths
because every bridge i build moves unnecessary code out of the mainline
if i were to immediately build a second speshed version based on "this guard didn't hold. but let's assume all other guards still hold", *then* i'd want to take the most often taken guards 14:39
that's going to happen in the future, but i have no clue how hard that'll be 14:41
i think i'd have to do a full re-spesh of the original code and turn the guard into a regular branch that'll take execution into a "parallel universe" where i'll clone most of the BBs
brrt hmmmmm
ok, i may be naive, but.... 14:42
timotimo that sound like i'd be re-speshing fully every time i detect hotness on a new guard, and i'd be doing that parallel-world-clone quadratically
brrt i was under the impression that the goal was to take a basic block that had some move operations; prove that these moves or copies are unnecesssary after a guard; move the copies to a new basic block, and have the guard point to that bb? 14:43
so... why not do the proving thing first?
timotimo yes, that's the first milestone in this project 14:45
i'm getting far ahead of myself
brrt knows what that is like :-) 14:48
timotimo :D
there's another thing i'd really like to get into moar, but i don't know how to properly engineer it 14:49
sometimes we build guards based on logs where the logs "figured out" some property that we already knew based on our regular fact discovery mechanism
so we'll end up with something like a create op followed shortly by a guard 14:50
i don't remember where i saw that example
for some reason i couldn't just check for the flags at the point where the log guard tries to set up its facts, because the flags were just 0 ... or something like that?
brrt hmmm 14:52
i don't really know, to be honest 14:53
timotimo right, i'd have to find the example again 14:54
i'm really not sure i want to be messing around with the deopt table :| 15:05
brrt no.. i'm not suggesting that you should 15:06
in fact, i'm not suggesting anything
timotimo oh, is it enough to just add a little annotation?
brrt i have no idea to be honest
timotimo in fact, i can just duplicate the annotation that's in front of the guard op? 15:07
it seems like i'll just be able to rip out the annotation that belonged to the sp_guard* and put it in front of my sp_forcedeopt 15:12
so at least that part is kind of figured out
and Deopt All apparently only appears before invoke_* ops 15:13
AFK for a bit 15:35
15:41 domidumont joined
timotimo i think first i shall just turn sp_guardconc into sp_bridgeconc and immediately sp_forcedeopt 16:12
and see if anything breaks
16:16 domidumont joined
timotimo oh crap 16:17
i'm adding branches to the *middle* of BBs
that sucks.
hm. i can potentially insert the new BB into the linear order and make it less crappy that way 16:20
otherwise there'd be a crazy amount of jumps back and forth?
16:40 zakharyas joined 17:05 dalek joined, synopsebot6 joined 17:31 vendethiel joined 17:51 domidumont joined
brrt you'll have to split the basic block, that's for sure 17:51
i can't really say what the fallout of tha tis
timotimo hopefully nothing 17:53
if i make sure the linear order stays correct?
and inside the bridges we won't be throwing exceptions or anything 17:54
brrt hmmm 17:56
that is .... okay, but very, very, very fragile
timotimo oh? 17:58
could you elaborate? 18:03
brrt sorry, i'm somewhat busy 18:19
i can see how it makes sense to keep the linear order, so that you don't upset the inlining and deoptimization tables 18:20
on the other hand, that means you have to do that, forever
the alternative is that your forcedeopt gets a fixed number that ... for all i care, represents the original position of your guard 18:21
timotimo forever %) 18:22
that is just fixed by stealing the annotation
easy-peasy
because the annotation has the data in it, as far as i can tell
brrt no upsetting of tables at all; it's outside of the range of the true code, but who cares 18:23
because after the bridge, you're going back to the original code anyway
timotimo i only meant having the split put the two pieces a BB is split into in the original order 18:25
the bridge ought to go outside, of course. especially when we expect it to not be taken often 18:26
brrt ah, alright 18:27
right, fully agree
timotimo so, no worries about fragility? or doing something "forever"? 18:29
18:38 domidumont joined
brrt no, not really 18:43
in fact, the reverse
safe splitting of basic blocks is something we will probably need a lot of time
19:29 FROGGS joined
timotimo hm. vim over sshfs isn't working very well with all those modules i have, it seems like 21:10
21:11 Util joined
timotimo waiting multiple minutes to open this file ... ?!? 21:13
hoelzro o_O 21:14
psch ...use ed? 21:18
timotimo nah, i'm using vim inside ssh now 21:19
ugh. idx. not fun :| 21:23
for splitting BBs, i mean. i'll have to come up with a new index
well, i can just go through linear_next and +1 the idxes 21:24
they aren't supposed to be stable anyway
ugh, initial_pc is supposed to just be the cached instruction pointer at the beginning
and it's an uint, so i can't just set it to -1 21:25
i think i can just re-use the initial_pc from the original BB when i split 21:26
21:30 vendethiel joined
timotimo this is an ugly task 21:41
dalek arVM: bdff4dc | timotimo++ | src/spesh/manipulate. (2 files):
Implement a BB-splitting manipulation function
22:30
timotimo ^- i bet it's b0rked beyond belief :)
i'd be pretty glad if someone would commet and/or fix ;) 22:46
a bit drained today, so not going to put in the "split basically everywhere" thing
22:50 travis-ci joined
travis-ci MoarVM build failed. Timo Paulssen 'Implement a BB-splitting manipulation function' 22:50
travis-ci.org/MoarVM/MoarVM/builds/142899784 github.com/MoarVM/MoarVM/compare/8...ff4dc9e3a3
22:50 travis-ci left
timotimo well, i should have at least tried to build it, seems like 22:56
dalek arVM: f9dad06 | timotimo++ | src/spesh/manipulate. (2 files):
fix signature of split_BB_at
22:58
23:24 travis-ci joined
travis-ci MoarVM build passed. Timo Paulssen 'fix signature of split_BB_at' 23:24
travis-ci.org/MoarVM/MoarVM/builds/142905385 github.com/MoarVM/MoarVM/compare/b...dad06052ff
23:24 travis-ci left
timotimo good 23:25