aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Documentation/TODO.md
diff options
Diffstat (limited to 'Documentation/TODO.md')
-rw-r--r--Documentation/TODO.md98
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.