github.com/moarvm/moarvm | IRC logs at colabti.org/irclogger/irclogger_logs/moarvm
Set by AlexDaniel on 12 June 2018.
01:09 vesper11 joined 01:24 MasterDuke left 01:30 Util left 01:33 lucasb left 03:37 leont left 04:37 squashable6 left 04:38 squashable6 joined 06:06 sena_kun joined
nwc10 good *, #moarvm 06:42
06:56 domidumont joined 08:12 frost-lab joined 08:44 MasterDuke joined 08:57 zakharyas joined 09:06 Altai-man joined 09:07 Geth left 09:09 sena_kun left
jnthn morning o/ 10:09
Altai-man o/ 10:11
nwc10 \o 10:14
moon-child o\ 10:28
MasterDuke ugh, this converting MVMArrayBody to a single chunk is annoying 10:35
so much casting and pointer (de)referencing to access the slots
jnthn Hm, I was expecting a `get_slots` inline function where you pass the body and get back a pointer to the slots 10:38
MasterDuke yeah, there are a couple new repeated things that might need to be turned into macros or functions 10:39
i was hoping to get things mostly working and then see where there was repetition
but i may need to do something like what you said first, so a single incorrect * or & doesn't block everything 10:41
jnthn Yeah, I think the screw-up potential is quite high without factoring at least that bit of pointer arith out :) 10:45
timotimo who is without pointer arithmetic sin may cast the first stone* 10:52
(MVMSTone*)
11:08 squashable6 left 11:11 squashable6 joined
dogbert17 MasterDuke: if you're bored you could always run t/spec/integration/advent2012-day21.t. It seems as if one of your fixes causes this test to hang. 11:16
MasterDuke huh, i did run spectests...but yeah, at least when run by itself it seems to hang 11:28
11:29 Geth joined
MasterDuke a spectest just completed fine. oh, it only runs in a stresstest... 11:31
dogbert17 yeah, I should have mentioned that, my bad 11:48
I bisected it as far as be 260f015888c7 11:51
linkable6 (2020-12-01) github.com/rakudo/rakudo/commit/260f015888 Merge pull request #4026 from MasterDuke17/gen_faster_code_for_some_given_when_cases
12:47 zakharyas left 12:53 vesper11 left 13:01 domidumont1 joined 13:03 domidumont left 13:07 sena_kun joined 13:09 Altai-man left 13:42 zakharyas joined 14:17 zakharyas1 joined 14:18 frost-lab left 14:20 zakharyas left 14:30 leont joined
MasterDuke oh, i see what's going on. it's `where 1 {}`, but getting the result of `2/2`, which is 1.0 15:24
so it gets into an infinite loop 15:25
should that match? or should the test have a `.Int` call added? 15:26
jnthn $ raku -e 'say 1.ACCEPTS(1.0)' 15:28
True
It's a smartmatch so it should be consistent with that 15:29
MasterDuke ugh. the genned code is going to get more complicated. maybe this is too much complexity 15:30
hm, it currently gens a call to `.Numeric`, would it work to just tack a `.Int` onto the end? 15:33
jnthn I guess check what the candidate for another Numeric against Int does 15:44
MasterDuke heh, a stresstest now passes, but `given 3/2 { when 1 { say "matched" } }` say 'matched', which isn't good 15:57
nwc10 m: say 1 << 54 15:59
camelia 5===SORRY!5=== Error while compiling <tmp>
Unsupported use of << to do left shift. In Raku please use: +< or ~<.
at <tmp>:1
------> 3say 1 <<7⏏5 54
nwc10 m: say 1 +< 54
camelia 18014398509481984
nwc10 actually, try something that isn't a power of two, but is larger than that 16:00
as in, also check that values that are beyond the ability of IEEE doubles to accurately represent, still get treated as integers
that would be the other possible trap of "just" saying .int 16:01
MasterDuke well, right now i modified it to do .Numeric.Int
but that's only if the 'when' is an int. if it's a Rat it just goes through the original/default .ACCEPTS route 16:02
so adding .Int is bad and i should feel bad. anybody have a better idea? 16:11
would it be terrible to also try the .ACCEPTS route if the fast path fails? i.e., it used to be everything was .ACCEPTS. now some cases are fast pathed, and the rest are .ACCEPTS. what if instead of completely bailing out if the fast path doesn't match, it then tries .ACCEPTS? 16:22
nine would it even still be fast?
MasterDuke i guess it'd be workload dependent. if things usually match, it would be faster than pre-my changes. if they usually don't, you have the extra cost of the fast path 16:23
16:24 patrickb joined
nine more code may push something over an inlining barrier 16:25
(generally speaking)
MasterDuke i had to keep making the fast path more and more complicated to fix edge cases. maybe i simplify it down so it's pretty cheap and let the .ACCEPTS handle all the edge cases 16:26
i.e., fast path is a only iseq_(i|s|n) on exactly what's given. if it succeeds good, if it fails then go through .ACCEPTS 16:28
17:06 Altai-man joined 17:09 sena_kun left 17:54 domidumont1 left 18:14 patrickb left 18:49 zakharyas1 left 19:12 domidumont joined 19:16 domidumont left 20:08 cognominal joined 20:15 vesper11 joined 20:19 vesper joined, vesper11 left 21:06 vesper left 21:08 sena_kun joined, Altai-man left 21:18 zakharyas joined 21:30 vesper11 joined 21:50 sena_kun left 22:06 sena_kun joined 22:22 sena_kun left 22:25 zakharyas left 23:28 vrurg left 23:29 vrurg joined 23:32 squashable6 left 23:33 squashable6 joined