freenode/#clasp - IRC Chatlog
Search
1:37:50
drmeister
There are untagged pointers higher in the stack trace that I'm putting in tests/traps for.
2:02:52
drmeister
Bike: What do you think about a 'lint' for HIR/MIR? Something that checks to see if it's well formed?
2:04:42
drmeister
I'm suspecting that a writeCell is being invoked before a makeCell - but I'm not sure.
2:04:49
Bike
if you mean for stuff like "a cell is created before it's used" that's a little hard to check
2:12:00
drmeister
The stack above that call is weird - there are bad tagged pointers for function calls.
2:17:13
drmeister
I'm going to have the undergrads who are working on the UI stuff work with a development system running in docker.
3:14:30
Bike
new kildall works with the type inference, which has reminded me again that i need to fix ast-to-hir or something, because the proliferation of temps is absurd even if llvm will kill them later
3:57:04
Bike
it means i changed how kildall works, and then changed how the type inference built on kildall works to match it.
4:04:19
drmeister
I'll have to leave this new problem with code generation until next week - I have to focus on yet another grant proposal.
4:08:28
drmeister
You say when they begin and end their lifetime. It should be easy to generate that information.
4:09:49
Bike
yeah. but after segregate lexicals. because what "lifetime" means when a variable is in multiple functions isn't as obvious.
4:10:27
drmeister
So you have lifetime for variables that are in one function. There is no concept of variables in multiple functions in llvm.
4:12:58
drmeister
Could it be preserved to code generation? Say in a way that we know for a particular instruction that a variable has just come alive and the instruction after which it is no longer alive?
4:13:33
Bike
clasp computes it here https://github.com/drmeister/clasp/blob/dev/src/lisp/kernel/cleavir/translate.lisp#L957 but it can be done any time after process-captured-variables.
4:15:17
Bike
it could be recomputed, yeah. i don't know what you want to use it for so i don't know what the consequences would be.
4:15:36
Bike
i've been thinking a bit about how to do hir transformations while preserving information like that more scrupulously, but i haven't done any work.
4:16:32
Bike
the liveness object is just a hash table (actually two) from instructions to lists of lexical locations live there, i don't know if that's convenient.
4:16:35
drmeister
Interesting: https://www.phoronix.com/scan.php?page=news_item&px=LLVM-EfficiencySanitizer
4:21:21
drmeister
I can't find it right now - but there is a web page that suggests basic things that compiler writers should incorporate when using llvm. Specifying liveness of lexical variables was one of them
4:30:48
drmeister
??? is a JITted Cleavir function calling a generic function Instance::entry_point with a C-calling convention call.
4:31:32
drmeister
standard_dispatch looks up the effective method and invokes apply_method, passing arguments in a VaList_S* tagged pointer (no arguments copied)
4:32:07
drmeister
apply_method invokes funcall_consume_valist_ which calls funcall_va_list_8 (arguments are copied)
4:33:02
drmeister
That involves invoking apply_method /funcall_consume_valist_, funcall_va_list_8 (arguments are copied)
4:34:13
drmeister
They need to be copied once because the arguments list and list of next methods get prepended to the arguments.
4:36:23
drmeister
In the common case where there is a single method one of those argument copies could be eliminated and COMBINE-METHOD-FUNCTIONS3.LAMBDA could be skipped.