01:32 FROGGS_ joined
sergot morning o/ 06:12
06:47 FROGGS joined 07:06 zakharyas joined
jnthn o/ 08:57
09:04 moritz joined
timotimo morning 09:17
moritz moarning 09:19
09:27 lizmat joined
jnthn moaning 09:28
09:29 nebuchad` joined 10:08 FROGGS joined
timotimo did brrt say he'd have a 4-day-weekend? 10:20
jnthn Not that I remember. Well, he was about here on Friday at least. :) 10:22
11:28 brrt joined
brrt \o 11:28
jnthn o/ brrt 11:30
brrt wow, timotimo++ 's been busy
do you happen to know if pop_o and pop_s etc... are invokish? 11:31
jnthn No, they're not 11:32
REPR ops can never invoke
brrt ok, awesome
jnthn That's a 6model design rule for a long time :)
(Which serves us nicely :)) 11:33
brrt yes, it does, certainly here 11:34
brrt is trying to renember which ops were in fact invokish
smrt_*ify at least
jnthn if_o, unless_o, smrt_*, istrue, isfalse, decont, assign, assignunchecked 11:36
brrt only these?
jnthn Well, those stand out to me glacning oplist 11:37
*but*
A bunch of ops can also throw exceptions.
timotimo brrt: i've got beginnings of a getattr_s patch, but i don't have a way to express "pass the nth literal string from the current compunit's literal table"
it'd be nice if i could just dereference the address of that string at jit time, because i *think* that table cannot move
brrt hmm
jnthn And exceptions will need some pondering. 11:38
brrt /if/ it cannot move, you can just pass the pointer in a literal
otherwise, i might need / want to add options to callarg
brrt nods wrt to exceptions
timotimo how do i properly pass that pointer?
when i said i'd just use the litearl int64 argument type, diakopter warned that some architectures have different sized pointers 11:39
brrt i think the callarg structure is a union of { ptr, num64, int64 }
timotimo so it'd be good if the jit had a way to differentiate numbers from addresses on that stage
brrt true
it hasn't a pointer value in there, if you like you can just add a void * in the struct 11:40
the emitter will handle eventual differences
hmm wait, i may have a better idea
jnthn shop/lunch; bbiab 11:42
timotimo preparing for departure first 11:43
brrt: do you want my patch so you can massage it into a workable state?
in my newest assessment, ifnonnull turned up as the second most bail-causing op, following getattr_s 11:44
we'll probably see an "explosion of diversity" once those two are done :)
which may be a good thing ("we attempt to compile a whole bunch more diverse frames!") or a bad thing ("oh no, look at all these low-worth ops we'll have to take care of!")
oh, btw, it'd be fantastic for logging purposes if the "call a C function" nodes could be annotated with the original opcode and if that could be printed in the log 11:45
so that we can get proper "emitted opcodes" statistics from the log
brrt agrees 11:46
timotimo and rather than using a perl6 script, i suggest the use of grep "emit" | sort | uniq -c | sort -n
brrt oh, you can send a patch, yes
brrt had considered that, too :-)
timotimo gist.github.com/timo/84d595f301354393bdc0 11:47
it'd probably also be nice to merge master into moar-jit again, as we've recently got some decont -> sp_p6oget_o transformations in spesh done 11:49
i've been running a non-pushed merge of master into moar-jit locally and it still builds rakudo fine at least
AFK now :)
brrt ok, will do :-) thanks a lot 11:50
bbiab 12:03
12:09 zakharyas joined 12:28 jnap joined 13:32 carlin joined
timotimo brrt, i'd also be interested in a before/after master-merge comparison of decont bails 13:37
or rather: decont count in general
(for setting compilation or something like that)
13:42 brrt joined
brrt that's a prety good idea, yes 13:44
dalek arVM/moar-jit: 83a6629 | (Bart Wiegmans)++ | src/jit/ (4 files):
Add pointer values as literals in call args
14:14
arVM/moar-jit: 4d50b38 | (Bart Wiegmans)++ | src/ (7 files):
Add support for getattr_s

Based on timotimo++'s patch. Also added direct support for calling args with the a string based on the string index.
timotimo yay 14:20
14:30 colomon joined 14:40 woolfy left 14:41 woolfy joined
brrt :-) 15:06
timotimo for the weekly it would be fantastic to have an updated bail log for the core setting :\ 15:33
i suppose i'll have an outlet on the train and can compile and run stuff there no-problem
new most-bailing op: flattenropes 15:40
followed by ifnonnull, which i'm hoping brrt can implement very soon :) 15:41
dalek arVM/strref: f6b3ea8 | jnthn++ | src/strings/ops.c:
Fix variable names in asserts.
15:49
arVM/strref: c4cfd75 | jnthn++ | src/strings/ops.c:
Toss debug code.
15:50
timotimo how did that even build? :) 15:57
should i point out that the string refactor branch still breaks at least one benchmark?
or are you about to fix that? 15:58
nwc10 on jnthn.net/perl6/bench/2014-07-13.html some of those HEAD benchmarks seem to be within a factor of 8 or even 4 of Perl 5
timotimo nwc10: wasn't that only the microbenchmarks, though? 15:59
nwc10 possi bly
jnthn There's some where we even beat Perl 5... 16:00
nwc10 I'm not aware, I'm on a poor connection (and I've closed the page) and $more excuses
yes, I forgot to say. Some are already ahead
need some concurrency benchmarks :-)
We have a very dirty floor, thanks to 2 dogs, and so some concurenncy benchmarks would be very useful :-) 16:01
[maybe too subtle]
16:01 klaas-janstol joined
timotimo nwc10: you want to wipe the floor with perl5? :) 16:04
nwc10 aye.
timotimo sufficiently unsubtle :)
nwc10 more, I want the floor wiped. And I'd prefer an automated solution. 16:05
[Coke] nwc10++ for coming to the dark side.
nwc10 I'm playing both sides. :-)
timotimo :D 16:06
japhb_ I can't wait to see the benchmarks after strref merges. And my perl6-bench fixes from last night should cut out a lot of the noise in the data, too. 16:07
timotimo japhb_: er .. you're seeing the benchmarks after the strref merges there :) 16:08
japhb_ nwc10: I welcome a moving target for perl5 performance, as long as it's moving in the "faster" direction. :-) 16:09
timotimo: His stuff was from the branch, not after the merge. I've got a bunch of versions timed, so I want to be able to add the merged results into my histories and see how it looks. 16:10
jnthn Still need to decide whether to merge strref before or after 2014.07 release... 16:11
japhb_ Certainly after perl6-bench fixes, the history shows a much more reasonable improvement curve.
timotimo ah, of course.
jnthn I don't want a bunch of module regressions blocking a *
timotimo japhb_: is there a good explanation for why the lines on the left are exactly the same steepness?
japhb_ jnthn: if it can pass the spectests and the benchmarks, I'd love to be able to merge it. The improvements for end users will be huge.
Yeah, agreed about module regressions. :-( 16:12
jnthn japhb_: Well, release is on Thu
So it's not a long wait
japhb_ timotimo: explain?
jnthn: I meant I'd rather not have the users stuck waiting for mid-late August. 16:13
(Those of us actually working on it are probably all running a current build) 16:14
timotimo: Before my fixes last night, it was relatively common to have a couple of compilers whose run times on the left side of the graph were in the noise, and being pinned to the minimum run time (after subtracting startup/compile time). Thus when calculating rates, they ended up colinear. That's part of what I was trying to fix. 16:16
It should be much rarer now to see that. More likely you'll see plot lines missing the left end, or having fewer data points on the left end.
Damn plugged ears. Sudafed is NOT DOING ITS JOB. :-/ 16:18
timotimo ah, pinned to the minimum run time, that'd explain why they look the same
japhb_ timotimo: The initial version of the code was trying to avoid divide-by-zero. The current version is attempting to avoid lies. 16:19
timotimo that's an improvement
i still kind of wish our html output had a way to make all graphs have the same scale
japhb_ It can probably still be tuned a bit, but I wanted to see how other people's benchmarks looked before tuning further.
16:19 nebuchadnezzar joined
timotimo but i suppose our history comparison view is going to be much less problematic 16:20
japhb_ Some of the tests have VASTLY different scales.
Yes, history should help that a lot.
timotimo that's true :\
japhb_ Bus stop coming soon, bbiab.
timotimo in about 15 minutes i'll reach the next train station, too
so ... what do i do until then? :)
i think flattenropes looks like a quite simple thing to do 16:21
dalek arVM/moar-jit: ce5cf76 | (Timo Paulssen)++ | src/jit/graph.c:
implement flattenropes in the JIT.

pretty much every bail that was flattenropes is now a bail caused by graphs_s ...
16:29
timotimo jnthn: if the implementation of s_graphs is GET_REG(...).s->body.graphs, i should be able to turn it into a p6oget_s with offsetof( MVMString, body.graphs ), right? 16:31
jnthn timotimo: hmm 16:34
But that's changed in strref...
But yeah, that appraoch would work
It's called num_graphs now :)
japhb_ BTW jnthn, I'd like to see what the current version of perl6-bench run on Windows produces for plots ... I'm curious whether the tuning I did for my system (fast linux workstation) does the right thing on a Windows laptop as well. 16:37
Also, if any of your Windows fixes for perl6-bench are immediately commitable, please do -- I'd like to keep the "hand-managed" part minimized, for any other Windows users who might be interested. 16:38
16:45 brrt joined
kjs2 Hello all. Quick question - just cloned moarvm, trying to compile, but getting this error: src/moar.h:20:10: fatal error: 'uv.h' file not found 16:50
#include <uv.h>
perl Configure.pl completed successfully, Mac OSX platform. Just wondering if it’s just me. 16:51
… but compilation of the latest release (2014.06) worked well. 16:54
japhb_ kjs2: Have you run Configure? 16:56
kjs2 japhb_: Yes, success
brrt that's... odd
japhb_ (I'm guessing you don't have the git submodules checked out)
brrt Configure.pl ought to do that
kjs2 that’s what confused me. As said, when just “download”ing the latest release, it works well
brrt maybe run it again?
kjs2 i took the latest version from github. Maybe I should jsut stick with releases :-) 16:57
brrt i'm checking if the latest checkout of master Just Works as it ought to 16:58
ok, i'm waiting a pretty long time for 'Updating submodules' 16:59
timotimo kjs2: did you get it from the "releases" tab?
brrt but, i'm getting them after all
kjs2 timotimo: I downloaded the .zip file on github 17:00
timotimo yes
that's wrong
kjs2 that one failed (complaining about no uv.h)
timotimo i think we don't know how to turn that feature off
kjs2 but I realized it was easier for me to download it from moarvm.org
timotimo those are proper
kjs2 and that one works.
timotimo my seat is b0rken ;(
ah, just misconfigured 17:01
running Configure.pl again fixed it
17:41 brrt joined 17:43 brrt left, brrt joined 18:21 FROGGS joined 18:25 teodozjan joined
nwc10 jnthn: *only* spectest difference from MoarVM master appears to be t/spec/S16-filehandles/io.t 18:29
ok 81 - the bytes decode into the right Str
vs on branch
not ok 81 - the bytes decode into the right Str 18:30
# got: 'f??'
# expected: 'föö'
timotimo oops
nwc10 yes. needs more cowbell, er metal dots
18:32 carlin joined
timotimo p6oget_i isn't the right op at all to handle MVMString struct access, because it's for p6o's and not for MVMStrings %) 18:34
silly me
but using sp_get_i gives me trouble 18:35
but i did remove the offsetof MVMObjectStooge, data
[Coke] integration/99problems-51-to-60.t aborted 13 test(s)
timotimo remove the subtraction
nwc10 jnthn++ # pretty bloody good
timotimo i can only reach the Internet from my phone now 18:36
dalek arVM/moar-jit: a798a17 | (Bart Wiegmans)++ | src/jit/emit_x64.dasc:
Remove debug instruction
timotimo otherwise I would upload a patch
brrt! \o/ 18:37
brrt :-) that was a really simple patch
[Coke] started failing Mon Jul 7 18:33:12 2014
timotimo it's amazing how good networkmanager has gotten. 18:38
gist.github.com/timo/9369c4f53eecd40d60b4 - ideas? 18:39
brrt almost wanted to turn timotimo's appraisal of current networkmanager into cynical terms 18:40
timotimo how so?
i plugged in my UMTS stick, "edit connections" "new connection" "mobile broadband" "germany" "vodafone" "default" done 18:41
i plug in my phone, select "usb tethering" and five secodns later it's already connected and working
brrt i agrees
the cynical terms were about how bad it used to be
timotimo except now i'm inside a tunnel
and the connection has no right of working
why am i connected? o_O 18:42
maybe this tunnel has an antenna put into its roof or something
brrt that happens these days
what i'm very happy about is the large-font support on gnome these days 18:43
timotimo - you're trying to optimise graphs_s for spesh so it'll be jitted?
you can do that, but it seems better imho to add an 'accessor node' to the jit
that is to say, i don't expect a speed benefit by emitting a sp_p6oget_i or anything like that for an op like graphs_s, codes_s, etc 18:44
better to have the JIT say 'here's how to make a node that copies N bytes from the object pointed at in this or that register' etc 18:45
also note that sp_p6oget_ ops assume p6opaque structs, which have a perhaps little-known feature (namely, field indirection); the 'data' vector (which would normally be adjacant to the header) can be 'replaced' and be redirected 18:46
timotimo left the tunnel and the reception goes to hell 18:48
wtf %)
well, i did notice the thing about p6o_ ops
and the indirection
because it segfaulted in get_real_data :)
with "big font" you mean "HiDPI", right?
brrt no, i mean the little 'accessibility' button 18:49
timotimo it's fine to create a jit node for accessors
18:49 carlin joined
brrt had expected as much 18:49
just that some accessors are conditional (of the type foo ? foo : bar, or something like that) 18:50
timotimo i want multipath TCP now
brrt i'll get to that
time to fix networkmanager then :-p
timotimo i have to switch between vodafone and eplus every few minutes
i didn't implement a node for the jit because i have no idea how to work dasm
are you going to build ifnonnull soon? :3 18:51
brrt ehm... i /think/ jnthn said ifnonnull was invokish 18:52
and i'm working on the frame register refactor, which is kind of a prelude to the invokish ops
and, i'll be blogging about how to use dasm really soon :-) 18:53
timotimo ifnonnull is not invokish 18:54
it checks if the object pointer is a null pointer and if not if it's == VMNull
need to detrain in a few, then somehow get to the hackspace and get a jacket ...
ttyl :) 18:55
brrt oh, if that's so, i can do it swiftly 18:57
jnthn nwc10: Thanks. I can reproduce that one here. 19:00
nwc10 t/spec/S22-package-format/local.t fails on master in the same way.
jnthn timotimo: I think sp_get_i doesn't want th eheader subtracting, fwiw. 19:01
brrt: It's if_o and unless_o and istrue and isfalse that are the boolean-invokeys. 19:03
nwc10: Yeah, lizmat++ is actively hacking in that area, so guess it's some churn from that.
brrt: BTW, it occurs to me that we might want to mark ops as :invokey and :throwy in oplist and programatically deal with the issue 19:12
brrt concurs
throwy can jump arround frames too? 19:13
jnthn I've added various such things in the past; just git log update_ops.p6
brrt i see
jnthn Depends what you mean by "jump around frames" 19:14
In many ways it's worse than invokey
'cus it can jump within a frame also
FROGGS .oO( I've added various such things in the qast... )
dalek arVM/moar-jit: fe1315b | (Bart Wiegmans)++ | src/jit/emit_ (3 files):
Moved frame variable to callee-save register

The frame variable is accessed often, so it is a good candidate for a callee-save register (as this saves loads whenever it is used). Moreover, in invokish operators this will allow us to compare the cur_frame with the jit_frame so as to check if they really invoked.
19:27
brrt hmm i see
basically, that's what handlers are for, aren't they? 19:28
offsets into the bytecode stream
jnthn yeah
I expect spesh will be able to turn *some* local handlers in a frame into gotos...
But don't know that we want to rely on that. 19:29
One good news is that handlers always are new basic block starts... )
brrt that is good news 19:30
basic block starts are always labels in the JIT 19:31
(not sure how it could be otherwise, by definition of the idea 'basic block')
which means that if you know the handler the JIT knows the label and you /can/ translate it into goto's
of a sort
(and if you can lookup the handler at runtime, better yet!)
dalek arVM/moar-jit: bc4bb42 | jnthn++ | src/spesh/facts. (2 files):
Cope with cross-deopt-point usage analysis.

If a register gets used after a deopt point, give its usage an extra bump. This means we won't kill a write to it when doing dead code 0e15cb6 | (Bart Wiegmans)++ | src/ (6 files): Added frame ArgProcContext as C call interp var
This should fix checkarity, which it seems never worked because op_to_func return the function pointer to the regular non-jit version.
19:35
brrt (please dalek, it's a merge)
19:36 dalek joined
timotimo jnthn: i already removed the header subtraction from sp_get_i 19:44
jnthn timotimo: Did that fix it? 19:46
timotimo no 19:47
Unable to parse expression in method_def; couldn't find final ')' at line 16, near ") {\n "
ah, brrt merged master, good. 19:53
brrt rakudo built fast :-o
i mean, what's a good time for stage mast to build these days? 19:54
jnthn Lowest I've seen is around the 13s mark
brrt well, i've just hit 13.377 19:55
(a number which i'm not kidding about in the least)
timotimo cute :)
brrt i suppose the spesh helped
timotimo it would be nice if it did 19:56
btw, only graphs_s and codes_s are amendable to being turned into an access node
lizmat jnthn, nwc10: wrt to S22 errors: they only happen when run under make, not when just executing with "perl6"
brrt afaik, there are more :-), it's just that most of these tend to be access from the compunit or threadcontext or similar 19:57
lizmat it appears that trying to execute perll6-m in a shell (which is what the S22 when running under make does)
gives the error: Unhandled exception: failed to load library 'dynext/libperl6_ops_moar.dylib' 19:58
at <unknown>:1 (/Users/liz/Github/rakudo.moar/perl6.moarvm::303)
timotimo so it's not that useful to build a very generalised solution
brrt not yet, i agree 19:59
jnthn elems on a VMArray and VMHash also can happen that way
Though I think they already spesh to sp_get_i
timotimo ah, but only if they are nqp::list_i, right?
i don't think we have nqp::hash_i at all 20:00
brrt the advantage of 'access nodes' - eventually - is that you can do common-subexpression-elimination for them, and compile code that has fewer loads
timotimo i'm looking forward to eliminating repeated boxing/unboxing with escape analysis
like $foo++ will turn into an inc instruction even if $foo is a container'd thingie 20:01
well, that doesn't sound like a good idea, as boxed ints are immutable
but if we just new'd that int, we can fuddle around with that ... actually we can delay the new-ing until after the calculations
forget what i said
brrt hmm... smallish issue 20:14
can we call GC_SYNC_POINT /before/ branching away? 20:15
would that make a lot of difference?
jnthn Can you get a little more specific? 20:16
Like, is there soemthing in interp.c you're looking at?
timotimo we don't have to call gc_sync_point
unless we have an infinite loop that allocates
jnthn wonders if brrt is talking about this:
OP(goto):
cur_op = bytecode_start + GET_UI32(cur_op, 0);
GC_SYNC_POINT(tc);
goto NEXT;
brrt for example, yes
jnthn In which case no, it's not significant that we set cur_op before we call GC_SYNC_POINT 20:17
brrt why
:-)
jnthn You could swap the two around.
e.g. it could also be
OP(goto):
GC_SYNC_POINT(tc);
cur_op = bytecode_start + GET_UI32(cur_op, 0);
goto NEXT; 20:18
And work just as well.
The GC doesn't actually use the program counter
timotimo gc_sync_point is "this is probably a good spot to see if other threads have decided to gc"
iirc
brrt oh, i read 'it's not /in/significant', which is why i'd expect a dramatic conclusion
jnthn oh :)
brrt ok, then i'll move it to the front
jnthn Yeah, that'd kinda make it weird :)
brrt because otherwise i'll have to JIT a weird dispatch thing arround it 20:19
jnthn Anyway, timotimo was right about the point of it: making sure non-allocating tight loops don't go wild.
And prevent other threads GCing.
If you wanted to further optimize it, you could only emit it on backbranches.
timotimo right, we rely on another thread being marked as "blocked" or reaching a gc sync point soon enough 20:20
but we can't pretend a piece of jitted code "blocks" a thread except if it is absolutely certain that it won't allocate
jnthn (Since no backbranch = no loop)
timotimo and then it must not leave the jitted code without checking for simultaneous gc runs
jnthn puts aside $dayjob-stuff for the day 20:21
...and wanted to take a stroll but...rain. :(
brrt what are umbrella's for :-) 20:22
brrt ponders the backbranch stuff... i'm not sure i can guarantee that bb's are numbered in a linear-consecutive fashion, or in other words, i can't prove bb's from a loop yet
hmm
what would be the sizeof of A0_t in x64
jnthn 64 bits 20:24
brrt indeed :-) that's good news for me 20:25
jnthn Where do you find the AO_t, ooc?
timotimo is that related to atomicness with regards to certain operations?
brrt gc_status
jnthn yeah
Ah...
brrt tc->gc_status is A0_t
jnthn Right
brrt which means i must cmp it but know the size
jnthn GC_SYNC_POINT does not, thankfully, look at it atomically :) 20:26
timotimo aye, it's okay to accidentally miss a beat 20:27
brrt thankfully, indeed 20:32
hmm... that's weird 20:35
if i add ifnonnull as an op, i get lots of 'use of unitiialized value of type Nil in numeric context' errors
timotimo in that case your ifnonnull is the wrong way around :) 20:38
brrt that could well be
timotimo :) 20:41
arVM/moar-jit: d23c9a0 | (Bart Wiegmans)++ | src/jit/ (4 files):
Add support for ifnonnull

This also adds the GC_SYNC_POINT to branches
brrt timotimo++ for telling me what to look for
jnthn ah, the rain stopped :)
bbi10-15 20:47
brrt see you tomorrow! 20:48
20:48 brrt left 20:49 woolfy1 joined
timotimo makes a new bail statistic thingie 20:57
yeah, a whole bunch of graphs_s failures still 21:01
then comes atkey_o and then param_rp_o
but atkey_o should be implementable as a simple function now 21:03
will we never ever support may-invoke-opcodes in the jit? 21:06
well, would you look at that 21:08
decont is back on the top spot
followed by graphs_s by about 15 bails
jnthn timotimo: Oh, we'll certainly support may-invoke; brrt++ and I have been discussing that :) 21:12
timotimo cool
otherwise we'll never be able to tackle decont :)
actually ... how come we don't have guarded almost all deconts with a "the type of container has always been the same"? 21:13
since the only container we cannot turn into a p6oget_o is the code-based one and i don't think it's used that often ... ? 21:16
jnthn Dunno. There must be places we're not sure; in may cases, perhaps we can be more sure :) 21:17
May be worth checking if box_i and friends introduce "known not a container" things in facts.c for example 21:18
Otherwise I'd just look at spesh log and see if remaining deconts come in some kind of pattern.
m: say "föö".encode("ISO-8859-1").perl 21:22
camelia rakudo-moar b25b86: OUTPUT«Blob[uint8].new(102, 246, 246)␤»
timotimo create_facts is responsible for box_i and friends, it checks the type for known_value (is that right? wouldn't known_type be enough?) and if it's got a null container_spec and then sets FACT_DECONTED 21:24
jnthn Well, the type almost always is suppleid as a wval 21:25
But yeah, technically known_type is enough. Not sure if it'll nail many more cases, but quite possibly
timotimo OK, i'll add a printf in that branch 21:27
dalek arVM/strref: bab734b | jnthn++ | src/strings/latin1.c:
Fix copy-pasto when updating latin-1 encoding.
jnthn There's the one nwc10++ reported
timotimo in the first piece of the function we check the type for known_type, in the second piece we check for known_value 21:28
21:28 japhb joined
timotimo interesting. 21:28
that triggers really often 21:29
jnthn Whcih "that"? :)
timotimo both branches are hit, actually
jnthn Are there cases where type is and value ain't? 21:30
timotimo let me see.
er. yes. 21:31