freenode/#clasp - IRC Chatlog
Search
17:03:00
drmeister
Bike: using compile will invoke llvm and run part of the function - so if there is bad llvm-ir then it may crash.
17:04:21
drmeister
Using clasp-cleavir:cleavir-compile-file is the least crashy way to test things. Cleavir will do its thing and generate llvm-ir and write it out to a file.
17:06:54
Bike
i got "NIL is not of type LLVM-SYS:BASIC-BLOCK" again! this time it's probably in code i wrote tho, so i can trace it
17:33:37
Bike
well the problem is because the *tags* aren't being set up properly from the basic blocks, but i don't know why that is
17:38:16
Bike
ok, i reduced the example even farther, i guess since there's something wrong with having blocks
19:07:36
Bike
and no, it doesn't allocate exceptions. it just does the same misnamed cc_pushLandingPad or whatever it is
19:13:15
Bike
we haven't had an instruction with multiple successors and an output that's closed over before
19:22:03
karlosz
does it make more sense to use HIR or MIR as a backend for generating bytecode for a stack machine?
19:22:51
karlosz
i could hack up the hir interpreter to produce clisp bytecode instead, but it seems like mir would be more suited for address calculations etc
19:23:27
Bike
what's actually _in_ mir is pretty vague right now, so if you find the existing operators aren't suitable feel free to throw more in
19:23:49
Kevslinger
drmeister: Steven said he was not selected for jury duty, so we should be at full strength tomorrow
19:24:31
karlosz
so is there already a canonical way to get mir from hir, or is it more adhoc than that?
19:26:37
Bike
which pretty much just calls cleavir-ir:specialize on each instruction, and you can define methods on that
19:27:07
Bike
so e.g. clasp has a method on specialize that turns car-instruction into a memref2-instruction
19:30:56
karlosz
is that because it hasnt been pulled back into cleavir proper or because it is specialized to clasp?
19:31:33
Bike
it's mostly specialized to clasp... sicl doesn't actually compile past hir right now, which is why mir is a little thin
19:32:56
Bike
clasp only has like four custom mir instructions though. two of them could be moved back, probably
19:33:11
drmeister
karlosz: It wasn't very planned. When I wrote the HIR/MIR to llvm-ir I just started where HIR/MIR left off.
19:35:01
drmeister
For the most part the translation to llvm-ir was very straightforward. The unwind-instruction gave me some grief - but we are pulling that back into Cleavir now.
19:36:18
Bike
clasp hir-to-mir just converts cons operations to memory operations, and marks the inputs and outputs of box and unbox instructions as tagged or not
19:40:02
shiho
drmeister: I could do (load-off atomic_ions.lib), so how can I get those parameters? For example, how can I get "Na+" charge?
19:40:02
Colleen
shiho: drmeister said 15 hours, 40 minutes ago: Can you remind me that we MUST get building some molecular Lego with boronic esters?
19:40:51
drmeister
shiho: It currently puts all of the units/aggregates that it loads into a special hash table - but we may want to change that and write them straight into the cando-user package as symbols.
19:51:53
karlosz
so when you call hir to mir, its really just doing a partial ocnversion of the instruction graph?
19:57:46
drmeister
Yay - (1) the DOD accepted my quarterly report, (2) my grades are in, (3) my cumulative exam was submitted this morning.
19:58:16
karlosz
alright, i guess the plan of action then is to hack the hir interpreter to produce clisp forms until i need to lower instructions to ease bytecode translation
20:01:06
Bike
i still don't know what we should be doing with __cxa_{begin,end}_catch. the llvm docs pretty much just say it matches a C++ catch block, which is unhelpful
20:01:47
Bike
maybe we should just not do them at all. as long as we don't generate a __cxa_throw or whatever either that seems okay
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