| TODOs |
| ----- |
| |
| API |
| === |
| * error-handling: |
| * have a client-provided error-handling callback for the context, and |
| call it, rather than asserting/crashing etc, to make the API resilient and helpful |
| |
| * probably should turn off signal handlers and backtracing, leaving that to |
| the client code |
| |
| * enums and ABI: give enums specific numbers, in ranges, to make it |
| possible to maintain a logical ordering whilst preserving ABI. |
| |
| * expose the statements in the API? (mostly so they can be stringified?) |
| |
| * support more arithmetic ops and comparison modes |
| |
| * access to a function by address:: |
| |
| extern gcc_jit_function * |
| gcc_jit_context_get_function (ctxt, |
| void *); /* need type information */ |
| |
| so you can access "static" fns in your code. |
| |
| * ability to turn a function into a function pointer:: |
| |
| gcc_jit_function_as_rvalue () |
| |
| * expressing branch probabilies (like __builtin_expect):: |
| |
| extern gcc_jit_rvalue * |
| gcc_jit_rvalue_likely (gcc_jit_rvalue *rvalue, |
| int is_likely); |
| |
| though would: |
| |
| extern void |
| gcc_jit_block_set_likelihood (gcc_jit_block *block, |
| int hotness); |
| |
| be better? (for expressing how hot the current location is) |
| |
| * add a SONAME to the library (and potentially version the symbols?) |
| |
| * do we need alternative forms of division (floor vs rounding)? |
| |
| * are we missing any ops? |
| |
| * error-checking: |
| |
| * gcc_jit_context_new_unary_op: various checks needed |
| |
| * gcc_jit_context_new_binary_op: various checks needed |
| |
| * gcc_jit_context_new_comparison: must be numeric or pointer types |
| |
| * gcc_jit_context_new_array_access: "index" must be of numeric type. |
| |
| * gcc_jit_lvalue_access_field: must be field of correct struct |
| |
| * gcc_jit_rvalue_access_field: must be field of correct struct |
| |
| * gcc_jit_block_add_assignment_op: check the types |
| |
| * Implement more kinds of casts e.g. pointers |
| |
| Bugs |
| ==== |
| * fixing all the state issues: make it work repeatedly with optimization |
| turned up to full. |
| |
| * make the dirty dirty hacks less egregious... |
| |
| * test under valgrind; fix memory leaks |
| |
| * re-architect gcc so we don't have to reinitialize everything every time |
| a context is compiled |
| |
| Test suite |
| ========== |
| * measure code coverage in testing of libgccjit.so |
| |
| Future milestones |
| ================= |
| * try porting llvmpipe to gcc |
| |
| * inline assembler? |
| |
| * Detect and issue warnings/errors about uses of uninitialized variables |
| |
| * Warn about unused objects in a context (e.g. rvalues/lvalues)? (e.g. |
| for gcc_jit_context_new_call vs gcc_jit_block_add_eval) |
| |
| Nice to have |
| ============ |
| * Currently each function has a single stmt_list, which is built in |
| postprocessing by walking the list of blocks. Presumably we could |
| have each block have its own stmt_list, avoiding the need for this |
| traversal, and having the block structure show up within tree dumps. |
| Alternatively, could we skip tree and go straight to gimple? |
| |
| * ability to give contexts names, for ease of debugging? |
| |
| |
| Probably not needed |
| =================== |
| * "switch" and "case" ? |
| |
| * sizeof (should this be an API hook?) do we even need it? presumably |
| client code can just do the sizeof() in its own code. |
| |
| * do we need unary plus? |
| |
| etc etc |