freenode/#clasp - IRC Chatlog
Search
19:40:34
shiho
scymtym: drmeister here on shiho's account: We are trying to handle :CHAIN. It gets a list of nodes - we need to turn it into something like (chain x (chain y (chain z)))
19:55:51
drmeister
Hi - I'm talking through shiho's account - well I was a second ago - I'll paste and show you what we mean.
19:57:04
scymtym
so you get a list of elements from the (+ (or bond-atom branch)) expression and the result should be a list of chain nodes shaped like your example above
19:57:54
shiho
We need to transform it into something like the following - with make-node and relate methods doing the translation (we think)
19:58:16
scymtym
yes, that's from (node* (:chain) (* :element elements)), i.e. a :chain node with multiple :element children
20:02:04
shiho
We can create an intermediate object that would be returned by make-node and then take whatever is passed to relate and build the nested structure in relate - or connect it together.
20:11:42
scymtym
shiho: would this technique work: https://techfak.de/~jmoringe/linearize-test.lisp ?
20:20:47
scymtym
well, there will be multiple MAKE-NODE calls. (make-node :chain) 1 time, (make-node :atom (or whatever the children are)) N times, (relate :element <chain> <child>) N times
20:23:18
scymtym
for a single node with a (* :element …) relation, it's basically (finish-node (reduce (lambda (left right) (relate :element left right)) :initial-value (make-node :chain)))
20:26:29
scymtym
in my sketch, each RELATE call extends the tree of chain nodes by adding a new chain node and storing it in the tail slot of the previous one, the CONS only remembers the first chain node so it can be returned from FINISH-NODE
20:40:25
Bike
i tried dumping the module after the functions are erased and it's really depopulated. no run-all, or really no anything.
21:04:07
Bike
i think it's during optimize-module-for-compile-file, before remove-always-inline-functions
21:17:50
drmeister
I have this in DEBUG_OPTIONS (wscript.config) . "DEBUG_LLVM_OPTIMIZATION_LEVEL_0",
21:23:33
drmeister
Maybe - I don't see the connection - but I did change a lot of code for stackmaps.
21:24:35
Bike
5bcc6cf56 is the busted one. you did a fair amount of rearrangement. might have dredged something from the pits by accident
21:51:02
Bike
in cclasp it complains about the (eql module (llvm-sys:get-parent main-function)) thing, i guess because the cclasp definition of eql doesn't handle pointers
3:26:03
drmeister
An alternative to always_inline may be to declare the builtins 'inline' and '__attribute__((used))' and then remove the 'used' list when we want to delete the builtin functions after inlining them.
3:48:13
Bike
i'm no longer sure how it could possibly have built them and then crashed when i try to start up
3:49:39
Bike
it finished building like five minutes before i was going to leave, so i just ran it, it segfaulted, i went "uuuuugh" and left
3:51:54
drmeister
Yeah - also - I changed my builtins - I'm experimenting with __attribute__((used))
3:54:14
drmeister
Hmm, Martin needs to go up to Boston - what if you swung by here for a few days and then drove up with him? - But you have dog sitting issues and he was supposed to be here Wednesday.
6:05:15
drmeister
::notify Bike - I found the problem - yeesh - I was optimizing the module before creating the static ctor that invokes the startup function. Since the startup function wasn't declared external and wasn't referenced by anything it was removed!!!
6:30:13
drmeister
::notify Bike The problem wasn't the always_inline - that was fine. We just need to add the functions to inline, inline them, remove them, add the ctor and only THEN optimize the module.