| TODO |
| ==== |
| |
| Essential |
| --------- |
| * SSA is broken by simplify_loads() & branches rewriting/simplification |
| * add support for bitwise enums (wip) |
| |
| Documentation |
| ------------- |
| * document the API |
| * document the limitations of modifying ptrlists during list walking |
| * document the data structures |
| * document flow of data / architecture / code structure |
| |
| Core |
| ---- |
| * if a variable has its address taken but in an unreachable BB then |
| its MOD_ADDRESSABLE may be wrong and it won't be SSA converted. |
| - let kill_insn() check killing of SYMADDR, |
| - add the sym into a list and |
| - recalculate the addressability before memops's SSA conversion |
| * bool_ctype should be split into internal 1-bit / external 8-bit |
| |
| Testsuite |
| --------- |
| * there are 60 failing tests. They should be fixed |
| (but most are non-trivial to fix). |
| |
| Misc |
| ---- |
| * GCC's -Wenum-compare / clangs's -Wenum-conversion -Wassign-enum |
| * parse __attribute_((fallthrough)) |
| * add support for format(printf()) (WIP by Ben Dooks) |
| * make use of UNDEFs (issues warnings, simplification, ... ?) |
| * make memory accesses more explicit: add EXPR_ACCESS (wip) |
| * it would be nice to do our own parsing of floating point (wip) |
| * some header files needed for crypto/ need __vector or __fp16 |
| * some even need __complex |
| |
| Optimization |
| ------------ |
| * a lot of small simplifications are waiting to be upstreamed |
| * the domtree need to be rebuilt (or updated) |
| * critical edges need to be split |
| * the current way of doing CSE uses a lot of time |
| * add SSA based DCE |
| * add SSA based PRE |
| * Add SSA based SCCP |
| * add a pass to inline small functions during simplification. |
| * use better/more systematic use of internal verification framework |
| * tracking of operands size should be improved (WIP) |
| * OP_INLINE is sometimes in the way |
| * would be nice to strictly separate phases that don't changes the |
| CFG and thus the dominance tree. |
| |
| IR |
| -- |
| * pseudos are untyped, it's usually OK but often it complicates things: |
| |
| - PSEUDO_REGs are defined by instructions and their type is normally |
| retrievable via this defining instruction but in some cases they're not: |
| for example, pseudos defined by ASM output. |
| - PSEUDO_ARGs are considered as defined by OP_ENTRY and are used like |
| this for liveness trackability but their type can't simply be |
| retrieved via this instruction like PSEUDO_REGs are (with ->def->type). |
| - PSEUDO_VALs are completely typeless. |
| |
| Maybe a few bits should be used to store some kind of low-level type. |
| * OP_SET should return a bool, always |
| * add IR instructions for va_arg() & friends |
| * add a possibility to import of file in "IR assembly" |
| * dump the symtable |
| * dump the CFG |
| |
| LLVM |
| ---- |
| * fix ... |
| |
| Internal backends |
| ----------------- |
| * it would be nice the upstream the code generator |
| * add a pass to transform 3-addresses code to 2-addresses |
| * add some basic register allocation |
| * add a pass to order the BBs and changes 2-ways CBR into one-way branches |
| * what can be done for x86? |
| * add support to add constraints in the MD rules |
| |
| Longer term/to investigate |
| -------------------------- |
| * attributes are represented as ctypes's alignment, modifiers & contexts |
| but plenty of attributes doesn't fit, for example they need arguments. |
| * format(printf, ...), |
| * section("...") |
| * assume_aligned(alignment[, offsert]) |
| * error("message"), warning("message") |
| * ... |
| * should support "-Werror=..." ? |
| * All warning messages should include the option how to disable it. |
| For example: |
| |
| "warning: Variable length array is used." |
| |
| should be something like: |
| |
| "warning: Variable length array is used. (-Wno-vla)" |
| |
| * ptrlists must not have elements removed while being iterated; |
| this should somehow be enforced. |
| * having 'struct symbol' used to represent symbols *and* types is |
| quite handy but it also creates lots of problems and complications |
| * Possible mixup of symbol for a function designator being not a pointer? |
| This seems to make evaluation of function pointers much more complex |
| than needed. |
| * extend test-inspect to inspect more AST fields. |
| * extend test-inspect to inspect instructions. |