21:11:56Bikeso i didn't completely hose the landing pads, at least, once i got it compiling
21:12:25drmeisterI'm checking how to get ir for compile
21:13:38Bikethe issue is probably that i pretty much rewrote translate, and the compile hook needs to do more than the compile-file one does
21:13:52Bikewell, i'll push it so you can take a gander at least
21:15:17drmeisterBike: 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.
22:23:17karloszdoes 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:25:16drmeisterkarlosz: Can I give you a quick primer on how llvm works?
22:25:56drmeisterBike: What are some things that I should compile to test your code?
22:28:25drmeisterI have to leave for dinner soon - so here's a quick primer.
22:29:03drmeisterYou 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:52drmeisterThere 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:58drmeisterYou 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:33:23drmeisterModules also contain global variables.
0:17:46drmeisterkarlosz: 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.
1:38:02karloszthits abstracted away by the bytecode vm
1:38:35drmeisterWell - 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:01Bikethat's not totally helpful since it just calls another function...
1:39:31karloszthanks -- but it seems like the bytecodes are high level enought hat i can just deal with constants as a uniform blob
1:39:36Bikealso the immediate-literal thing is kind of weird. our load time value machinery is still sorta weird
1:44:26karloszalso, what is that extra gensym output to enter-instruction doing there? the docs dont mention anything about it
1:45:36karloszno, it only mentions the outputs associated with parameters
1:46:01Bikeit 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:12Bikeyou'll need to implement translations for fetch, write-cell, read-cell, and create-cell
1:46:26Bikewhere a cell is just a thing you can read and write a value to, like an ML ref.
1:46:45karloszyeah, im familiar with how closures are usually implemented
1:46:55Bikei have no idea how clisp does it, natch
1:47:19karloszthey just have a vector bundled up with the function object