00:49 leego joined 05:53 domidumont joined 05:57 domidumont joined 07:20 zakharyas joined 07:22 brrt joined
brrt good * 07:50
nwc10 good brrt, *
brrt ohai nwc10 07:51
nwc10 even-moar-jit passes all spectests (apart from the newest one, until the merge made last night)
so now passes all spectests
brrt alright, cool :-), even with MVM_JIT_EXPR_ENABLE=1 ?
nwc10 ytes
brrt excellent
nwc10 but it's failing t/moar/50-jit-register-alloc.t
in NQP
brrt by design
:-)
nwc10 aha. you didnt' say that :-) 07:52
also, if I export MVM_JIT_EXPR_ENABLE=0
then that passes
brrt that test is explicitly there to test the failing register allocator
nwc10 which seems to prove something works :-)
brrt hehe
the bit i'm actually most proud of is the broken-expr-jit bisect tool
okay, then I'll move to a disable flag instead 07:53
timotimo brrt: did you see my little report last night? 08:30
brrt i did not 08:38
oh, nice work 08:39
the reason box_i, return_o are NYI is because I haven't done the CALL family of ops yes 08:40
and the reason they are NYI is because they require a good regional register allocator, which is currently not there yet
timotimo OK
how about return_o for example? is that also a CALL? 08:41
also, i was wondering: what if we generate (big parts of) interp.c out of the jit expr language? :)
brrt then you are at the point of the v8 interpreter project 08:42
timotimo is it a good place to be? :)
brrt 'ignition' i think it was called
yes, but
timotimo hehehe 08:43
it's a Single Source of Truth issue i expect
brrt that
and that we are currently still very much an object-oriented-C project, which is also a decently good place to be, just one that is slower than assembly ;-) 08:44
timotimo hm right
all the indirections, yes?
brrt yes 08:45
the same things that make the complexity manageable, i guess
have you ever heard of the parrot m0 project?
timotimo i'm not sure 08:46
brrt it was basically an idea to have a minimal-assembly like interpreter, (for which a JIT compiler could be developed), and port the 'upper crust' of parrot to that
timotimo oh
brrt that was a virtuous project, in the sense that it is complete hubris
timotimo so basically microcode?
brrt yeah. the thing is that then, you are going to have to implement a c-like language for your m0, and a debugger probably, too 08:47
none of that is especially hard, but nearly all of it is redundant compared to actually using the machine code 08:48
and the C compiler toolchain which already exists
and the fact that you are going to implement all the same object-cleverness, just on a different level
more to the point: the expr JIT is not now, nor will it be in the foreseeable future, as good as any of MSC++/Clang/GCC, in making fast bytecode 08:49
it is optimized for: small, extensible, hopefully reasonably fast 08:50
timotimo that'd be a tall ardor
order*
yeah, we don't necessarily want to ship a whole gcc everywhere we want moarvm to run
though maybe it isn't so bad?
brrt right. but the point is that the code in moar basically runs all the time, hence benefits much from the most-optimized-possible compilation 08:51
hence it makes sense to have GCC do that bit
timotimo ah. the interpreter, you mean by that
brrt yeah
timotimo and i suppose by extension most of the functions we've written so far
brrt well, there is an intermediate there 08:52
moving to an assembly-level interpreter is doable, but a huge project from where we are
ā€¦ i say that and yet i'm not sure if it is true 08:53
it is large, at any rate
if we'd have templates for everything, then, yeah, maybe we could do it
more importantly., there is a bucketload of work to be done before we even get to that stage :-) 08:55
timotimo right 08:56
nine one step at a time 08:57
timotimo it was a far-future idea anyway
to replace interp.c (partially) by something generated from what we write in the expr jit templates
brrt it is a good idea, i think. LuaJIT also does something similar 08:58
somewhat similar, at least
in the category of cage cleaning: I want to have a more structured JIT log, more like the spesh log, than we currently have 08:59
timotimo thing is, if we generate c code from the exprjit, we'll still benefit from gcc's and clang's optimizations
yeah, it's a bit hard to read with the naked eye :)
what were you thinking of?
brrt not yet thinkingā€¦ just complaining at an annoyance 09:00
timotimo what pieces of information do you usually look for when you open the log?
brrt - the structure of the bytecode that constructed the graph 09:01
- the resulting structure of the graph, including
- graph nodes
- tree structure
- labels
- the place, if any, where we stored the bytecode
- the register allocator output, preferably 09:03
timotimo btw, a neat trick i've learned for the graphviz thing: 09:07
if you want the root nodes to appear in a specific order, you can include a subgraph with "rankdir = LR" which contains edges (maybe in grey instead of black) between the roots in order of "execution" 09:08
konobi brrt: assuming you could create the dag plugin... apache's airflow might be a _really_ handy development and debugging tool for moarvm
brrt never heard of airflow 09:09
timotimo a toolkit for working with DAGs, apparently 09:11
intended for workflows
konobi a visual toolkit, specifically 09:12
brrt heh, that looks large-scale 09:37
jnthn
.oO( Web Scale! )
09:39
timotimo DAG scale 09:41
jnthn Yo DAG, I heard you like graphs...
konobi the screenshots are a handy way to get an idea of the functionality 10:08
timotimo easier for something like airflow than for perl6 :S 10:09
brrt hehe
seems cool. no idea how hard it'd be to integrate that
or what we would do with it exactly 10:10
could possibly also work with spesh graphs i think
konobi brrt: it gives you the ability to look at the dag status over time 10:11
so you could find where an optimization wasn't possible and work back to why 10:12
brrt i see
that seems like it could work with spesh
just on first sight, i mean
konobi brrt: also see hot/cold paths, redundant paths, etc. 10:14
12:42 zakharyas joined 13:01 brrt left 13:21 avar joined 13:24 avar joined 13:57 FROGGS joined
timotimo so the ASSIGN-POS of NativeCall::Types (IntTypedCArray) has a param_rp_o for its self argument (it generates a getlexperinvtype for ::?CLASS, then a istype) is bailing from jitting because of the param_rp_o 14:36
do we have everything we need to know to turn that whole thing into something better? i.e. without a const_s, getlexperinvtype, and especially param_rp_o 14:37
jnthn getlexperinvtype getting so far as the JIT without being rewritten into something simpler (a spesh slot lookup, iirc) is a bit odd 14:40
So my first question would be "why ain't that happening"
timotimo this particular ASSIGN-POS only has one single log slot and it's filled from start to end with the same value: CArray[int32] 14:43
timotimo looks at what gets logged
ah, yes, that's the result of getlexperinvtype 14:44
15:18 zakharyas joined 15:54 domidumont joined 16:31 TimToady joined 16:48 domidumont joined 17:50 zakharyas joined 20:22 sivoais joined 21:27 Ven_ joined 21:32 sivoais joined 21:57 Ven_ joined 22:15 Ven_ joined 22:29 Ven_ joined 22:41 Ven_ joined 22:53 Ven_ joined 23:27 Ven_ joined