02:08
tokuhiro_ joined
02:18
FROGGS joined
02:23
FROGGS_ joined
05:01
BinGOs joined
05:04
flaviusb joined
05:09
_longines joined,
vendethiel joined
05:22
Peter__R joined
05:23
Hotkeys_ joined
06:02
FROGGS_ joined
06:07
TimToady joined
06:43
domidumont joined
06:59
domidumont joined
07:02
domidumont joined
07:06
nebuchadnezzar joined
07:27
FROGGS joined
07:37
colomon joined
|
|||
nwc10 | ASAN fails after test 32 in t/spec/S32-str/encode.rakudo.moar paste.scsys.co.uk/501579 | 07:43 | |
I *think* that it used to fail earlier | |||
oh wait, I may not be current | 07:44 | ||
OK, that was the earlier. Now we make it to test 36 | 08:11 | ||
paste.scsys.co.uk/501580 | |||
08:19
JimmyZ joined
|
|||
nwc10 | OK, we're failing in the last subtest of test 36: paste.scsys.co.uk/501581 | 08:31 | |
08:34
zakharyas joined
08:52
colomon joined
08:58
kjs_ joined
09:49
brrt joined
|
|||
brrt | good * #moarvm | 09:51 | |
i have some exciting news | |||
even-moar-jit can now pass the nqp test suite | 09:52 | ||
jnthn | :D | ||
\o/ | |||
brrt++ | |||
ASAN barf is in UTF-16, which we know is bust | 09:54 | ||
But nice we have an ASAN reminder... :) | |||
brrt | yes, ASAN++ | ||
of course i have to qualify that by saying that i've removed all sorts of interesting stuff from the templates in order to get that to work | 09:55 | ||
so there is still a lot of broken and unfinished | |||
but at least i have something to build on | |||
a minimal base, as it were | |||
which hopefully will break the cycle of frustration | 09:56 | ||
(i'll have to push later today, as my $code-laptop cannot connect to the internet at $study-office | 09:58 | ||
jnthn | brrt: Yes, having something that works to build on is always good | 10:01 | |
brrt | now i want to attack the tiler linearisation problem; after that the offline register allocator; and somewhere in between the implicit cost computation | 10:03 | |
maybe you can help me a bit with the latter? | |||
you know maybe a bit how i compute the tiler tables? | |||
well, i need somehow to add the cost of e.g. (load reg) to (add reg reg) in case i can compile both (add reg (load reg)) and (load reg); (add reg reg); | 10:06 | ||
jnthn hazily remembers talking about this before | |||
brrt | i can of course only generate that if the second child of those is a (load reg) tile of some sort | ||
yes, i've been banging on about it for quite some time | 10:07 | ||
jnthn | It becomes an optimization problem rather than a simple compare two numbers problem? | ||
brrt | so, there's the thing, i first find all possible combinations of rules (e.g. (add reg reg) combines with (add reg (load reg)) but not with (sub reg reg))' | ||
in principle it is still a compare two numbers problem, the problem is how to arrive at the numbers | 10:08 | ||
correctly | |||
jnthn | ah | ||
OK, so it's not as bad as I feared :) | |||
brrt | :-) | ||
jnthn | Though yeah, those numbers are potentially interesting in so far as instruction scheduling may partially influence them too? | ||
brrt | yes, that is true | ||
although i have opted to neglect that for the time being | 10:09 | ||
in fact, this tiling approach is unviable if we include instruction scheduling | |||
although limited instruction reordering may be possible, it cannot guarantee an optimality under that constraint; but i can't claim to fully understand that topic, so i may be wrong | 10:10 | ||
jnthn | It may be easier to peephole anyway | ||
brrt | instruction scheduling you mean? | 10:11 | |
jnthn | yeah | ||
brrt | hmmm | ||
ok, i'll save that thought for later :-) | |||
jnthn | :-) | ||
Yeah, it's certainly for later | |||
brrt | in fact, at current constraints, i assume the optimal rule for an optimal desired symbol can be always computed statically | 10:12 | |
i.e. i want my add node to yield a reg, and given that i can compile (add reg reg) and (add reg (load reg)), i can statically determine which one of these ought to be cheapest | |||
so for that purpose i use a table | 10:13 | ||
it is the computation of this 'minimum-cost' table which is the trouble | |||
10:15
domidumont joined
|
|||
brrt | this.. should be a simple problem, since i know what combinations-of-rules generate the ruleset refering to (add reg reg) and (add reg (load reg)); i need those combinations for tiling correctly in the first place | 10:15 | |
(these combinations are what makes the table so large, by the way) | |||
i just can't figure out how to generate that table .. or how to walk the created table | 10:17 | ||
10:17
domidumont joined
|
|||
brrt | hmmm | 10:18 | |
maybe it's simpler than i think | |||
once i have the table, i can reverse it; that is generate all combinations of rule-and-child-rulesets which generate a given ruleset | |||
these child-rulesets have rules which by themselves have a cost | |||
although, of course, the 'hidden' cost of these rules is then not calculated... so maybe i need to iteratively calculate it again | 10:19 | ||
jnthn | What's the "key" used to index into the table? | 10:28 | |
brrt | into the tiler lookup table? that is head, ruleset-for-first-child, ruleset-for-second-child | 10:29 | |
jnthn | No, the proposed cost table | ||
brrt | iirc, the intermediate table has these hashed into a single key, the final table is nested | ||
jnthn | Or you'd include them in the tiler lookup table? | ||
brrt | oh, that key | ||
that's ruleset, symbol-name | |||
e.g. ({1,2}, reg) | 10:30 | ||
the tiler lookup table is for selecting rulesets; the cost-table is for selecting rules-out-of-rulesets, and there is a third table which maps selected rules to the required children-symbols, which is then used to lookup the rule in the second table | 10:34 | ||
dalek | MoarVM/even-moar-jit: cd73e63 | brrt++ | src/ (5 files): | 12:43 | |
MoarVM/even-moar-jit: Let expr tree build consume an iterator | |||
MoarVM/even-moar-jit: | |||
MoarVM/even-moar-jit: This allows us to safely break a basic block and let the common | |||
MoarVM/even-moar-jit: graph handling logic deal with difficult cases. This version | |||
MoarVM/even-moar-jit: can run nqp make test, and, I presume, use OSR correctly. | |||
MoarVM/even-moar-jit: | |||
MoarVM/even-moar-jit: Also fix a bug (and special case) of the inc_i and friends; | |||
MoarVM/even-moar-jit: treating a read-write operand simply as a write operand | |||
MoarVM/even-moar-jit: is much simpler. | |||
MoarVM/even-moar-jit: | |||
MoarVM/even-moar-jit: There are still plenty of things missing! But at least, and for | |||
13:32
TimToady joined
15:37
tokuhiro_ joined
15:44
kjs_ joined
|
|||
hoelzro | o/ #moarvm | 17:02 | |
17:38
tokuhiro_ joined
17:41
kjs_ joined
18:17
FROGGS joined
19:29
vendethiel joined
|
|||
hoelzro | jnthn: I tried merging in my memory leak fixes last night, but it segfaults with your recent change to flag_count. Could you clarify for me how flag_count on MVMArgProcContext and MVMCallsite should relate? | 19:33 | |
jnthn | hoelzro: flag_count is only applicable if arg_flags is set | 19:34 | |
hoelzro: That is, only set in flattening contexts | |||
hoelzro | hmm; would that result in a valid situation where MVMArgProcContext.named_used would be NULL? | 19:35 | |
that's what's segfaulting, and the creation of named_used seems to depend on arg_flags and flag_count | |||
jnthn | Well, if there are no nameds, for example... | 19:37 | |
hoelzro | jnthn: does a context lacking arg_flags imply that its callsite will also lack arg_flags? | 19:39 | |
19:39
tokuhiro_ joined
|
|||
jnthn | No | 19:39 | |
Callsties always have argflags | 19:40 | ||
Well, expcet maybe the zero-arg site | |||
hoelzro | so assert(callsite->flag_count > 0) should always work? | ||
19:40
domidumont joined
|
|||
jnthn | No | 19:41 | |
The zero-arg callsite has a 0 flag count | |||
foo() # 0 args | |||
hoelzro | ah, that makes sense | ||
jnthn: should the flag_count on a context and its callsite match? | 19:44 | ||
I'm trying to figure out how contexts are getting created without named_used and segfaulting | |||
jnthn | No | 19:46 | |
They may match, but it's only by luck | |||
hoelzro | alright | ||
thanks! | |||
jnthn | my @a = 1; foo(|@a) # a case where they match | ||
The first has 1 flattening arg | |||
The second has 1 arg | |||
(callsite the flattening, the context the 1 arg) | |||
hoelzro | ah ha | 19:47 | |
dalek | arVM: 5e283c5 | peschwa++ | src/core/interp.c: Check if the next outer is null in bindlex. Analogous to commit b370dd9. I don't think we hit this, but the semantics are equivalent and we could hit it when trying to bind further out than outers are actually available. |
20:03 | |
arVM: 1001d53 | FROGGS++ | src/core/interp.c: Merge pull request #300 from peschwa/master Check if the next outer is null in bindlex. |
|||
21:41
tokuhiro_ joined
22:42
kjs_ joined
23:42
tokuhiro_ joined
|