01:32 lizmat joined 04:19 Peter_R joined 05:26 lizmat joined 05:43 Peter_R joined 06:12 FROGGS joined 06:57 zakharyas joined 07:09 brrt joined
timotimo you know ... 07:43
one of the most amazing achievements of RPython and PyPy is that its traces go very deep into its guts
does it make any sense whatsoever to build some representation of what some of our internal functions do so that their insides could be traced as well? 07:44
that'd be three to five steps ahead of what we currently do when we devirtualize reprops or turn accesses to objects into direct memory offsets 07:45
brrt hmm
i've thought about that
there are roughly two ways to go about it
timotimo build our own C compiler!
brrt a): read the debugging information 07:46
that'll tell you what-means-what
b): disassemble the machine code
c): some combination of a and b perhaps using tcc or something
timotimo trying to disassemble the machine code gcc, clang and msvc spit out seems like a gigantic task 07:47
especially since they have a ridiculous amount of cleverness
in any case, that idea can most probably be shelved until much, much later 07:48
if i want to build something helpful, i'd probably best finally build that tool that roughly picks jit/graph.c apart into some re-usable data format 07:49
brrt hmmm
timotimo and/or perhaps look at the code-gen problem about local/localref where a decont appears out of thin air
brrt if you would do that, i would be very very very grateful
it's actually my work, of course :-) 07:50
timotimo and/or figure out what's keeping the if/unless + not_i/so_i from working
brrt anyway, dissassembling x64 machinecode is tricky but not undoable
timotimo i'd love to contribute to your work; if i can get rid of some rote work and you can concentrate on architecting and stuff, that'd be great 07:51
you can't undo it? ;)
brrt considering that you 'know' which things are calls, branches, returns
timotimo hm, well, i guess
brrt you can pretty reliably figure out what constitutes a function
lol, no, ehm, i meant it's doable
timotimo :)
brrt ok, one of the things i think should be automatable, is conversion of your routine function call to exprlist format 07:52
letmegetanexampleofthat
timotimo extract only the branches and turn it into an exprlist like "copy-paste this part of the already existing machine code here, build this branch, more machine code copied from here to there, a label, ..."? 07:53
brrt gist.github.com/bdw/8ed7638d265ff77d716e 07:56
this would be an example
the args[] thingy can be converted to the arglist 07:57
each item represents a carg
timotimo oh
you're talking about graph.c to output format
brrt hey, i didn't say it was easy
:-P 07:58
timotimo no problem, that'll be doable
brrt anyway, i don't want to dump this into your lap. only pick it up if you want it
more difficult stuff, you can just bail out on; they can be converted by hand if necessary 07:59
but there are a lot of these, and they all follow the same pattern 08:00
timotimo mhm 08:01
brrt you don't have to worry about the actual operand values, because the tree builder takes care of that 08:02
another thing is, if you have a register you're writing to, (say wval), you can neglect that, too 08:03
because the tree builder is responsible for that, too
timotimo the destination register? 08:04
brrt yes
neglect it
throw it to the wind
timotimo as in, what is -1 in your "from.c" example
brrt :-)
can be ignored
timotimo so i'll just convert the JIT_RV_* for the last argument of "call"
brrt yes, i think so 08:05
timotimo mhm, fair enough
brrt for the last argument of carg, i think you can get away with just using ptr or int for most cases
doesn't make a difference for us 08:06
timotimo mhm 08:07
brrt the num thing does make a difference. but it' might be tricky to detect
actually, it's not so difficult, reg_val_f => num, otherwise, perhaps just use int?
timotimo "just use int" %) 08:10
so, still like in your example, then?
"carg $foo num" 08:11
rakudo already noms 3 gigs of ram before it even reaches the beginning of op_to_func ... i'm searching for it via .*? 08:20
what the ...
anyway, i've got to be off for a bit
08:23 Ven joined
brrt see you :-) 08:33
i'd... ehm... heretically suggest using perl5. but that's your business, of course :-)
aargh why didn't i just finish it yesterday 08:51
brrt bbiab
09:23 zakharyas joined 09:28 brrt joined 10:24 Ven joined 10:43 JimmyZ_ joined
timotimo i can't even perl5 10:53
aaah very clevre 12:07
clever
make a "rule ws"
masak really `rule` and not `token`...? 13:23
jnthn masak: That's why it was "clever" :P
masak "clever (adj.) -- ... (9) not clever. ..." 13:24
:P
13:28 brrt joined 13:30 arnsholt joined
brrt \o 13:32
timotimo oO 13:33
jnthn /o 13:34
brrt :-) 13:36
FROGGS o|) Ā»--> (Ā·) 13:40
o|) (Ā·) __ 13:42
damn it
jnthn lol 13:43
masak it actually takes some skill to miss when there's just one dimension :P 14:10
14:45 danaj joined
brrt hmm 14:59
jnthn hmm? 15:07
brrt i wsa overly optimistic yesterday evening :-( 15:11
*was 15:12
15:15 Ven joined
brrt the trick, i think, is to reduce the amount of possible label sets 15:16
e.g. the combination of labels that are possible 15:18
let me think about that a bit more
15:24 FROGGS joined 15:30 njmurphy joined 15:49 avuserow joined 16:12 brrt joined
nwc10 timotimo: not sure if you'd seen this: blogs.perl.org/users/flavio_s_glock...hmark.html 17:31
currently his codegen beats Rakudo's (and MoarVM's ability to spesh it) 17:32
I'd love someone more competant than me to work out how to beat his code.
17:37 lizmat joined
timotimo it doesn't do big integer semantics 17:41
are you measuring against "my int $i" and such?
nwc10 at jnthn's suggestion yesterday I tried that too. He still wins. 17:43
jnthn How to get faster: lexical to local lowering, scope elimination, escape analysis (capable of understanding loops), scalar elimination, induction variable stuff to optimize away the bigint upgrade checks, and then good machine code generation. 18:04
timotimo right, i want the lexical to local lowering to work again 18:05
really, really want :)
but wanting something doesn't magically make you capable of bringing it about ā€¦
jnthn: do you have a hunch for where a decont may be generated that doesn't explicitly mention "decont"?
also, does the mast compiler that's inside moarvm ever add stuff like that? 18:06
jnthn It adds them in response to :decont annotations in the mapping stuff
timotimo mhm
that's for inbound parameters, yeah? not for outbound? 18:07
jnthn Right
timotimo hmm
jnthn The lexical to local lowering is competing with getting multi-dim stuff done, getting the new S17 additions in place, squishing concurrency bugs, and probably will have to compete with whatever GLR task stealing is needed of me. 18:08
timotimo mhm
timotimo has dinner 18:17
18:32 lizmat joined 18:49 brrt joined
brrt ooh, that's fairly cool 18:54
timotimo hm? 18:55
dalek arVM: c9d526f | moritz++ | docs/ChangeLog:
Fill in some ChangeLog for 205.07
18:57
brrt the perl5-to-java compiler 18:58
question is, of course, how well does it work 18:59
i think it's a static compiler, from the looks of it?
timotimo yeah, if it's anything like the rest of perlito 19:00
it is still perlito, right?
brrt aye
well, that's still really cool 19:01
the thing that puzzles me personally is how he creates good code for a stack machine 19:03
stack machines are weird
hmm 19:07
ok, observation: most tilish things can be evaluated postorder 19:09
some things cannot (if statements)
however... some if statements are really good statements for tiling
timotimo it could be it creates java code rather than java bytecode? 19:10
brrt e.g. (if (all (foo) (bar)) (quix) (quam)) <- clearly if foo is false we can skip ahead directly to quam
jnthn timotimo: I think it does, yes 19:11
brrt oh, yes, right :-) 19:13
19:14 zakharyas joined 19:15 vendethiel joined
brrt how does it deal with e.g. eval statements 19:20
or does it just include the compiler for that purpose
hmm 19:21
actually, it's not that simple of course
jnthn One of the more annoying things about targetting Java instead of JVM bytecode is "no goto2 :) 19:22
timotimo mhhh
every basic block becomes a method
and your lexpad becomes an object 19:23
moritz rakudo with moarvm master has quite a few spectest failures, and t/spec/integration/advent2014-day05.t hangs
not a good day to cut a release :(
timotimo it *could* be one of my recent merges made that happen
hm, no
i didn't really do much 19:24
brrt what's goto2?
jnthn goto, followed by a typo'd " :P 19:25
moritz huh, hangs on recommended moar version too 19:27
moritz could have sworn he (mostly successfully) spectested today 19:28
oh, my rakudo wasn't quite up to date
but it really seems test changes that broke so many of them for me 19:39
timotimo test changes broke tests? 19:43
dalek arVM/even-moar-jit: 3f60420 | brrt++ | src/jit/x64.tiles:
Add file describing intial grammar of tiler

I have yet to figure out how to practically map it to machine code, but it's a start.
19:46
brrt ok, hope that may break me out of my impasse :-) 19:53
still many things i'm not sure of
but i'll manage eventually
20:03 ggoebel joined 20:57 TEttinger joined 21:49 Peter_R joined 23:33 jnthn joined, [Coke] joined, sergot joined, moritz joined