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.