Skip to content
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-from redesign - 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)

Clone this wiki locally