nebuchadnezzar | good night | 00:02 | |
timotimo | turns out i lied | ||
dalek | arVM/merge_facts_at_phi: f82b223 | timotimo++ | src/spesh/dump.c: highlight registers that are written to by PHI nodes |
00:03 | |
arVM/merge_facts_at_phi: 9f69201 | timotimo++ | src/spesh/facts.c: fix a sort of bad thinko in iter_facts |
|||
arVM/merge_facts_at_phi: cf6f7ae | timotimo++ | src/spesh/ (2 files): "use"ing facts from guards now works even for merged facts |
|||
arVM/merge_facts_at_phi: 083d766 | timotimo++ | src/spesh/optimize.c: fix comment |
00:08 | ||
timotimo | cool, spec tests are also clean with this | 00:12 | |
could someone do me a favor and smoke the ecosystem with that branch applied to moarvm? | |||
one annoying thing is that the ecosystem isn't clean :( | 00:20 | ||
02:02
zakharyas joined
04:02
FROGGS_ joined
05:53
camelia joined
06:17
camelia joined
06:21
camelia joined
|
|||
FROGGS_ | nebuchadnezzar: ohh | 08:04 | |
I'll fix that | 08:05 | ||
nebuchadnezzar | FROGGS_: I made a pull request | 08:06 | |
dalek | arVM: 309561c | (Daniel Dehennin)++ | Configure.pl: Use CPPFLAGS is @cflags instead of @ldflags |
08:09 | |
arVM: c1cd8c6 | FROGGS++ | Configure.pl: Merge pull request #188 from baby-gnu/fix/CPPFLAGS-in-cflags-instead-of-ldflags Use CPPFLAGS is @cflags instead of @ldflags |
|||
FROGGS_ | nebuchadnezzar++ | ||
08:10
Ven joined
08:15
rurban joined
08:44
Ven joined
08:52
donaldh joined
|
|||
dalek | arVM: a623b72 | FROGGS++ | src/io/procops.c: remove slash->backslash conversion mess |
10:02 | |
11:57
Ven joined
|
|||
timotimo | FROGGS_: do you think i should store an "is a tty" flag inside SyncStreamData? | 13:09 | |
FROGGS_ | why do we want to store such a flag? | 13:10 | |
dont we want to just map "foo".IO.isatty to an nqp::isatty op? | 13:11 | ||
though I guess the method would be called more like isa-tty or is-a-tty or just tty | 13:14 | ||
nwc10 | arguably one also wants "is a socket?" "is a pipe?" (might not be a difference) "is char special?" "is block special?" and "is a symlink?" at the same level | 13:15 | |
so, possible op explosion | |||
and probably some stuff I've forgotten, including "doors" on Solaris. | |||
timotimo | hum. | 13:17 | |
we have an op that gives us the underlying file no of a socket, does that also work for other MVMOSHandle repr'd objects? | 13:18 | ||
then we could nativecall to isatty | |||
nwc10 | I don't think one wants to nativecall this. I think it feels better as C code that can be platform specific | ||
but I was more meanig, I don't know for sure if this wants to be one op that is "isatty" | 13:19 | ||
the interface to the C might be better as a "WTF is this then?" op | |||
particularly as one wants to ask this question of both filenames and file handles. | |||
FROGGS_ | nwc10: we already have "foo".IO.l return true if that thing is a symlink | 13:28 | |
timotimo | that's for a file on the file system, not for an open handle, like stdin and stdout | 13:29 | |
FROGGS_ | and I would not mind adding ten more methods to that | ||
.IO gives you a handle, no? | |||
timotimo | m: say $*IN.l | ||
camelia | rakudo-moar 412559: OUTPUTĀ«Falseā¤Ā» | ||
FROGGS_ | at least something similarish | ||
timotimo | huh | 13:30 | |
FROGGS_ | m: say $*IN.r | ||
camelia | rakudo-moar 412559: OUTPUTĀ«Falseā¤Ā» | ||
timotimo | well, that's a bit problematic :D | 13:33 | |
non-readable stdin? | |||
13:37
Ven joined
|
|||
lizmat | I would be very much in favour of a nqp::isatty function | 13:48 | |
the other stuff we can look at later, but not having IO.t working, is a pain | |||
13:52
zakharyas joined
|
|||
FROGGS_ | lizmat: t is for tty? | 14:01 | |
lizmat | yup | ||
m: $*IN.t | |||
camelia | rakudo-moar 412559: OUTPUTĀ«Cannot find method 'isatty': no method cache and no .^find_methodā¤ in method t at src/gen/m-CORE.setting:17825ā¤ in block <unit> at /tmp/3nrO_SWlie:1ā¤ā¤Ā» | ||
FROGGS_ | :o) | ||
nwc10 | lizmat: I'd like to wait until at least this evening, to see if jnthn has an opinion. | 14:03 | |
lizmat | sure, no pb, it's been a problem for quite some time already :-) | 14:04 | |
moritz | w 13 | 14:12 | |
sorry | |||
timotimo | gist.github.com/timo/2514267f199a9...tfile1-txt - this is how spesh fares in the benchmark that sets all of an array's slots to 1 | 14:23 | |
timotimo AFK | |||
maybe someone else wants to impl isatty in the mean time? | |||
14:43
dalek joined
17:44
lizmat joined
|
|||
timotimo | jnthn: bindpos and atpos as well as bindkey and atkey ought to be optimized via the repr's spesh method, right? | 18:00 | |
jnthn | timotimo: Well, but what into? :) | 18:07 | |
timotimo: It's more that we can JIT them as a direct call to the REPR func | 18:08 | ||
timotimo | then we'll still have the switch for the slot type and the check for the incoming argument to be of the right type | ||
ah, i hadn't thought of the fact that we'll also have to do resizing for the writing ones | 18:09 | ||
jnthn | Well, I have been thinking of changing how we lay out VMArray a bit | 18:10 | |
To ease threading issues | |||
But yeah, we can de-virtualize the REPR calls for now in the JIT | 18:11 | ||
timotimo | mhh, fair enough | ||
the signatures for repr ops are all fixed, right? | 18:12 | ||
jnthn | aye | ||
So you just need a known type | |||
timotimo | good, i'll have a quick look at implementing that | 18:15 | |
nwc10 | jnthn: it looks like "isatty" functionality belongs at the NQP OP level, but it's not clear to me that "isatty" (alone) should be an op | 18:16 | |
(there was more explanation in backscroll) | 18:17 | ||
in that, there are more things than just TTYs that we'd probably like to test for, and having one op for each *I think* feels like too many ops | |||
but you're the designer. | |||
jnthn | dinner now, will ponder | 18:22 | |
& | |||
(but yes, would rather not op explosion) | |||
timotimo | shouldn't we rigorously put REG_VAL_F all over the ops that handle _n? | 18:27 | |
bindattr_n and bindattrs_n, for example, currently use REG_VAL for the value | 18:28 | ||
why did i say i could have "a quick look" at implementing this m) | 18:35 | ||
would i introduce a new MVM_JIT_* type to refer to an object's body, for example? or actually do a bit of memory calculation in the graph.c stage? | 18:45 | ||
at least for ®ister we have a type already | 18:46 | ||
.o( and won't we need to put a _F mode on the return values of some _n ops, too?) | 18:47 | ||
dalek | arVM: f2937f5 | ugexe++ | build/probe.pm: better armv6 and v7 detection A Linux kernel reports an $arch of `armv7` when a NetBSD kernel on the same machine reports the appropriate $arch as `earmv7hf` testers.p6c.org/reports/32564.html |
18:48 | |
arVM: 51b90f0 | FROGGS++ | build/probe.pm: Merge pull request #190 from ugexe/patch-1 better armv6 and v7 detection |
|||
timotimo | yeah, i could do it like that, an extra kind that'll just define a little offset | 18:50 | |
hoelzro | is there something one should keep in mind when *removing* an op? | 19:05 | |
ex. readline_intfh? | |||
FROGGS_ | an op needs to be turned into an noop but needs to stay | 19:07 | |
hoelzro | gaaaah | ||
FROGGS_ | because otherwise we might break nqp's stage0 | ||
timotimo | aye, the numbers must remain intact | ||
hoelzro | that's what I figured | 19:08 | |
='( | |||
timotimo | we have 16bit space for ops :) | 19:09 | |
hoelzro | still feels off =/ | 19:10 | |
FROGGS_ | if it is not used by stage0 (which has to be the case) we could replace it with a new op | 19:22 | |
but well, we don't have to (yet) | |||
hoelzro | FROGGS_: ok, I'll keep that in mind | 19:25 | |
timotimo | well, we've got some slots that used to be occupied long ago | 19:29 | |
19:44
tgt joined
|
|||
timotimo is attempting to compile the new devirtualized reprop call implementation for the first time | 19:48 | ||
FROGGS_ | O.o | 19:49 | |
sounds interesting | |||
timotimo | welp, doesn't compile nqp any more | 19:51 | |
halp | 20:03 | ||
i must be doing something wrong here | |||
dalek | arVM/jit_devirtualize_reprops: 1330eef | timotimo++ | src/jit/ (3 files): WIP on devirtualizing repr op functions instead of using the convenience functions defined in reprconv.c we go through a type argument's known type to its REPR, REPROps and find the function pointer to call. Unfortunately, something seems to be wrong with argument passing OSLT. |
20:07 | |
timotimo | how do i get a disassembly of a .bin file that MoarVM's jit outputs? | 21:04 | |
objdump -D -b binary -m i8086 seems to give me ... something | 21:06 | ||
but -m x86-64 doesn't work at all | 21:08 | ||
ah, found it in the clogs | |||
objdump -D -b binary -m i386:x86-64 -M intel | |||
gist.github.com/timo/066bf4ff0981e4ae016e | 21:12 | ||
so my thinking was: i'll dereference the pointer to the object (rbx+0x18 seems to be that pointer), then add the offset in the struct to the result to get the struct's member | 21:13 | ||
first the STable, then the object itself, then the object's body | |||
at offsets 0x10, 0 and 0x18 respectively | 21:14 | ||
is that wrong? | |||
am i implementing OBJECT_DATA wrong? | 21:16 | ||
FROGGS_ | the offsets sound reasonable | ||
timotimo | well, FWIW, in the debugger the "data" pointer, when decreased by 0x18, gives me a very valid looking MVMArray struct | 21:17 | |
and of course the other values are optimized out >:( | 21:18 | ||
but repr_data is 0x8, which is, i would assume, the offset that comes from here: MVMArrayREPRData *repr_data = (MVMArrayREPRData *)st->REPR_data; | 21:23 | ||
so st must be 0, but how can that be? | |||
do i perhaps have to add another dereference in some place? | 21:24 | ||
maybe now i have a pointer to the pointer of the STable? | |||
i must somehow be significantly brainfarted or something | 21:41 | ||
i don't think i'll figure this out this evening | |||
i may just get some early rest so i can drive home safely and comfortably early tomorrow | 21:42 | ||
FROGGS_ | yeah, that might be a better choice than a walk :o) | 21:44 | |
21:54
kjs_ joined
|
|||
hoelzro | I'm guessing if I want to remove linenoise, I can't remove the interactive member of MVMIOOps, can I? | 21:55 | |
22:00
camelia joined
|
|||
dalek | arVM/jit_devirtualize_reprops: 496c74c | brrt++ | src/jit/ (2 files): Take value of rather than pointer to object stable This would cause a SEGV in JITting direct calls to REPR ops. |
22:44 | |
22:45
brrt joined
|
|||
brrt | btw, very much timotimo++ for coming so far | 22:46 | |
my lazy bum hadn't started yet :-) | |||
timotimo | thank you so much for fixing it | ||
brrt | nqp tests pass, as does rakudo tests, spectest running as we speak | ||
timotimo | now is my bedtime, though | ||
well, it's only a single repr op so far | |||
brrt | also, try --optimize=0 :-) | 22:47 | |
timotimo | tomorrow i'll be spending alot of day driving | ||
brrt | if you have the stomach to wait for moarvm like it's 2014 | ||
timotimo | haha | ||
brrt | oh, well, you should sleep well then | ||
timotimo | i have --optimize=1 and --asan :) | ||
brrt | our bus factor is low enough as it is | ||
--asan is also a real killer yes | 22:48 | ||
but --optimize=0 makes gdb more useful | |||
or lldb, i guess, if you're into that | |||
timotimo | i ought to be able to make more repr ops devirtualized | ||
many, many more | |||
brrt | i think so too | 22:49 | |
timotimo | like, without too much more thinking or assistance | ||
brrt | i had basically stopped at the point 'but you can optimize the accesses to the single repr op variable' but in reality it isn't very important | ||
like that's something the exprcomp will do eventually | |||
timotimo | hm? | ||
single repr op variable? | |||
brrt | the object to which the repr op function is dispatched | 22:50 | |
timotimo | btw, if you're interested in a little benchmark, you can have a look at gist.github.com/timo/2514267f199a91ce1940 | ||
brrt | what's up with that? | ||
timotimo | the file at the far bottom explains it | 22:51 | |
brrt | i read | ||
timotimo | i had put that file up first, but the big diff bubbled up to the top :( | ||
or if you want to do something else, there's a branch that allows the QASTCompilerMAST to access localref decl'd vars as local and local decl'd vars as localref | 22:52 | ||
brrt | hmm | ||
timotimo | it's not working properly, as in: tests fail | ||
brrt | i'll see if i can take a look, but tuits are scarce :-( | 22:53 | |
timotimo | OK :) | 22:54 | |
i don't want to steal too many of your tuits | |||
jnthn already said he could have a look at that branch, too | |||
brrt | :-) | 22:55 | |
jnthn | (korean food)++ | ||
timotimo: oh no, I agreed to what? :) | |||
Oh, the localref. I should have time tomorrow evening. | 22:56 | ||
timotimo | :D | ||
cool | |||
brrt just fixed my thinko WRT jitting objbody and stable references to objects in registers | |||
so now we have a single repr op devirtualized | |||
jnthn | ah, cool :) | ||
timotimo | atpos_* | ||
jnthn | Does it make much difference? :) | ||
timotimo | didn't test yet | ||
i'm en route to bedtimes :) | 22:57 | ||
brrt | that one could, for arrays, even be jitted directly, but i don't want to do an emit-explosion yet | ||
jnthn | yeah | ||
I may tweak array stuff to make it more safely jittable too :) | |||
timotimo | jnthn warned there may be a change to the layout of MVMArray in the future | ||
brrt | if we have the exprcomp then it'll be easier to for reprs to jit ops by creating an expression tree | ||
timotimo | <3 | ||
jnthn | brrt: Indeed | ||
brrt | i had not considered that before | 22:58 | |
that solves something | |||
timotimo | no, it solves EVERYTHING | ||
er, sorry, carry on | |||
brrt | :-D | ||
i should sleep too | |||
see you! | |||
jnthn | brrt: Might be worth pondering the set of things you want to work on with JIT in the summer, and start getting a grant app together for summer. :) | ||
But yes, sleep first. :) | 22:59 | ||
brrt | yes, thanks :-) | ||
timotimo | i'm glad he still answers to the Bart Signal whenever i'm in dire need of his help :) | 23:00 | |
jnthn | :D | 23:01 | |
hoelzro: (remove interactive member of MVMIOOps) you should get away with that at this point |