freenode/#clasp - IRC Chatlog
Search
20:57:54
drmeister
IIRC __cxa_being and __cxa_end are a little more involved than that - I'll read up on them and try and remember what the deal was.
20:59:18
drmeister
The Unwind class is not GC'd - no. But the frame that it points to better not get collected while the exception is in flight. This is something I've worried about but it hasn't appeared to be a problem yet.
21:13:38
Bike
the issue is probably that i pretty much rewrote translate, and the compile hook needs to do more than the compile-file one does
21:15:17
drmeister
Bike: If you bind cmp::*compile-debug-dump-module* to T I think that will dump llvm-ir files with the name "module-xxxx-yyy" for the compile.
21:17:47
Bike
you'll need to use the catch-unwind branch of SICL if you want to actually run the compiler at all
21:18:26
drmeister
(let ((cmp:*compile-debug-dump-module* t)) (clasp-cleavir:cleavir-compile 'foo '(lambda (x) (declare (core:lambda-name foo)) (list x x))))
21:18:45
Bike
i did (let ((cmp::*compile-debug-dump-module* t)) (clasp-cleavir:cleavir-compile nil '(lambda ())))
22:23:17
karlosz
does llvm handle managing the stack already? it seems like the translate file for clasp does not need to keep track of stack locations of variables
22:29:03
drmeister
You use the C++ API to build a data structure called a Module. Module's contain Functions and they contain BasicBlocks and they contain Instructions.
22:29:52
drmeister
There is an instruction called 'alloca' - you put those at the entry of a function and they tell the compiler to allocate space in the stack frame for the function.
22:32:58
drmeister
You have an infinite number of registers within a function and they are strongly typed. The return value of an alloca is a pointer to the address in the stack frame.
22:35:19
karlosz
ah okay. that is helpful. in essence, llvm is an infinite register machine that does all the things like regalloc for you
23:29:05
Bike
drmeister: compile seems to be broken on any input, so whatever you want to test with i guess
0:17:46
drmeister
karlosz: Yes - you generate code that is not SSA and then run it through optimization passes. One in particular is called mem2reg - it converts alloca's to registers with PHI nodes when possible.
0:20:05
drmeister
Isn't there some transformation for converting stack machine code into register machine code?
1:38:35
drmeister
Well - if you ever do this is what clasp does: https://github.com/drmeister/clasp/blob/cst-catch/src/lisp/kernel/cleavir/setup.lisp#L53
1:39:31
karlosz
thanks -- but it seems like the bytecodes are high level enought hat i can just deal with constants as a uniform blob
1:39:36
Bike
also the immediate-literal thing is kind of weird. our load time value machinery is still sorta weird
1:44:26
karlosz
also, what is that extra gensym output to enter-instruction doing there? the docs dont mention anything about it
1:46:01
Bike
it represents the closed over variables. the only thing it can be used for is an input to a fetch-instruction. cleavir-hir-transformations:process-captured-variables takes care of inserting the instructions
1:46:12
Bike
you'll need to implement translations for fetch, write-cell, read-cell, and create-cell
1:48:06
Bike
i was thinking of changing the handling so that the enter would just output cells directly, but i've been doin other stuff
1:48:21
Bike
a transform to use values instead of cells when the cells are read-only is on my list to