[00:02] *** reportable6 left [00:03] *** reportable6 joined [01:21] *** nativecallable6 left [01:21] *** coverable6 left [01:21] *** committable6 left [01:21] *** bloatable6 left [01:21] *** notable6 left [01:21] *** shareable6 left [01:21] *** quotable6 left [01:21] *** linkable6 left [01:21] *** unicodable6 left [01:21] *** bisectable6 left [01:21] *** tellable6 left [01:21] *** reportable6 left [01:21] *** evalable6 left [01:21] *** squashable6 left [01:21] *** statisfiable6 left [01:21] *** greppable6 left [01:21] *** benchable6 left [01:21] *** releasable6 left [01:21] *** sourceable6 left [01:22] *** unicodable6 joined [01:22] *** statisfiable6 joined [01:22] *** greppable6 joined [01:22] *** releasable6 joined [01:22] *** bisectable6 joined [01:22] *** tellable6 joined [01:22] *** shareable6 joined [01:22] *** coverable6 joined [01:23] *** quotable6 joined [01:23] *** evalable6 joined [01:23] *** benchable6 joined [01:23] *** sourceable6 joined [01:24] *** notable6 joined [01:24] *** nativecallable6 joined [02:22] *** bloatable6 joined [02:22] *** committable6 joined [02:23] *** linkable6 joined [02:23] *** reportable6 joined [04:04] *** linkable6 left [04:04] *** nativecallable6 left [04:04] *** evalable6 left [04:04] *** reportable6 left [04:04] *** committable6 left [04:04] *** bloatable6 left [04:04] *** notable6 left [04:04] *** releasable6 left [04:04] *** quotable6 left [04:04] *** coverable6 left [04:04] *** sourceable6 left [04:04] *** unicodable6 left [04:04] *** statisfiable6 left [04:04] *** benchable6 left [04:04] *** bisectable6 left [04:04] *** greppable6 left [04:04] *** tellable6 left [04:04] *** shareable6 left [04:05] *** greppable6 joined [04:05] *** linkable6 joined [04:05] *** bisectable6 joined [04:05] *** notable6 joined [04:06] *** committable6 joined [04:07] *** coverable6 joined [04:07] *** releasable6 joined [04:07] *** shareable6 joined [04:07] *** quotable6 joined [05:05] *** tellable6 joined [05:05] *** benchable6 joined [05:05] *** statisfiable6 joined [05:05] *** evalable6 joined [05:06] *** unicodable6 joined [05:23] *** squashable6 joined [05:37] *** frost joined [05:45] *** samcv left [05:45] *** frost left [05:45] *** samcv joined [05:46] *** vrurg left [05:47] *** vrurg joined [06:03] *** reportable6 joined [06:31] *** frost joined [07:05] *** bloatable6 joined [08:27] *** bloatable6 left [08:27] *** tellable6 left [08:27] *** squashable6 left [08:27] *** benchable6 left [08:27] *** statisfiable6 left [08:27] *** evalable6 left [08:27] *** unicodable6 left [08:27] *** greppable6 left [08:27] *** shareable6 left [08:27] *** committable6 left [08:27] *** notable6 left [08:27] *** quotable6 left [08:27] *** bisectable6 left [08:27] *** reportable6 left [08:27] *** linkable6 left [08:27] *** releasable6 left [08:27] *** coverable6 left [08:28] *** notable6 joined [08:28] *** linkable6 joined [08:29] *** greppable6 joined [08:29] *** coverable6 joined [08:30] *** reportable6 joined [08:30] *** bloatable6 joined [08:30] *** evalable6 joined [09:05] *** nativecallable6 joined [09:28] *** unicodable6 joined [09:28] *** bisectable6 joined [09:28] *** squashable6 joined [09:29] *** tellable6 joined [09:29] *** quotable6 joined [09:29] *** benchable6 joined [09:29] *** shareable6 joined [09:30] *** committable6 joined [09:40] *** linkable6 left [10:36] good *able6, #moarvm [10:51] *** evalable6 left [10:54] *** evalable6 joined [10:55] *** Nicholas is now known as moaringable6 [10:55] good *, #moarvm [10:55] *** moaringable6 is now known as Nicholas [10:55] oh, I typoed that. [10:56] Hey ho sailor! [10:57] *** squashable6 left [10:57] *** squashable6 joined [11:07] *** sourceable6 joined [11:13] *** frost left [11:20] *** samcv left [11:21] *** samcv joined [11:30] *** statisfiable6 joined [11:40] *** linkable6 joined [11:42] *** lizmat left [11:42] *** TempIRCLogger left [11:47] *** lizmat joined [11:50] *** TempIRCLogger joined [11:50] *** patrickb joined [12:02] *** reportable6 left [12:05] *** reportable6 joined [12:16] *** RakuIRCLogger left [12:16] *** Geth joined [12:19] *** linkable6 left [12:21] *** linkable6 joined [12:37] Thank goodness my RakuConf talks are tomorrow; it's not easy to talk with an anaesthetised mouth... [12:42] *** frost joined [12:46] *** sena_kun joined [12:47] oops, a meeting with the dentist? [13:04] Indeed. [13:05] On the upside, it's not every day you have a medical reason to have ice cream for lunch. [13:06] * sena_kun .oO ( what ) [13:08] sena_kun: Can't feel what I'm doing with much of my mouth, so the safest thing to eat is something that I can't possibly do any damage with. Ice cream is also cold so good for taking off any swelling :) [13:09] jnthnwrthngtn, surprising but ok. I have like 5 appointments ahead, so sounds reassuring. [13:10] 5? Uff. I had 5. I might be down to 4 now. [13:10] heh, and I hoped you have it better. :/ [13:11] still kinda discouraging, I expected just 3, too optimistic. [13:11] next time better to expect 10 to make sure it can't reasonably be worse than that. [13:18] <[Coke]> Ugh, good luck, folks. (I have a visit coming up where I hope I get good news and not many impending visits) [13:21] [Coke]: Good luck also. [13:22] When I went for the first time in a while I expected kinda worse, but apparently while there's a bunch of historical things to fix, I've done well recently at looking after them. [13:22] <[Coke]> these luxury bones are a PITA! [13:25] (The dentist I was seeing moved across town, and given my anxiety about going it was way too much stress. I waited a bit as we were moving, there's a dentist really close by now, but then COVID hit and doing anything non-urgent needing close contact with other people seemed unwise.) [13:37] *** frost left [14:29] *** releasable6 joined [15:03] Getting back to our little spesh/deopt riddle, I went back further in history to the original speshing of add_object_if_no_sc (which later gets inlined but misses a critical Deopt Inline annotation). [15:04] Turns out in the original spesh of this function, the instruction does have an annotation: [Annotation: INS Deopt One Before Instruction (idx 7 -> pc 60; line 5701)] [15:18] *** dogbert17 left [15:18] *** dogbert17 joined [15:21] Oh darn, I lost the rr session :/ Can't re-run it anymore since apparently I've recompiled moar in the meantime [15:47] Luckily it only took some 400 runs this time to catch it again :) [15:49] *** dogbert17 left [15:49] *** dogbert17 joined [16:01] *** dogbert17 left [16:01] *** dogbert17 joined [16:03] *** dogbert17 left [16:03] *** dogbert17 joined [16:07] Huh...we put the annotation onto the preceeding sp_guardsf instruction instead of the sp_guardconc [16:23] ¦ MoarVM/new-disp: 2e9ef4d5da | (Jonathan Worthington)++ | src/disp/program.c [16:23] ¦ MoarVM/new-disp: Fix dispatch program dumping [16:23] ¦ MoarVM/new-disp: review: https://github.com/MoarVM/MoarVM/commit/2e9ef4d5da [16:35] *** dogbert2 joined [16:38] *** dogbert17 left [17:06] maybe we are missing handling for deopt before annotations for example when deleting instructions or so? [17:06] i forgot the raku conf already happens rigtht now [17:32] *** sena_kun left [18:02] *** reportable6 left [19:03] *** reportable6 joined [20:28] I can't shake the feeling that we simply do not differentiate between MVM_SPESH_ANN_DEOPT_PRE_INS and MVM_SPESH_ANN_DEOPT_ONE_INS annotations when turning them into MVM_SPESH_ANN_DEOPT_INLINE when we should. [20:29] But how on earth would we have gotten so far if that's the case? And why does it appear only on new-disp? And in such a hard to reproduce case? [20:29] I'd think that sp_guardconc is a rather common op and it must deopt from time to time [20:30] did jnthnwrthngtn say something recently about how new-disp has way more MVM_SPESH_ANN_DEOPT_PRE_INS? there was some other bug around them that was surprising it hadn't hit on master? [20:34] deopt pre ins is completely new in new-disp and has not been necessary beforen [20:35] Oh, that explains it! So I didn't read far enough back in the git log [20:35] heh. i was somewhat right. new-disp definitely has way more of them than master [20:36] Way more than 0 :D [20:36] infinitely more [20:37] So, we need to find a clever way to communicate the information whether the annotation was a PRE_INS or an ordinary one, so build_cfg can DTRT [20:38] Bytecode positions are always even numbers, aren't they? [20:39] pretty sure yes [20:40] you want to make odd numbers stand for pre? [20:40] There *were* pre-deopt points before new-disp, but they didn't need to be distinguished in any way for correct behavior. [20:40] timo: well, that's why I like coding in C :D [20:40] oops [20:40] Then when we started needing to do so I introduced the annotation [20:40] Because there's a *lot* more of them now [20:41] In fact, they're basically the delta variant of deopts [20:41] in a language with a more expressive type system like cpp for example we could at the type level make sure that we never accidentally get an odd number where we arent prepared for it [20:41] did you know that delta plus is coming [20:41] And it started to matter [20:42] timo: My assumption is that whoever named that didn't know what the next letter in the greek alphabet was, but was too ashamed to admit it :P [20:43] or because its epsilon and epsilon expresses an infinitesimally small number in maths lol [20:43] There aren't that many places that read from the deopts array [20:43] About inline deopt points though: the way I *think* they work is 1) spot the deopt address in the bytecode, 2) put an annotation there, 3) spit it out [20:43] well thats good then [20:43] helps that they are purely a runtime thing and not serialized or so [20:44] And so that means they should round-trip [20:44] But...it also means pre-deopt ones would end up with the annotation on the wrong instruction [20:44] If this ends up mattering, then this could be awkward. [20:44] jnthnwrthngtn: yes, annotation on the wrong ins is exactly what I've found [20:45] And it does matter, because it means the deopt_idx of that instruction won't get updated after inlining [20:45] However I'm not quite sure if it matters, in that I think we've been very very reluctant to go removing guards inside of the inline [20:45] nine: huh, that's...interesting [20:46] nine: I hope that's not because the code-gen is like "ooh, a deopt annotation, now I can stop looking for other deopt annotations"... [20:46] ('cus we can now end up with two on the same instruction, because one was originally a pre of the previous instruction) [20:47] uh, of the next instruction [20:47] I guess inlining could do that mistake too. But that'd imply the fix is just to keep iterating; is there a more subtle problem that I'm not thinking of? [20:47] No, it's just because the inliner is looking for DEOPT annotations and only if an instruction has one we call tweak_guard_deopt_idx [20:47] ill go make some late dinner. you kids have fun ; [20:48] nine: Ohhh [20:48] Sigh [20:48] :) [20:48] And tweak_guard_deopt_idx takes the deopt_idx from the annotation and writes it into the operand [20:48] Right, right. I see. [20:48] Yeah, that's trickier. That's the bit I missed. [20:49] *** patrickb left [20:50] But if I get it to put the annotation on the correct instruction, all should be well again [20:50] Yeah [20:50] I'd prefer a bitshift and flag approach rather than relying on evenness [20:51] But, but, but....that will cost us the upper 2 GiB of possible bytecode! [20:51] Because even is always true *now*, but I'm sorta hopeful that at some point we'll shift enough of our ops over to boot-syscall that we'll have few enough of them to consider really having bytecode, not wordcode [20:51] Only 2 gigs left then... [20:52] Doesn't matter; spesh refuses to do anything if the bytecode is over a certain length anyway :P [20:52] Makes me wonder if there are places that actually treat the bytecode pos as a singed number. The code has traditionally been a bit sloppy in that way [20:52] * MasterDuke confidently states that 2g of bytecode ought to be enough for anybody [20:52] Well, I know we treat deopt indexes signed in quite a few places because we want -1 to mean unresolved at code-gen time... :) [20:54] Well, bitshift it will be then. So, good plan for tomorrow :) [20:54] Let me guess, you didn't submit a talk and so aren't doomed to spend the day finishing up slides? :) [20:55] Exactly! [20:55] Someone has to keep things moving here after all :P [20:55] :D [20:56] At least only *one* talk has remaining work to do. (The new-disp one is finished.) [21:00] jnthnwrthngtn: does new-disp reduce the number of extra calls to FETCH that happen with Proxies right now? [21:01] vrurg is talking about Proxy right now and got me wondering [21:35] MasterDuke: Somewhat, yes [21:36] nice [21:36] It also means that you don't totally lose multi dispatch caching if you make a call with one as an argument [21:37] So the performance penalty for them is a bit less in that sense too [21:37] is there anything new-disp doesn't do? does it julienne fries? [21:37] We can probably do better still. It won't happen this side of The Merge, but I do wonder if decont will actually become an entrypoint to new-disp also [21:38] And then we can wire it up directly to a FETCH invocation and then it's trivially possible to inline [21:38] oh, cool [21:38] I'm...pretty sure it doesn't do the fries yet :) [21:40] I did once stumble upon a fries vending machine. (In Japan. Where else?) Alas, that only microwaved pre-prepared fries. [21:40] ugh [21:41] The fries weren't special, but it was an amusing way to pass the time while waiting for a connecting train. :) [21:41] i want to try the pizza vending machines i've heard about that make and cook it right there/then [21:42] i think they were introduced in italy, don't know if they still exist (or are anywhere else) [21:43] I think I read about them quite recently, but from what I remember they were only in Italy. [21:44] i didn't see any when i was there in 2006, but i believe they are newer than then [21:46] I've been there more recently but didn't spot them. OTOH, last time I was in a small town in the north. [21:47] There was a small place with a rather grumpy guy making pizza and it was delicious. :) [21:47] "lots of planets have a north" [21:49] i had a pizza at the place place in naples i was told invented the pizza. it was pretty good, but honestly the italian restaurant in the main square in tallinn had probably the best neapolitan pizza i've ever had [21:50] but i put neapolitan pizza in the same category as asparagus. it's only good when it's *really* good. otherwise i prefer chicago style [21:51] detroit style pizza supremecy [21:51] i dont even know what all these styles mean :/ [21:52] you have so much to learn [21:53] i'm not sure that i've had one that was described as detroit style. isn't that somewhat similar to lasagna? [21:53] deep dish pizza? [21:53] the most mainstream representation might be a little ceaser pan / deep dish pizza [21:54] what are the ones called that are tall and crunchy and kind of fluffy? [21:55] that's probably a deep dish [21:57] to be purist detroit style has cheese to the edge so it melts and carmelizes on the edge of the pan / crust, and the sauce usually added on top (although more like dabs / rows unlike a chicago style that is all sauce on top) [21:58] fluffy is probably sicilian stlye [21:58] which is pretty close to detroit style [21:58] https://media.smp-it-media.de/products/image/V2FnbmVyX0JpZ19IYXdhaWlfNDM1Z18xMDg4My5wbmc= [21:58] not to be confused with granny style [21:59] thats not even a pizza [21:59] thats like a savory fruit pie or something [21:59] it says pizza on the package haha [22:00] i did not intend to find a pizza hawaii [22:00] but it was surprisingly rare to find photos of this kind [22:05] i really like good hawaiian pizza, the sweet+salty combination, but it depends on the pineapple. it has to be fresh and nicely roasted/grilled, not canned [22:06] ah. well anyway i dunno how id classify that... greek / new-england style i guess [22:06] in my experience the ham can be a dealbreaker easily [22:06] *** linkable6 left [22:06] *** evalable6 left [22:07] yeah, i'd say that's kind of "regular" pizza [22:08] *** linkable6 joined [22:10] what would a new-disp pizza be like [22:11] well, at least we know it won't have julienned fries on it [23:04] entering dispatch from deopt sounds hella dope, kind of like deopt bridges perhaps? [23:44] *** linkable6 left