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.