26 Oct 2021
jnthnwrthngtn Anyway, not a big deal 08:56
nine That marker would cause it to get started before you even start the test run!
jnthnwrthngtn Hm, the dev.azure.com/MoarVM/MoarVM/_build...ed5cabfd35 failure on my frame patch seems to be the thing nine++ already fixed :) 08:57
Ooh, my next grant app is posted! news.perlfoundation.org/post/grant...imizations 08:58
nine jnthnwrthngtn: since the build you linked to was successful: what was the bug I fixed? 09:13
jnthnwrthngtn nine: The recent `make test` flapper 09:14
nine ah the deopt issue 09:15
jnthnwrthngtn Yeah, believe so
Sigh. Why doesn't the link go to the build log I was looking at when I copied it :/ 09:16
nine Modern web crap...
MasterDuke dev.azure.com/MoarVM/MoarVM/_build...108585217d 09:18
nine Yes, that looks like the thing I fixed 09:19
jnthnwrthngtn I love how the modern web encourages readable URLs :) 09:20
nine Well, Microsoft has had a fetish for GUIDs even before the web :) 09:21
jnthnwrthngtn: I'm reviewing #1578 and found something. So please hold off the merge 09:27
jnthnwrthngtn Better to catch things in review than after merge :) 09:31
nine Ah, I think I misunderstood it anyway
Well, not totally. Apparently frame->work being NULL had 2 different meanings before. Could be because work_size is 0 or because the frame is no longer in dynamic scope 09:34
jnthnwrthngtn I don't think work_size being 0 ever actually happens 09:35
nine Probably not in any real code :)
jnthnwrthngtn And was slightly tempted to outlaw it at bytecode validation time so we never pay the price for that check 09:36
That said...we may no longer need the check at all 09:37
nine Someone ought to make a badger version with null, null, null, null, null, null, null, null, null, null, null, null, oh it's a return_v!
jnthnwrthngtn We did before because asking the FSA for 0 bytes is an error
null needs a result register :)
You'd need noop
nine Ah, yes, I meant noop
jnthnwrthngtn Which actually has the same number of syllables as badger
nine oh, even better :) 09:38
jnthnwrthngtn: how often does env_size change during specialization compared to changes in work_size? 09:53
jnthnwrthngtn nine: work_size changes more often 09:55
nine Would it make sense then to have work follow env instead of the other way round? Could save some memory copying
jnthnwrthngtn Hm, fair point. 09:56
otoh, env tends to be smaller than work, so in the case there are things to copy, we'd be copying more 09:57
nine yes, just thought of that, too 09:58
jnthnwrthngtn Given this only happens when we do OSR, and even then only the first time we OSR the frame (because if we deopt and OSR again we already had the specialization), it's not really a hot path 10:00
(Frames only grow, we never shrink them on deopt)
nine jnthnwrthngtn: why don't we need the special handling of puns in the megamorphic case? 10:44
jnthnwrthngtn nine: Because the megamorphic case is only used when the meta-class is a ClassHOW 10:48
Which means it's certainly not a role
nine Meh... MVM_nativecall_make_cpointer returns a type object for NULL pointers. A distinction that box_i doesn't make. And of course Inline::Perl5 relies on Pointer:D to not be NULL 10:52
jnthnwrthngtn Hmm... Tried to get finalization to work by generalizing the deopt mechanism (so we mark a frame as having a tweaked exit sequence and then, as we return into it, do the deopt and additionally trigger the finalizer call) 10:56
But somehow we end up with the top frame sometimes having been tweaked...
Which is never supposed to happen 10:57
nine rr time?
jnthnwrthngtn sigh, yes, if I can get a test to fail standalone rather than under make test or make spectest... 10:59
Which never seems to happen :/ 11:00
argh, I see, it happens when we have an exception and so are unwinding the stack 11:13
That is certainly a bad time to go and invoke something 11:14
nine Hm... sp_boxifnonzero_i? 11:17
Don't think that would play well with box/unbox pair elimination 11:18
I'll probably have to generate something like set(result_reg, result_type); if_i(temp_result_reg) { box_i(result_reg, result_type) }; 11:20
But of course a conditional means that I have to add a whole new BB 11:25