freenode/#clasp - IRC Chatlog
Search
13:08:33
Bike
drmeister: any luck with DEBUG_COMPILER? i tried building with it but didn't see any difference.
13:37:41
karlosz
on the topic of tail calls, is there any transformation that introduces them? i see there is a tailcall instruction, but i grepped through the sources and didnt see how they could be introduced
13:37:41
minion
karlosz, memo from beach: Lambda lifting is a good thing in general, but in your example, you modified the signature of a function that is returned, and that would not be correct.
13:52:39
beach
karlosz: I think the idea was that it would be introduced as a transformation once it has been detected at the HIR level that a call is indeed a tail call.
13:53:42
karlosz
beach: okay, that makes sense. was just looking to see if there was code to introduce them, since there are mir and lir specializers for them
13:54:48
beach
Plus, MIR needs to be highly specialized on implementation-specific stuff like how the implementation represents objects.
13:55:34
beach
In SICL, AREF will have an indirection that won't necessarily exist in other implementations (for simple arrays).
14:02:08
Bike
the problem i had with lowering aref to mir was that the size of entries would vary based on the element type. and sub-word access might be funny.
14:02:49
Bike
the otherthing was i was wondering if you could do an aref with unknown element type by computing the element size at runtime from the array element type, which would look pretty different in ir
14:53:33
karlosz
so ive gotten enough contification working to get this compiled to a tight loop https://paste.gnome.org/p7l7au4a0
16:27:53
drmeister
I just checked it - yes ---- Did you add it to your DEBUG_OPTIONS = [ "DEBUG_COMPILER" ]
16:33:36
drmeister
Check *features* - it should be there - if it is - then it needs a rebuild - the verify-module and verify-functions are featured out with #+debug-compiler - correct?
16:37:00
drmeister
Nevermind - it was my screwup - I hacked wscript to write to /tmp/build.lisp and then conflated it with build.log
16:38:13
Bike
oh, because the log files interleave. i see. yeah putting the pid in there might be good.
16:44:54
Bike
I mean even if there's multiple simultaneous builds it mostly just seems to slow it down a bit
16:45:34
drmeister
I need to get a docker image rebuilt and so I quickly need to test and debug some stuff.
16:46:13
drmeister
I was being blocked by this stupid file that I was generating in the wscript file.
16:49:53
drmeister
I'm turning off all llvm inlining and optimization to test the effect on the final stage of building cando - including compiling quicklisp packages.
16:51:19
drmeister
ASDF since version 3.1.x has radically changed its internal structure (according to Fare in the ASDF mailing list) and POIU is out of date.
17:31:10
drmeister
The verify-function verify-module functions don't report anything if there is no problem.
17:51:12
Bike
i had to add a core:function-lambda-list alias so slime would still work, but that's not a big thing
18:04:27
Bike
also, before, about rewinding valists- i think i spoke too soon. with required, optional, rest arguments it should be easy, but for key arguments we grab them in a loop, so we either unroll a little or do something like va_arg does
18:04:41
Bike
though i confess i don't understand why valists would be redone with all the register complication
18:10:03
Bike
so the last eval is (read-from-string (cdr entry)), in process-command-line-load-eval-sequence.
18:47:28
Bike
drmeister: we were reading the environment wrong. (entry . 0) just meant 0 was the index- the actual value was (:eval . (core:quit))
18:54:29
Bike
drmeister: if i'm looking at the argument valist, it's empty (whereas it should have one value, the string).
19:02:38
drmeister
And what I'd really want to do is get a break point on the entry to the function and see what is going on with the arguments.
19:03:17
Bike
read-from-string takes both &optional and &key, so i can imagine there being an issue- i didn't test that.
19:03:33
Bike
but i just replaced the keyword argument compilation, all the other stuff is the same.
19:04:52
Bike
anyway i don't know what the raw tagged pointer is. i have (core::T_sp)headFunc = (theObject = 0x###)
20:08:38
kpoeck
Did you see issue ##574: New Lisp dialect with no gc rely (use reference count and develop by C++) call for notice and help
20:09:51
Bike
drmeister: I essentially didn't think about the case of having both &optional and &key, so I have to do some rewriting.
20:12:43
kpoeck
well it links to another github projects, so perhaps its really a cry for help, but definitively not a clasp issue
20:14:47
Shinmera
ACTION remembered the time he wrote his own lambda-list destructurer https://github.com/Shirakumo/maiden/blob/master/agents/commands/parsing.lisp#L127-L242
20:15:32
Bike
which there is only one of, because cleavir doesn't handle it. except it does for macro lambda lists
21:08:51
drmeister
apropos is blowing up - I guessed (wrongly) it had something to do with cyclic package uses - I fixed cyclic package uses - apropos continues to blow up.
21:11:56
Bike
if we have the lambda list X we basically do "x1 = va_arg(va_list); x2 = x1;" and then x1 is never referred to again, unless i'm missing something
21:15:38
drmeister
I'm pretty sure they are how I deal with bclasp needing to put them into lexical variables stored in value-frames (until they are optimized away) or in Cleavir to put them in lexical variables.
21:16:51
Bike
i'lll look at it... it just seems pretty bizarre since they both have to be allocas anyway.
21:17:38
karlosz
a little stupid but contifying can reduce this down to nop infinite loop https://paste.gnome.org/pp7s1rflb
21:27:29
Bike
The curreng arguments code increments an arg-idx-alloca for every argument processed. But then the rest argument compiler ignores that and uses calling-convention.nargs* instead. How does that know how manya rguments are left?
21:33:17
Bike
i think we are probably giving llvm kind of stupid code, and doing lotsof weirdthings beside.like i'm pretty sure we initialize va_lists if we just use register arguments
21:34:34
drmeister
I think we initialize va_lists when we use register arguments to spill them for backtraces.
21:38:39
Bike
ok, wait.maybe calling-convention-args.va-start only sometimes actually generates a va_start
21:42:08
Bike
vaslists are a va_list plus the count,right? where do we use the count? i don't think we need it for argument parsing.
21:45:00
Bike
right, that's where we need some kind of size, but we can deal with it separately in the arguments code, rather than embedding it in the vaslist
21:59:54
drmeister
While you are working on the &key argument handling - are you taking out the PHI node code>?
22:02:00
drmeister
It's funny how I said that about needing tail-call optimization and we both keyed in on using tagbody/go
22:03:27
Bike
I'm still using phi nodes a bit, but I put a lot of comments, and pseudo-C to explain what it's supposed to look like.
23:40:33
drmeister
I haven't seen that - but I suspect something weird in the file system and an infinite recursive loop due to a symlink or something.
0:11:08
karlosz
drmeister: you won't believe this. the culprit is python3.7, which has a breaking change