01:27 squashable6 joined 01:28 reportable6 joined, coverable6 joined, greppable6 joined, bisectable6 joined, statisfiable6 joined, bloatable6 joined 01:59 evalable6 joined 02:26 MasterDuke joined 02:58 ilbot3 joined 03:17 MasterDuke joined 03:22 colomon_ joined 04:29 japhb joined 07:13 domidumont joined 07:18 domidumont joined 07:42 brrt joined
brrt good * #moarvm 08:01
08:11 committable6 joined
brrt i'm thinking how i want to implement the const-copying trick in the register allocator 08:16
08:46 brrt joined 09:07 zakharyas joined 10:28 zakharyas1 joined 10:30 japhb joined 11:02 brrt joined
dogbert2_ brrt: did you see github.com/rakudo/rakudo/issues/1483 ? 11:06
brrt did not 11:07
dogbert2_ initial findings make it look as if the JIT might be involved 11:08
11:11 zakharyas joined
brrt yeah, i see it 11:16
11:24 brrt joined 11:27 AlexDaniel joined
timotimo floor_n is a juicy target for jitting to make this code faster: perl6 -e'my @a = "a".."z"; for ^500_000 {my @b = @a.roll(20)}' 12:45
dogbert2_ brrt: any theories?
timotimo it has 82% speshed-but-not-jitted frame calls
brrt ouch 12:46
timotimo 73% call frames thrown out by inlining, but that makes any jit bail more extreme
brrt no theories, no
haven't looked at it in detail now
timotimo i guess we could implement floor_n with a coerce_ni and a floor_i to have an impl immediately
i don't have any time today, though 12:47
dogbert2_ I guess the gdb output isn't enough (but perhaps a clue) 12:51
14:32 japhb joined 14:42 japhb joined 14:44 zakharyas joined 14:46 zakharyas joined 15:10 zakharyas joined 16:05 brrt joined 16:26 zakharyas joined
brrt expr jit can bisect it 16:37
i can fairly probably debug this 16:57
16:58 japhb joined 17:26 domidumont joined 17:34 zakharyas joined 17:41 samcv joined 18:08 zakharyas joined 18:16 AlexDaniel joined 21:00 Kaiepi joined 21:30 Ven`` joined 22:12 bart__ joined
bart__ good * 22:50
brrt oh boy, there's deopt_inlines on the sp_getspeshslot 22:55
23:07 brrt joined
brrt weird thing i'm seeing, is double restore of spilled value 23:15
ok, i've spotted the miscompile in question 23:26
jnthn brrt++ 23:27
brrt github.com/rakudo/rakudo/issues/1483 check it out 23:29
see the mov rax, [rbx+...
those are spilled-value restores
except
they should never be using rax
rax is register 0, and it's illegal to allocate 23:30
(well, within my system. other compilers can allocate rax just fine)
but i use it as the scratch register
now that would most plausibly happen, if the live ranges used for that 'spill restore' are never allocated for at all 23:31
now all i have to do is figure out why that is :-)
but my guess is somewhere between not being added to the spill list, or not being processsed because the loop enters prematurely
also, earlier in the code i'm seeing restores being inserted twice 23:32
i wonder what's up with that
jnthn Sounds like it's getting itself a tad confused 23:33
brrt yeah
i was attempting to optimize that to never spill for tiles that hold constant values (but to copy them instead)
this morning 23:34
it was more complex than i had thought :-)
jnthn Yeah, those two dead writes into rax would be wrong dodgy even if rax was legal in our JIT's scheme
brrt so one of the reasons why it could get confused, maybe, is that they are joined over an IF node as well as over a COPY node 23:36