[00:02] *** reportable6 left [00:05] *** reportable6 joined [01:28] *** frost joined [02:03] *** nine left [02:03] *** nine joined [04:54] *** squashable6 left [04:57] *** squashable6 joined [05:06] *** squashable6 left [05:44] good *, #moarvm [05:49] *** kjp joined [05:57] Good *, Nicholas [06:03] *** reportable6 left [06:05] *** reportable6 joined [06:11] Better *, all [08:08] *** squashable6 joined [09:00] *** japhb left [09:12] *** japhb joined [09:21] moarning o/ [09:21] \o [10:04] jnthnwrthngtn: in https://github.com/MoarVM/MoarVM/commit/8bcf4906ab3cd95dde2907a1d8c035b8ffaebdbb you added the deopt pre ins and deopt synth annotations. Presumably the deopt pre ins annotation is there to contain the correct deopt destination PC. But the deopt synth annotation contains the index that the materializations are registered for. [10:09] In the failing example, all stacked guards deopt to the same: -> pc 218 [10:10] But I don't know if that's coincidence or if that will always be true. In the latter case I wonder what the pre deopt ins annotation is needed for [10:14] Any guards stacked up ahead of a runbytecode, be they a product of dispatch program translation or of ensuring we can link a specialization or inline, should deopt to immediately before the dispatch op [10:14] Which is why it's a pre-deopt point [10:15] Which is why it's a pre-deopt point [10:15] We also dispatch_o is a curious case: [10:15] dispatch_o .d w(obj) str callsite :cache :deoptallpoint :predeoptonepoint :maycausedeopt :specializable :postlogged :deoptonepoint [10:15] It actually has every kind of deopt point. [10:15] This looks like the synt points already will use the index of a pre-deopt point: ann->data.deopt_idx = predeopt_index; So why then add an additional deopt-pre-ins annotation? [10:15] 1. predeopt because if the guards stacked up ahead fail we need to deopt to before the dispatch instruction [10:16] 1. predeopt because if the guards stacked up ahead fail we need to deopt to before the dispatch instruction [10:16] 2. deoptonepoint for if we inserted a return value guard afterwards [10:16] 3. deoptallpoint for global deopt [10:18] nine: Oh, I see what you mean...totally missed that it was doing that when I first read [10:19] Maybe that's not needed, given we just add the synth one in src/spesh/disp.c [10:19] *** brrt joined [10:22] good *, brrt [10:24] \o Nicholas [10:24] does jnthn have is normal name again [10:24] not yet... [10:55] timo: https://github.com/MoarVM/MoarVM/blame/master/src/profiler/configuration.c#L960 might be something for you [11:09] Yay, enough megamorphic handlers done that the rather involved Agrammon application now never fills up a dispatch cache. [11:11] Well, on the use case I threw at it, anyway [11:26] *** brrt left [11:36] *** brrt joined [11:59] ¦ MoarVM: MasterDuke17++ created pull request #1571: Fix some of the things found by the clang static analyzer [11:59] ¦ MoarVM: review: https://github.com/MoarVM/MoarVM/pull/1571 [12:02] *** reportable6 left [12:31] ¦ MoarVM: d12d6f35cb | (Daniel Green)++ | src/6model/reprs/MVMCapture.c [12:31] ¦ MoarVM: Add some context to capture arg exceptions [12:31] ¦ MoarVM: [12:31] ¦ MoarVM: Say what op they were thrown from (if any) and include both the given [12:31] ¦ MoarVM: and allowed values. [12:31] ¦ MoarVM: review: https://github.com/MoarVM/MoarVM/commit/d12d6f35cb [12:31] ¦ MoarVM: 7b5b6bad77 | MasterDuke17++ (committed using GitHub Web editor) | src/6model/reprs/MVMCapture.c [12:31] ¦ MoarVM: Merge pull request #1566 from MasterDuke17/add_some_context_to_capture_arg_exceptions [12:31] ¦ MoarVM: review: https://github.com/MoarVM/MoarVM/commit/7b5b6bad77 [12:32] ¦ MoarVM: b3e14b1512 | (Daniel Green)++ | src/profiler/configuration.c [12:32] ¦ MoarVM: Add default case when determining an operand size [12:32] ¦ MoarVM: [12:32] ¦ MoarVM: Otherwise GCC at the -O2 optimization level warns that `size` may be [12:32] ¦ MoarVM: used uninitialized. [12:32] ¦ MoarVM: review: https://github.com/MoarVM/MoarVM/commit/b3e14b1512 [12:32] ¦ MoarVM: 4293ea853a | (Daniel Green)++ | src/strings/ops.c [12:32] ¦ MoarVM: Silence a GCC warning at optimization level -O2... [12:32] ¦ MoarVM: [12:32] ¦ MoarVM: by twice moving a conditional in MVM_string_index outside a loop, so it [12:32] ¦ MoarVM: won't potentially be used uninitialized. I think it couldn't actually [12:32] ¦ MoarVM: happen, but this is probably a little faster also. [12:32] ¦ MoarVM: review: https://github.com/MoarVM/MoarVM/commit/4293ea853a [12:32] ¦ MoarVM: d48a5a4129 | MasterDuke17++ (committed using GitHub Web editor) | 2 files [12:32] ¦ MoarVM: Merge pull request #1570 from MasterDuke17/fix_warnings_found_by_gcc_at_O2_optimization_level [12:32] ¦ MoarVM: review: https://github.com/MoarVM/MoarVM/commit/d48a5a4129 [12:36] ¦ MoarVM/master: 4 commits pushed by (Daniel Green)++, MasterDuke17++ [12:36] ¦ MoarVM/master: abeaaec4f0 | Fix potential use-after-free loading a compunit [12:36] ¦ MoarVM/master: e9484ee46b | Remove some dead code in generated code [12:36] ¦ MoarVM/master: 974086abe0 | Fix possible garbage value in addition [12:36] ¦ MoarVM/master: c43ee9dff2 | Merge pull request #1571 from MasterDuke17/fix_some_of_the_things_found_by_clang_static_analyzer [12:36] ¦ MoarVM/master: review: https://github.com/MoarVM/MoarVM/compare/d48a5a41293d...c43ee9dff2c1 [13:03] *** reportable6 joined [14:03] *** linkable6 left [14:03] *** evalable6 left [14:04] *** evalable6 joined [14:16] *** frost left [15:05] *** linkable6 joined [15:09] *** brrt left [15:32] the moarvm talk just ended half an hour ago? [15:37] did anyone here register to listen/attend live? some of the other talks looked interesting too, but i couldn't quite justify the cost [15:38] btw, the clang static analyzer found a lot more things than those couple i fixed, i just took the ones that were really easy to verify [15:44] I survived the talk. And some questions afterwards. :) [15:47] It was recorded and I believe the video will be out later today [15:53] nice [15:58] if anyone wants to repro, it was really easy, i just did a configure and make clean, then `scan-build make -j12` [16:00] jnthnwrthngtn++ [16:12] later today sounds great [16:15] *** patrickb joined [16:17] *** patrickb left [16:59] *** vrurg left [17:04] *** vrurg joined [17:28] <[Coke]> jnthnwrthngtn: doing the work, talking the talk... [17:43] *** linkable6 left [18:02] *** reportable6 left [18:05] *** reportable6 joined [18:32] sliding the slides [18:39] drinking the tea [18:39] aha, but more [18:39] punning the puns [18:40] I believe that's more important round here. [18:46] * lizmat was punning in court for 4 hours today [18:47] apart from being in the car for 5+ hours today [18:48] * lizmat is very tired and calls it an early day [18:48] that doesn't sound that fun [18:48] no, it wasn't, but at least it was hopefully the last time in this case [18:48] & [18:51] casing the case [18:58] * [Coke] thinks the last time he was in court, he punned a juror. [19:00] so where on bittorrent is this talk video then? :-) [19:02] * timo slaps th emule [19:04] I suspect that at some point we might find it here https://www.youtube.com/channel/UCwG9512Wm7jSS6Iqshz4Dpg [19:06] "now that's a name i haven't heard in a long time" [19:08] hope someone set up a camera on a tripod in an empty theater :P [19:08] gotta see the newest moarvlm flick as soon as it comes out [19:12] timo: btw, why is it that some small scripts create gigantic profiles? is that just a limitation of how we collect profile data? or is it indicative of something non-optimal happening when rakudo/moarvm run the code? [19:13] <[Coke]> Nicholas linked to the channel, is this one the talk? https://youtu.be/dQw4w9WgXcQ [19:13] :-) [19:13] score! [19:36] MasterDuke: probably all my fault :) [19:37] i guess that calls for 3 smacks with a wet noodle, as my grandmother would say [19:37] cruel o_O [19:38] i guess it depends on whether they're ramen or udon [19:38] canneloni perhaps [19:42] for example, on a branch of Text::Diff::Sift4 that reverts a bunch of converting stuff to nqp ops, profiling `use Text::Diff::Sift4; my $a; for "words_1k.txt".IO.lines -> $word { $a := sift4($word, "testing") }; say now - INIT now` creates something like a 16mb sql file [19:43] i think we still have that thing where we accidentally record recursions instead of loops under certain circumstances involving inlining [19:43] while on master (which doesn't change any overall structure, just uses nqp ops in a bunch of places, using a 10k file only creates a 578k html file [19:44] hm, that sounds a little familiar. i don't remember if there was a proposed fix though? [19:45] the sift4 code doesn't have any explicit recursion [19:45] right [19:47] ha! 16mb on that branch normally. 330k on that branch with MVM_SPESH_INLINE_DISABLE=1 [19:48] and runtime is only 0.27s [19:53] *** evalable6 left [19:54] i might actually put in a "don't do this optimization if profiling is turned on" so we get correct profiles until i fix it properly [19:59] well, inlining is so good for performance it might significantly throw off total runtime measurements [20:00] do you know how to fix it? [20:06] i've got to hope :P [20:08] not every inlining causes the problem, only some specific cases [20:08] so i would only disable some inlinings, or even better, some secondary optimization [20:46] *** linkable6 joined [20:47] I wonder if the optimization where we rewrite exception handling to goto (which can happen over inline boundaries) fails to correctly handle leaving of the inline [20:49] the kind of exception handling that's used to implement `last`? because i do use that in the code [20:50] i believe that's the one, yeah, jnthnwrthngtn [20:51] MasterDuke: It may manage that, yes [20:51] did you continue the code that puts info about inline caches / morphism-amount in the profiler output? [20:51] I think it does control exceptions mostly (that doesn't have an exception object) [20:52] timo: I didn't get it to output the SQL yet [20:52] timo: But the JSON makes it into the HTML output, so "just" needs me (or somebody else!) to remember how to JavaScript + Angular [20:52] ¦ MoarVM: MasterDuke17++ created pull request #1572: Lego jit implementation of nqp::abs_i [20:52] ¦ MoarVM: review: https://github.com/MoarVM/MoarVM/pull/1572 [20:53] oh, is it pushed up already? [20:53] The MoarVM bit is, and I think it automatically makes it into the JSON blob as a result [20:54] 627c92ccb00 in MoarVM [20:54] cool, i'll have a look while waiting for your talk's VOD or something :) [20:54] *** linkable6 left [20:55] The profiler UI is the only thing I ever wrote in Angular; the next web app I needed to make I did in React, and then I decided I vastly preferred it. :) [20:56] (Preferred React, to be clear.) [20:56] afk for a bit [21:03] yeah, react somehow makes more sense to me as well. perhaps a lot of that is how angular split things into components and modules or something like that? didn't get my head wrapped around that at that point, but react is a lot more explicit about where things come from [21:19] jnthnwrthngtn: Well, to be fair, the creators of AngularJS seemingly preferred something else as well (since Google went "Dear me, don't use AngularJS, use Angular2 instead -- it's a complete ground-up rewrite! Everything's different! We swear it's better now!") [21:20] Even within Google, those of us on the "consumer" side of those frameworks looked askance across the campus at the "producer" side. [21:22] I think my personal reaction was something like "Fool me once ..." [21:22] "askance"? [21:23] do we have vscode users in here? i can't seem to find a list of commits in the VCS panel? [21:24] https://www.dictionary.com/browse/askance [21:24] (Not being a jerk -- it's actually a pretty clear definition) [21:24] i see [21:26] * japhb wonders if the suspicion variant was based on the sideways look variant -- because you wanted to at least keep things you couldn't trust in your peripheral vision, and subtly check on them every so often [21:52] jnthnwrthngtn: i thought we wanted the info about mono/poly/mega in a separate place that's per-routine rather than per-callgraph-node [21:55] *** linkable6 joined [23:36] no recording yet, huh? [23:55] *** evalable6 joined