diff options
Diffstat (limited to 'Documentation/TODO.md')
| -rw-r--r-- | Documentation/TODO.md | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/Documentation/TODO.md b/Documentation/TODO.md new file mode 100644 index 00000000..cbda1c39 --- /dev/null +++ b/Documentation/TODO.md @@ -0,0 +1,98 @@ +TODO +==== + +Essential +--------- +* SSA is broken by simplify_loads() & branches rewriting/simplification +* attributes of struct, union & enums are ignored (and possibly in other + cases too). +* add support for bitwise enums + +Documentation +------------- +* document the extensions +* 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 +* Previous declarations and the definition need to be merged. For example, + in the code here below, the function definition is **not** static: + ``` + static void foo(void); + void foo(void) { ... } + ``` + +Testsuite +-------- +* there are more than 50 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 __builtin_unreachable() +* add support for format(printf()) (WIP by Ben Dooks) +* make use of UNDEFs (issues warnings, simplification, ... ?) +* add a pass to inline small functions during simplification. + +Optimization +------------ +* the current way of doing CSE uses a lot of time +* add SSA based DCE +* add SSA based PRE +* Add SSA based SCCP +* use better/more systematic use of internal verification framework + +IR +-- +* 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 +----------------- +* add some basic register allocation +* add a pass to transform 3-addresses code to 2-addresses +* what can be done for x86? + +Longer term/to investigate +-------------------------- +* better architecture handling than current machine.h + target.c +* 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 have elements be removed while being iterated but this + is hard to insure it is not done. +* 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. |
