00:05 KDr2_m joined
MasterDuke timotimo: i have a hypothesis, that figuring out how to debug spesh+EVAL bugs cures the common cold 00:08
timotimo wow, i should try that! 00:09
sorry for being so unavailabel the recent days
MasterDuke i know, what am i paying you for !?!?! 00:11
timotimo yes, what indeed.
MasterDuke s/for// 00:12
but aside from the joking, and if you're up for it, any ideas? 00:13
00:14 KDr2_c joined
timotimo right, please bring me up to speed again, because my head is currently not able to concentrate 00:15
we were evaling what now? 00:17
MasterDuke well, to start at the beginning, i made this change: gist.github.com/MasterDuke17/5d63c...b78bc65c66 00:18
timotimo ah, we were making div faster?
MasterDuke yep
(which it was, slightly)
but some tests broke
timotimo ok, and those had eval in them? 00:19
MasterDuke when running a `make spectest` or `make <the test file>`
yep
and i got really confused, because the tests worked on the command line
when i ran what was being EVALed
the particular tests were for ceil, floor, trunc, etc. (which all use div under the hood) 00:20
timotimo is it using eval_lives_ok? 00:21
MasterDuke IOninja++ figured out it was a spesh/JIT thing. disabling either made the bug go away, but not disabling just the more specific spesh options
timotimo OK, yeah
MasterDuke no, getting the result of the EVAL and doing an ok() on that 00:22
timotimo mhm
MasterDuke so i've done MVM_SPESH_LOG of before and after my change, but the logs are large and i don't know how to read them/what to look for
timotimo they are extremely large, yes 00:23
i've been meaning to write a tool that diffs them properly by picking the log apart into chunks and giving them a canonical ordering
so you can actually see what's what
MasterDuke and another interesting thing, when doing an EVAL in a loop from the command line, it takes several iterations before the result changes
timotimo that also requires more output from the spesh log
right, spesh runs on what it thinks is "hot code" 00:24
i once put in a flag "SPESH_NODELAY" which would make it run for cold code, too
it caused rakudo to not even be able to start before it crashes and burns ;)
MasterDuke right, but what i thought was weird is that the test isn't running all that many iterations
timotimo spesh isn't perfect, that much is clear ;(
MasterDuke but it always happens with the test
timotimo if the div thing gets called from a bunch of places that are similar it'll be considered hot 00:25
MasterDuke ah, of course 00:27
timotimo for determining how hot a piece of code is, it'll consider calls to the same routine as "one counter" if their "callsite" is equal 00:28
callsite includes things like "how many arguments", "which named arguments", "any native types?"
MasterDuke interesting, good to know 00:29
timotimo that's also the little thing it always spits out at the beginning of a section of the log
okay so i apply your patch, what's next? which test to run? 00:30
MasterDuke 'Callsite 0xf44a90 (3 args, 3 pos) Positional flags: obj, str, obj' this?
timotimo yeah
MasterDuke t/spec/S32-num/rounders.t
timotimo doesn't let me apply the patch right now 00:32
seems like i have to do it manually?
patch unexpectedly ends in middle of line
what.
but it looks like it applied fine, so yay 00:33
rakudo built 00:35
MasterDuke dunno, i just copied the `git diff` output
timotimo should be okay 00:36
# Failed test '(-0.1).truncate == 0'
# at t/spec/S32-num/rounders.t line 88
it should look something like that?
MasterDuke yep
timotimo so what confuses me is this 00:39
turning the jit off fixes it
so we must be compiling something wrong?!
MasterDuke compiling?
timotimo yeah, you know, actually writing x86_64 binary code 00:40
MasterDuke not good
timotimo maybe it's easy. but my x86_64 assembly knowledge is quite limited 00:41
00:41 vendethiel joined
timotimo especially when it comes to the FPU 00:41
i'll sprinkle some debug statements
MasterDuke heh, mine is almost completely limited. don't think i've ever written any x86* assembly 00:42
timotimo another question:
MasterDuke i've read a tiny bit, and written a tiny bit of MIPs for a class, but that's it
timotimo why does a patch to Int.pm cause trouble with methods from Num.pm? :) 00:43
MasterDuke they call div, maybe there's no Num.div (i haven't looked)?
no `method div` in Num.pm or Numeric.pm 00:44
timotimo well, here's a case where ceiling on a Num fails
MasterDuke ah, there is is 'proto sub infix:<div>' in Numeric.div 00:45
but then a comment: # rest of infix:<div> is in Int.pm
timotimo right
i mean
file boundaries mean nothing really
but still
ceiling begins to fail when you change div, but ceiling definitely doesn't use div 00:46
00:46 pyrimidine joined
MasterDuke ah, right, Num.ceiling just calls nqp::ceil_n 00:47
timotimo yup
MasterDuke interesting, only Real, Cool, and Complex have truncate() 00:49
timotimo changing the contents of the ceiling method in Num.pm makes the bug disappear for the one(?) ceiling test that used to fail 00:50
of course changing the size of a function like i just did makes it a whole lot bigger
which makes it less likely to be inlined and such 00:51
i don't even see ceil anywhere in the jit?!
MasterDuke i'd MVM_SPESH_LOGged a truncate() call, but no ceil there 00:53
timotimo ugh. ugh. ugh.
"ceil" doesn't appear in the jitlog *anywhere*
maybe because my changes prevented jitting in the first place?
timotimo tries again 00:54
(without my added code)
i'd expect the ceiling method to be bailed from jitting because ceil_n isn't implemented
which also means that the jit can't be responsible here ... ?!?! 00:55
okay, the ceiling method doesn't even get considered for jitting 00:56
MasterDuke well, it can't be only the jit that's responsible if disabling spesh also fixes it, right?
timotimo disabling spesh also disables the jit
MasterDuke ah 00:57
timotimo asdfasdfasdf 00:58
MasterDuke anything i could try in parallel? 01:01
timotimo i'd like to have some cooked dinner :S 01:03
This type cannot unbox to a native integer: P6opaque, Slip 01:04
in block <unit> at tools/build/create-moar-runner.pl line 10
fantastic
oh yeah 01:05
MasterDuke you made some change?
timotimo i straight-up broke div completely %)
by having it no longer return the result 01:06
so that's fun :) :)
01:07 ilmari[m] joined
MasterDuke huh, div is used during a `make install`? 01:08
timotimo not sure what file it actually was trying to compile 01:09
-- expected to get -1 for -1 div 2, but got 0
you'll have to answer for this
MasterDuke ? i get that locally 01:11
timotimo gist.github.com/timo/57a5e93c21d6c...ead1c5ff4a 01:12
-- expected to get -1 for -1 div 10, but got 0 01:13
that's kinda weird
m: say -1 div 10
camelia -1
MasterDuke `./perl6-m -e 'say -1 div 2'` gives -1 01:14
timotimo i'm not sure if isbig_I is actually a good thing to have at all 01:15
but the values here aren't really big at all 01:16
i mean the test values we're dealing with
MasterDuke you mean isbig_I is not a good thing ever, or with the optimization i was attempting? 01:17
timotimo maybe even ever ...
MasterDuke why's that? 01:18
timotimo i don't remember writing that code, but it does say "somebody please check ..." 01:20
MasterDuke not suspicious at all 01:21
timotimo never returning "not big" from the true branch in there makes everything work
MasterDuke wonder if it's at all related to the mp_get_int64 problem
timotimo which one is that? 01:23
MasterDuke we can store -(2**63) in a native, but not 2**63 (because 2's complement)
timotimo right
it's still giving a bunch of "it's not big" results 01:24
MasterDuke i've had some conversations with nine and jnthn about it recently, and been playing around with trying to fix, but this really isn't my area of expertise 01:25
you're giving it "big" numbers?
timotimo no, it's just running the test file 01:26
right now with the true branch just unconditionally returning 1, it'll just tell you if the Int is stored internally as a 32bit integer
i must have at one point understood the internals of the mp_int struct 01:28
to write that code ...
MasterDuke `/* the infamous mp_int structure */ typedef struct { int used, alloc, sign; mp_digit *dp; } mp_int;` 01:29
right from 3rdparty/libtommath/tommath.h
timotimo yeah 01:31
but also, mp_digit is allowed to be different sizes
based on what you #define
hm. having the is_big based on mp->used alone is also b0rked 01:32
01:32 agentzh joined
timotimo like, the other if in there is an extra condition under which it can give you "it's not big" 01:33
oh, hold on, that's wrong
it's still puzzling to me :) 01:34
i still don't get why your patch would cause these other things to asploded 01:36
why exactly is it using div for those things in the first place 01:37
maybe it happens during parsing? could that be possible?
i could output a backtrace, that's what i could do
MasterDuke oooh, interesting idea, could parsing be at fault 01:38
timotimo oh 01:39
did we realize that many of these tests are actually using Rat?
ah, they're supposed to do some rats, yeah
and rats totally do use div for a lot of stuff
MasterDuke oh wow, even for +/- 01:40
timotimo yuppers
i think the mystery is getting resolved little by little 01:41
MasterDuke ah, and in Rational.(floor|ceiling)
and Rational.new 01:42
timotimo i really am feeling a little bit better 01:44
MasterDuke ha. hard to bottle this though 01:45
timotimo i still have no good theory as to why the div results only b0rk when jit is enabled, though. 01:46
MasterDuke i find it hard to understand that repeated calls with the same "small" number fail 01:48
01:48 pyrimidine joined
timotimo what exactly? 01:48
MasterDuke i could sort of see how there might be problems if we first called it with "small" numbers, such that only the "not isbig_I" branch was taken, and then it failed with a "big" number 01:49
i.e., the JIT code somehow thought div_i was only ever going to be called, not div_I conditionally 01:50
timotimo the jit also just calls the same function that the interpeter calls 01:51
and i see no obvious problem with the way it generates the call
do you think we can get better code if we use istrue_I(b) instead of just b inside the if's first branch? 01:53
MasterDuke huh, don't think i've ever used istrue_I
don't see it in the nqp ops doc 01:54
timotimo at the moment the code is using unless_o
which is "virtual"
i.e. whenever it's called it'll first try to figure out what kind of object it is, and in what way you figure out the truthness of the type in question 01:58
MasterDuke i made it `nqp::istrue(b)`, but same results
timotimo well, that's also a virtual one
hm. there's actually no istrue_I?
it's bool_I 01:59
MVM_bigint_bool is also theoretically a candidate for a direct jit implementation in assembly 02:01
it's a very small function, so the function call overhead would be noticable
probably something for the exprjit, though :)
MasterDuke same with nqp::bool_I 02:02
timotimo that's a performance optimization; did you measure run time or something? :)
i mean, since the test uses EVAL a bunch, there's probably a crazy amount of overhead
MasterDuke ha, no, just count of errors
timotimo i don't see why the code should continue using EVAL, since we have indirect method call syntax 02:03
i.e. instead of EVAL "myobj.$methodname()", we can literally myobj."$methodname"()
MasterDuke pretty sure that's a very old test file
timotimo right
should we modernize it? 02:04
it currently runs in about 1.8s on my machine
if we use indirect method calls, i'd expect it to run in like 0.5s
MasterDuke don't see the harm 02:06
timotimo you wanna try it, or should i?
MasterDuke go for it, you know what you have in mind 02:07
timotimo i'll try
i'm a little bit confused by the code actually 02:09
oh, "$type" isn't meant to be a type, like Int, it's the sub it's trying to use 02:10
so the first loop does floor($foo), the other loop does $foo.floor()
MasterDuke ah, i hadn't noticed that distinction either 02:11
timotimo oooh 02:12
there's also values like "-0.499.Num"
honestly i don't know why it'd be like that, though? 02:13
like, i could just put the values in the list of tests like that?
MasterDuke i don't know why not 02:14
timotimo right ..
MasterDuke i mean, the point of this file isn't really to test parsing... 02:15
timotimo right
only got it down to 1s though 02:16
kind of disappointing 02:17
well, 0.9s
but ram consumption is way down
MasterDuke 50% of the runtime is a nice improvement
timotimo used to be like 126meg, now it's 90meg
MasterDuke btw, did you see that heaptrack app i mentioned? think you would find it interesting 02:18
timotimo i saw, i didn't try it yet 02:19
the output you posted was kind of not that interesting
as it just says "this fixedsize allocator, it's allocating a bunch of memory!"
but it'd be more interesting to know what uses the fsa to allocate what kinds of stuff
not sure if we can teach that tool about our multiple allocators 02:20
MasterDuke no idea. that screenshot was just of the summary tab, it does have a bunch more info
timotimo it's also doing the "get stuff out of the hash" in a very roundabout way 02:21
MasterDuke oh yeah, i checked, .[] works now 02:22
and has for all build the *ables know about
i think that comment is from the pugs times
timotimo yeah, but also:
we grab the keys and sort 'em
then we pull the values out of the hash with access
rather than iterating over .pairs or .kv 02:23
MasterDuke whoops, i gotta afk for a bit, will be back though
timotimo using .kv, then .sort, that's a recipe for ... fun :D
oh wow 02:27
--profile says the code ran for only 73ms
so the majority of the time seems to be in parsing and optimization i suppose
Stage parse : 0.677
the --profile-compile tab is quite busy %) 02:29
crashed, yay. 02:34
was it you who made the sql version of our profiler? 02:35
i mean the output format, not actually something that uses the sql data
Geth MoarVM: 152337ab0c | (Timo Paulssen)++ | src/math/bigintops.c
throw out flawed parts of bigint_is_big

this caused trouble for an optimization of the div infix in rakudo that caused t/S32-num/rounders.t to fail in mysterious ways.
02:38
samcv good * 02:49
timotimo greetings samcv
how are you today?
samcv good
just had food
timotimo glad to hear
i'm now sick 02:51
a very good german satire site recently had an article about a women who wanted to go through childbirth in order to find out for herself how bad a man-flu is
didn't translate that very well
samcv what is man-flu
timotimo it's when a man has the flu 02:52
samcv is that different from normal flu lol?
timotimo it's separate from woman-flu or basically-anybody-flu because men tend to be really whiny when they get a flu
samcv lol.
timotimo and so the meme is that man-flu is a really terrible disease 02:53
samcv oh i am sure. millions get it every year
timotimo i don't think i have an actual flu, just a cold maybe. but damn i feel bad
samcv probably an epidemic
aww :(
timotimo i'm not supposed to suffer this much from a sickness this trivial 02:54
anyway, you up for coding today?
samcv yes
timotimo "git pull" latest UCD
samcv :)
timotimo hm, what code was i supposed to write again 02:56
the code in C to get from codepoint to its name?
samcv yeah
the name code hasn't been touched in a while
so it's basically as it was before
--names-only to only make names
timotimo good good
any reason to download-ucd again? 02:57
samcv like the files from unicode.org? nope
timotimo TIMER UnicodeData 23.2968431 seconds 02:58
X::TypeCheck::Binding exception produced no message
in method saw-line at /home/timo/perl6/ecosystem/UCD/lib/seenwords.pm6 (seenwords) line 15
hum.
Registering binary properties: Any, Bidi_Mirrored … 02:59
^- that looks wrong
samcv got an exception?
naw that happens
ignore that
also curious about the exception.
timotimo that's Generate_Name_List
inside get_shift_levels
samcv oh crap 03:00
not sure when that happened.
i see it on travis
timotimo where it does saw-line for the $s
samcv lemme see the last change i made 03:01
was a month ago
investigating now
MasterDuke timotimo: yeah, i did the sql stuff 03:02
timotimo did i give you a good direction for what to do next?
to fix the problem i was having?
MasterDuke that moar commit fixes the div problem?
timotimo it ought to 03:03
MasterDuke well, i remember you said change the `// 'NULL'`s to `// 0`
timotimo right, that was the easiest part
you know about NULL in SQL? it's quite ... special
MasterDuke but then you said something about foreign keys
yeah, there be dragons
timotimo yeah, foreign keys is not that important 03:04
it'd probably be enough to have more descriptive field names
like, there's an id field in callee that tells us what the id of that particular callee is, there's one that links the callee to the table that has routine name, filename, and line number 03:05
and one that tells us which entry in the callee table is our parent
samcv uh timotimo it might be flapping
timotimo i found it a little hard to figure out what was what
samcv on travis it fails and doesn't fail like every other build or something
MasterDuke sure. i wanted to keep things as close as possible to the json initially for ease of comparing to make sure i did things correctly, but it doesn't have to stay that way 03:06
timotimo rebuilds rakudo with a more verbose error there 03:08
m: "foo-bar baz".split(["-", " "]);
camelia ( no output )
timotimo m: for "foo-bar baz".split(["-", " "]) -> $line { }
camelia ( no output )
timotimo m: for "foo-bar baz".split(["-", " "]) { } 03:09
camelia ( no output )
timotimo m: for "LESS-THAN SIGN".split(["-", " "]) { }
camelia ( no output )
timotimo m: for ^1000 { for "LESS-THAN SIGN".split(["-", " "]) { } }
camelia ( no output )
timotimo weird.
oh, rakudo compiles so slowly because my moar is --optimize=0 03:10
Nominal type check failed for parameter 'one'; expected Any but got BOOTIntArray 03:12
this could be golfable and RTable 03:14
m: for ^1000 { for "LESS-THAN SIGN".split([" ", "-"]) { } } 03:15
camelia X::TypeCheck::Binding exception produced no message
in block <unit> at <tmp> line 1
timotimo there we go.
m: for ^1000 -> $time { for "LESS-THAN SIGN".split([" ", "-"]) { }; CATCH { say $time }}
camelia 0
X::TypeCheck::Binding exception produced no message
in block <unit> at <tmp> line 1
timotimo it immediately fails, too
m: for ^1000 -> $time { for "LESS-THAN SIGN".split([" ", "-", "A"]) { }; CATCH { say $time }}
camelia ( no output ) 03:16
timotimo m: for ^1000 -> $time { for "LESS-THAN SIGN".split([" ", "A"]) { }; CATCH { say $time }}
camelia 0
X::TypeCheck::Binding exception produced no message
in block <unit> at <tmp> line 1
timotimo so basically if we have an occurence of needle 0 after an occurence of needle 1, it'll try to swap the values around inside the mergesort impl
and that goes asploded
samcv ah so that's what's causing the problem?
timotimo yup. 03:17
samcv yay finding bugs
timotimo deep deep deep inside the bowels of rakudo :)
you want to do the honors?
samcv of fixing it? lol. not really :P
timotimo no, RTing it
samcv ah. you should RT it. i think you understand more what's causing it and can write something better than I
timotimo ok, maybe 03:18
samcv oh lizmat broke it a day ago github.com/rakudo/rakudo/commit/9d...29a8af0cc1 03:19
see bisect in #perl6-dev
timotimo very interesting that it failed in your travis a few times?
yes, i saw
samcv i think i have it set to nom
timotimo does the travis log show the rakudo (and others) revision used?
or is it just "nom"?
i mean, you set it to nom, but does it output the exact version somewhere?
maybe it was ok, broken, ok, broken 03:20
and we just found the last time it brokened
samcv This is Rakudo version 2017.02-156-g2cf9b53 built on MoarVM version 2017.02-18-g5f9d698
03:21 vendethiel joined
MasterDuke timotimo: interesting, now my changes to div don't make it any faster 03:25
timotimo what are our changes like now? 03:26
Use of uninitialized value of type Str in string context. 03:28
Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful.
in method done at /home/timo/perl6/ecosystem/UCD/lib/EncodeBase40.pm6 (EncodeBase40) line 52
Use of uninitialized value $!to-encode-str of type Str in string context.
Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful. 03:29
in method done at /home/timo/perl6/ecosystem/UCD/lib/EncodeBase40.pm6 (EncodeBase40) line 52
samcv: ^ get this, too?
samcv yeah ignore that
timotimo haha :D
samcv i fixed that tho if you pull
was a harmless problem but better to reduce warnings
timotimo OK 03:30
my fix for the exception message didn't work 03:31
03:32 pyrimidi_ joined
timotimo i actually think i'll try going to bed soon-ish 03:33
i'm already feeling noticably better than last time i laid down
samcv kk 03:35
timotimo but i'm now very hungry apparently
03:44 KDr2 joined
MasterDuke timotimo: i'm testing the same changes as before (with this `use nqp; my $a = -1; nqp::while(nqp::islt_i(++$a, 5_000_000), ($ = $a div 17))`) 03:49
and now the unmodified div is faster 03:50
also, using nqp::bool_I in my changed version is slightly slower
timotimo huh
huh!
MasterDuke 1657ms vs 1740ms 03:51
timotimo can you send over a spesh log? 03:52
actually, maybe i'll take the diffs
MasterDuke you want the diffs of spesh logs between the change with nqp::bool_I and without? 03:55
timotimo oh, no 03:56
the diffs for the code
MasterDuke same as the gist i linked earlier 04:00
timotimo OK, good 04:01
MasterDuke i just also tested with `nqp::bool_I(b)` instead of `b`
timotimo i'll go sleep now, but maybe i'll look into that s'more 04:26
it could be of course that spesh was already turning that thing into essentially bool_I for us
and using bool_I gave us the bool_I, but also a "if_i" on top of that? 04:27
that's possible
anyway, seeya!
MasterDuke later... 04:30
06:00 pyrimidine joined 06:38 brrt joined
brrt good *, #moarvm 06:48
07:10 KDr2 joined 07:40 domidumont joined 07:56 brrt joined 08:21 ilmari[m] joined 08:36 zakharyas joined
samcv good morn-er * 09:08
09:50 pyrimidine joined
jnthn morning o/ 09:59
10:02 brrt joined 10:13 brrt joined 10:29 brrt joined 10:34 zakharyas joined
dogbert17_ very silent around here 10:43
IOninja blasts www.youtube.com/watch?v=vfu9UBsPAxs 10:53
dogbert17_ indeed shouldn't IOninja be asleep at this time? 10:54
IOninja 6am. Just woke up
11:13 pyrimidine joined
brrt yeah, there's $dayjob issues to take care of 11:19
12:02 pyrimidine joined
dogbert17_ jnthn, are you around? 12:07
jnthn About to go have lunch :) 12:08
dogbert17_ do you think this will work? gist.github.com/dogbert17/fd8f2ca8...c5deb87871
dogbert17_ multithreading is not my speciality :) 12:09
jnthn Looks OK 12:10
I'd be a bit surprised if it hit :)
dogbert17_ t/spec/S19-command-line/repl.rakudo.moar .......................... ok
===( 0;293 13/17 12/13 3/335 1/52 0/? 0/?)===tc's are equal
jnthn Hmm 12:11
dogbert17_ indeed
jnthn o.O
How on earth... :-)
dogbert17_ maybe something to contemplate over lunch :)
jnthn Aye
Talking of which, bbiab
timotimo falls out of bed 12:19
dogbert17_ timotimo, time to take care of ENOCOFFEE then :) 12:21
timotimo so we're basically failing to account for reentrant usage of the decoder, or perhaps we're throwing an exception or otherwise leaving the decoder's single-user section without clearing the bit? 12:22
MasterDuke: it occurs to me that the div improvement can only really help if it prevents bunches of boxing/unboxing. perhaps when your div returns an int, it's immediately turned back into Int by the caller? 12:23
dogbert17_ timotimo, yes something fishy is definitely going on 12:35
timotimo i wonder if it's sane to create watchpoints whenever the decodestream is entered 12:36
but you can't "break when some code is not run" 12:37
jnthn timotimo: Reentrant use is in theory impossible - the decoder does work then returns results 12:41
Though it can throw exceptions in some cases which we'd not account for 12:42
But that in turn would mean the decoder is useless from then on
timotimo right ... 12:43
jnthn And anyway, we'd probably see those exceptions
timotimo probably
dogbert17_ so what's going on, is my code borked? 12:46
timotimo i haven't the slightest 12:49
IOninja Wasn't following the discussion, but I see mention of t/spec/S19-command-line/repl.t .... that test file can give false negatives on slow boxes. Set ROAST_TIMING_SCALE=2 or higher numbers to make the tests wait longer before assuming stuff hanged. 13:03
13:04 pyrimidine joined 13:09 pyrimidi_ joined 13:10 pyrimidine joined
dogbert17_ ok ultrastupid question: do the calls MVM_string_decodestream_get_until_sep_* here have to be protected? github.com/MoarVM/MoarVM/blob/mast...der.c#L246 13:35
jnthn No, those are immutable after decoder initialization 13:37
(Also, not ultrastupid :))
dogbert17_ thx, I was wondering because of this: github.com/MoarVM/MoarVM/blob/mast...ile.c#L145 13:38
13:53 KDr2 joined 13:55 KDr2 joined 14:04 brrt joined 14:12 MasterDuke_ joined
MasterDuke_ timotimo: even though you made a fix in github.com/MoarVM/MoarVM/commit/152337ab0c, there still is a bug in the JIT, correct? 14:14
and if so, doesn't brrt have a JIT bisect tool?
timotimo only for the exprjit 14:16
at least i think so
14:16 pyrimidine joined
brrt yeah, it only works for the expr JIT 14:16
timotimo oh hey brrt 14:17
brrt hey timotimo
i lurk :-)
it'd be interesting to make it work for non-expr jit, though 14:18
MasterDuke_ ha, so i was technically correct (the best kind), but that still doesn't help us 14:19
brrt: is that a 5min or 5day job? 14:23
14:50 zakharyas joined 14:57 pyrimidine joined 15:08 ggoebel joined 15:28 brrt joined
brrt .tell MasterDuke_ it's a one day job 15:29
yoleaux2 brrt: I'll pass your message to MasterDuke_.
brrt but the question is to figure out which piece of code breaks 15:40
and then, if you have that, it's probably an issue of figuring out which instruction makes that code break 15:41
which is a bit more difficult because the 'lego' JIT has no fallback method like the expr JIT has
timotimo hm 15:42
can't the lego jit just say "oh, errr, i gotta deopt now!"
jnthn Deopt points are explicit thing 15:44
*things
e.g. we have a mapping table set up at the time we produce bytecode
timotimo mhh 15:46
i expect the exprjit falls back to the lego jit when it hits the bisection point? 15:47
15:56 pyrimidine joined 16:11 brrt joined
brrt timotimo: yes 16:12
timotimo right. the lego can't do it
16:31 ZofBot joined 16:50 pyrimidine joined
brrt well, it could, with sufficient additional hacking 16:50
i can't recall how i wanted to resolve my conflict bitmap… 16:51
17:01 pyrimidine joined 17:09 pyrimidine joined 17:22 ZofBot joined 17:24 pyrimidine joined 17:36 d4l3k_ joined 17:40 domidumont joined 17:41 moritz_ joined 17:43 camelia joined 17:50 moritz joined 17:56 pyrimidine joined 19:06 zakharyas joined 19:24 agentzh joined 20:12 pyrimidine joined 21:31 pyrimidine joined 21:43 ggoebel joined 21:55 agentzh joined 22:08 pyrimidine joined
MasterDuke .tell brrt fyi, if you're interested in the JIT bug, there's a bunch of discussion here: irclog.perlgeek.de/moarvm/2017-03-03#i_14196620 23:07
yoleaux2 MasterDuke: I'll pass your message to brrt.
MasterDuke timotimo: i think i was just hoping that div_i is so much faster than div_I, that it was worth a bit of effort (e.g., conditionals, boxing/unboxing) to try and use it when possible 23:10
23:17 pyrimidine joined