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.