1 TODO 2 ==== 3 4 Essential 5 --------- 6 * SSA is broken by simplify_loads() & branches rewriting/simplification 7 * attributes of struct, union & enums are ignored (and possibly in other 8 cases too). 9 * add support for bitwise enums 10 11 Documentation 12 ------------- 13 * document the extensions 14 * document the API 15 * document the limitations of modifying ptrlists during list walking 16 * document the data structures 17 * document flow of data / architecture / code structure 18 19 Core 20 ---- 21 * if a variable has its address taken but in an unreachable BB then 22 its MOD_ADDRESSABLE may be wrong and it won't be SSA converted. 23 - let kill_insn() check killing of SYMADDR, 24 - add the sym into a list and 25 - recalculate the addressability before memops's SSA conversion 26 * bool_ctype should be split into internal 1-bit / external 8-bit 27 * Previous declarations and the definition need to be merged. For example, 28 in the code here below, the function definition is **not** static: 29 ``` 30 static void foo(void); 31 void foo(void) { ... } 32 ``` 33 34 Testsuite 35 -------- 36 * there are more than 50 failing tests. They should be fixed 37 (but most are non-trivial to fix). 38 39 Misc 40 ---- 41 * GCC's -Wenum-compare / clangs's -Wenum-conversion -Wassign-enum 42 * parse __attribute_((fallthrough)) 43 * add support for __builtin_unreachable() 44 * add support for format(printf()) (WIP by Ben Dooks) 45 * make use of UNDEFs (issues warnings, simplification, ... ?) 46 * add a pass to inline small functions during simplification. 47 48 Optimization 49 ------------ 50 * the current way of doing CSE uses a lot of time 51 * add SSA based DCE 52 * add SSA based PRE 53 * Add SSA based SCCP 54 * use better/more systematic use of internal verification framework 55 56 IR 57 -- 58 * OP_SET should return a bool, always 59 * add IR instructions for va_arg() & friends 60 * add a possibility to import of file in "IR assembly" 61 * dump the symtable 62 * dump the CFG 63 64 LLVM 65 ---- 66 * fix ... 67 68 Internal backends 69 ----------------- 70 * add some basic register allocation 71 * add a pass to transform 3-addresses code to 2-addresses 72 * what can be done for x86? 73 74 Longer term/to investigate 75 -------------------------- 76 * better architecture handling than current machine.h + target.c 77 * attributes are represented as ctypes's alignment, modifiers & contexts 78 but plenty of attributes doesn't fit, for example they need arguments. 79 * format(printf, ...), 80 * section("...") 81 * assume_aligned(alignment[, offsert]) 82 * error("message"), warning("message") 83 * ... 84 * should support "-Werror=..." ? 85 * All warning messages should include the option how to disable it. 86 For example: 87 "warning: Variable length array is used." 88 should be something like: 89 "warning: Variable length array is used. (-Wno-vla)" 90 * ptrlists must have elements be removed while being iterated but this 91 is hard to insure it is not done. 92 * having 'struct symbol' used to represent symbols *and* types is 93 quite handy but it also creates lots of problems and complications 94 * Possible mixup of symbol for a function designator being not a pointer? 95 This seems to make evaluation of function pointers much more complex 96 than needed. 97 * extend test-inspect to inspect more AST fields. 98 * extend test-inspect to inspect instructions.