timotimo | sadly, the unbox optimization i made yesterday breaks code, for example during the rakudo build | 00:01 | |
fun, a segfault | 00:08 | ||
Geth | MoarVM/return_from_inline_without_log_exit: 9e7bc311a7 | (Timo Paulssen)++ | src/core/frame.c profiler: make sure returning from inlined frames gets logged it was possible for an optimized return (the kind that works without building an actual exception object) to leave inlined portions of code without signalling to the profiler that a frame was in fact left. This led to call graphs that had copies of the same routine nested very deeply inside of itself, making the call graph rather useless and the profile files rather gigantic. |
00:19 | |
timotimo | here's the code, please feel free to test it on random code snippets and see if it crashes like it does in the spec tests ... | ||
Geth | MoarVM/make_unbox_removal_available: ae809b9b0d | (Timo Paulssen)++ | src/core/frame.c profiler: make sure returning from inlined frames gets logged it was possible for an optimized return (the kind that works without building an actual exception object) to leave inlined portions of code without signalling to the profiler that a frame was in fact left. This led to call graphs that had copies of the same routine nested very deeply inside of itself, making the call graph rather useless and the profile files rather gigantic. |
00:21 | |
MoarVM/make_unbox_removal_available: 5f842ddd39 | (Timo Paulssen)++ | src/spesh/optimize.c follow "set" ops in search of box source |
|||
timotimo | oh no what have i done | ||
MoarVM/make_unbox_removal_available: 22017391cc | (Timo Paulssen)++ | src/spesh/optimize.c follow "set" ops in search of box source |
00:22 | ||
timotimo | only that one commit was supposed to be in there | ||
Geth | MoarVM: fc7da5c770 | (Timo Paulssen)++ | src/core/bytecodedump.c fix bytecodedump to understand inlines it used to look at the right num_locals, but read from the wrong local_types, which is a shorter array if a frame has other frames inlined into itself, thus reading unrelated memory. |
00:26 | |
MasterDuke | is that commit to master unrelated to return_from_inline_without_log_exit? | 00:35 | |
timotimo | it is | 00:36 | |
just debughelper fixes | 00:37 | ||
MasterDuke | ah, ok | ||
that script dogbert17 had that created a 41mb profile now creates a 94k profile | 00:47 | ||
timotimo | nice. | ||
MasterDuke | same with your hyper/race is-prime code? | 00:50 | |
timotimo | didn't test yet | ||
Geth | MoarVM: 15b4b9fb3e | (Samantha McVey)++ | src/strings/ascii.c Fix compiler warning by explicitly casting to MVMuint8* Cast to MVMuint8* since the compiler shows a warning when trying to assign a char* to an unsigned char * |
01:12 | |
01:56
ilbot3 joined
05:15
domidumont joined
06:01
domidumont joined
06:44
robertle joined
07:39
AlexDaniel joined
08:07
undersightable6 joined,
zakharyas joined
08:18
zakharyas joined
09:23
zakharyas joined
10:03
zakharyas joined
|
|||
timotimo | none of the test files crash if run with perl6 --profile, just when i have to make ./perl6-m also use --profile because the harness won't let me put it in there another way | 10:17 | |
10:18
zakharyas joined
10:25
zakharyas joined
11:23
ggoebel joined
12:30
travis-ci joined
|
|||
travis-ci | MoarVM build failed. Samantha McVey 'build this branch' | 12:30 | |
travis-ci.org/samcv/MoarVM/builds/359292966 github.com/samcv/MoarVM/compare/7e...4ec787ed46 | |||
12:30
travis-ci left
12:42
undersightable6 joined
13:09
zakharyas joined
13:25
ggoebel joined
13:28
zakharyas joined
13:31
zakharyas joined
13:44
zakharyas joined
14:22
zakharyas joined
15:21
zakharyas joined
15:53
robertle joined
16:26
AlexDaniel joined
|
|||
lizmat is puzzled: 'for ^10000000 -> int $ { }' doesn't allocate *any* Ints | 16:31 | ||
but 'use nqp; my int $a = 40; for ^1000 -> int $ { nqp::isgt_i($a,$a) }' allocates 1000 Ints | |||
is this somehow an artefact, or is there really something strange going on here | 16:32 | ||
ah, it looks to be an artefact: | 16:34 | ||
use nqp; my int $a = 40; for ^1000 -> int $ { nqp::if(nqp::isgt_i($a,$a),nqp::null) } # doesn't allocate | |||
so I guess the lack of nqp::if somehow caused an Int to be made before being sunk | 16:35 | ||
timotimo | yeah, it probably has .sink called on it, but native ints aren't objects, so it boxes first to try the method | 16:37 | |
16:38
domidumont joined
18:27
undersightable6 joined
18:45
FROGGS joined
|
|||
japhb | Maybe there's value in detecting that case (attempt to .sink a native) and specifically don't do that? | 19:49 | |
timotimo | yeah, that'd be nice | 19:50 | |
hum, this control flow be tricky | 19:58 | ||
oh, also, i think i might have only implemented one half of the stuff i was supposed to :D | 19:59 | ||
brrt, under what circumstances can i be sure that tc->interp_cur_op is an accurate depiction of where in the program we are? i'm currently asking mostly about when throwpayloadlexcaller and friends would be called | 20:21 |