diff options
author | John Hodge <tpg@ucc.asn.au> | 2019-05-15 21:44:05 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2019-05-15 21:44:05 +0800 |
commit | c4b5f0abb1b67e7f691c105841ce6e37fe2b0432 (patch) | |
tree | f8449e885bb2506b143f81cb70d8244e1e2ff0cf | |
parent | 0f59ded4389202468dd5bcb420724395afbfe1f7 (diff) | |
download | mrust-c4b5f0abb1b67e7f691c105841ce6e37fe2b0432.tar.gz |
Updates to TODO list
-rw-r--r-- | Notes/todo.txt | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Notes/todo.txt b/Notes/todo.txt index 7041c8b9..edc0074e 100644 --- a/Notes/todo.txt +++ b/Notes/todo.txt @@ -18,12 +18,28 @@ TODO: - Refactor parse to use a consume model lexer - Optimise optimise (and typecheck) - Complete structed C codegen +- Switch MIR to be SSA (or have a SSA form) +- MIR restructure specified in MIR-PackedLValue.txt + - Designed to remove pointer chasing when doing MIR analyis (and save space) ## Smaller changes - Only generate destructors if needed (removes C warnings) - Cache specialisation tree - Dependency files from mrustc - Partally done, not complete +- Replace all std::string-s with RcString (saves memory) + - Also use a string interning pool to de-duplicate identical strings (which + will be common) + - Copies of strings are relatively common (path copies) +- Delete HIR after MIR generation +- Use a more space-efficient (and readable) MIR LValue debug output + - e.g. `_0**.1#2` for Downcast(2, Field(1, Deref(Deref(Local(0))))) + - Will simplify reading of debug, and reduce the size of required debug + output + - Trailing dereference might be confusing with multiply operator? +- Cache referenced items for each function in `Trans Enumerate` + - Should reduce the impact of large generic functions being walked every + time they're used with a new type set. ## Optimisations @@ -32,4 +48,9 @@ TODO: - Dead assignment removal (Delete `<val> = Use(<val>)` - Tuple destructure removal - Spot `#1 = (...,)`, `#2 = (#1).n` where #1 is Write-once, borrow-none +- Remove useless borrows (remove write-once &T lvalues if they're never used by + value - only used via deref) + +<!-- vim: ft=markdown +--> |