118 lines
3.2 KiB
ReStructuredText
118 lines
3.2 KiB
ReStructuredText
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
|