Repository navigation
TODO
Alex Wood edited this page Nov 19, 2022
·
1 revision
- Code cleanup
- Fork/move source-level stuff (e.g. code-walker? AST-to-source? maybe even AST stuff generally)?
- Chopping block: BIR-to-CL. Flow? Graph? Liveness? Def-use-chains, dominance, loops, and reaching-definitions at least require more thought. Not sure I know how to write them without an actual use case.
- Tests
- AST should be reasonably stable now: Fix up cst-to-ast tests
- Tests for ast-to-bir, more
- Write up a github workflow to automate
- BIR cleanup
- Remove typeq (replace w/ understanding of typep calls from client)
- Remove eq-test if possible (harder because of important
(if (eq x nil) y z) => (if x z y)transform - could be done as(if (if x nil t) y z)followed by if-if elimination, but I don't like relying on if-if elimination) -
come-fromredesign - direct succession, make catch links something other than successors - "sea of nodes" or weaker control flow. good for LICM and otherwise
- Come up with a design less susceptible to cache invalidation bugs. Ideally, effortlessly thread safe too
- Backend
- Port representation selection, primops, deftransform from clasp
- Provide defaults/etc library for use by clients (or is Typo it already?)
- Improve representation selection algorithm (it's not very good right now)
- register-allocation: Check on what nodefunallowed/SICL's been doing
- Abstract interpretation
- Ideally, replace meta-evaluate with AI
- Performance evaluation
- Optimizations
- LICM
- CSE/GVN
- DX inference
- Control-flow analyses w/AI generally (type inference w/variables)
- SSA? Probably easier than control-flow sensitive AI, but doesn't cover closure variables, but how often can we really do anything with closure variables that wouldn't be covered by local-call info?
- Non-cartesian AI? (e.g. multivariable type constraints)