freenode/#clasp - IRC Chatlog
Search
21:21:45
Bike
that would work except simple-vector doesn't work like that. it would be (simple-array byte32 (*)) i think.
21:51:54
drmeister
I hope it means that (subtypep 'core:simple-vector-byte8-t 'vector) will now return T
21:52:56
drmeister
https://github.com/drmeister/clasp/blob/dev/src/lisp/kernel/lsp/predlib.lsp#L1252
3:46:23
Bike
i wrote eliminate-superfluous-temporaries again. on a big function it takes ~55 ms and reduces the number of variables 43%, and the time for mark-dynamic-extent by about the same fraction. so i should probably see about testing it thoroughly for incorporation
3:47:59
beach
Sounds good. I hope you used the correct definition of "superfluous", unlike what I did in the first version.
3:49:07
Bike
well basically what it does is, it looks at all inputs to all instructions, and if the instruction is dominated by an assignment to an input, it replaces that input with whatever the input to the assignment is.
3:49:35
Bike
so i think it's correct. i actually made it dumber than it could be because i figured it would be enough (and was apparently correct)
3:50:11
beach
I am unable to determine in real time whether that is correct, so I need time to think about it.
3:51:38
beach
Also, we should be careful. Current register-allocation algorithms assign a permanent location for a lexical variable, either in a register or on the stack. Eliminating temporaries might make it impossible to spill some variable around a loop, for instance.
3:54:54
Bike
i don't know about that, but there needs to be something or a lot of analysis is harder than it needs to be.
3:55:24
Bike
currently something like (when (typeq c cons) (+ (car c) (cdr c))) does three checks because the temps obscure type information.
3:57:43
Bike
and then the temp is never used again, so the information about temp being a cons is irrelevant later.
3:58:50
Bike
information is lost. the car and cdr forms just check C, which has no information associated with it.
4:00:37
Bike
so to do anything helpful something has to know that c and temp have the same value at the car and cdr forms. the obvious way of doing that is eliminating the temp
4:01:42
Bike
it would be relevant for THE, and i guess semantics around the and typeq could be rearranged somehow
4:02:20
Bike
you mean propagating type information in the reverse direction from control flow, right? typeq doesn't imply anything about the type of its argument before the typeq is executed, see.
4:02:49
beach
It seems to me that in the true branch of the TYPEQ, it ought to be possible to decide that the type of C is the same as that of TEMP.
4:03:58
Bike
if value numbering means tracking sets of variables that have the same value at given control points, that's what eliminate-superfluous-temporaries does.
4:04:06
beach
It is able to determine that two lexical locations contain the same value at particular control points.
4:05:14
beach
Given the papers I have read, I seriously doubt that your simple technique covers the general case.
4:06:48
beach
From what I have read, Kildall's algorithm is the only one that really works for global value numbering. But it has to be the right domain.
4:08:45
beach
It is bound to be very complicated in the presence of nested functions that can be executed in separate threads, and such.
4:10:08
Bike
well, it is kildall. but again, i made it really simple, there's no way it does the complete thing. I mostly just wanted to fix obvious cases like (foo x) having a temp.
4:11:16
beach
Sure. What I am saying is that it might be worthwhile for you to read up on global value numbering and contemplate how it would work in the presence of complex control structures like we have. On paid time, obviously! :)
4:11:59
beach
Global value numbering is certainly one analysis that Cleavir should provide to its clients.
4:12:39
Bike
i tried rewriting it (ast-to-hir) but i think i've convinced myself that's not the way to go
4:14:08
Bike
it looks like global value numbering is also supposed to work with operations, like if x = y then (car x) = (car y), which seems a good deal trickier
4:15:45
beach
But it could be worthwhile. I often write things like (car x) several times rather than introducing a temporary.
4:16:27
beach
Again, it gets tricky in the presence of threads and other complex control structures.
4:17:59
Bike
well, for a start i can ignore cells, which makes it easier. i'm still not sure what to do with cells in general