annotate gcc/jit/TODO.rst @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 TODOs
kono
parents:
diff changeset
2 -----
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 API
kono
parents:
diff changeset
5 ===
kono
parents:
diff changeset
6 * error-handling:
kono
parents:
diff changeset
7 * have a client-provided error-handling callback for the context, and
kono
parents:
diff changeset
8 call it, rather than asserting/crashing etc, to make the API resilient and helpful
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10 * probably should turn off signal handlers and backtracing, leaving that to
kono
parents:
diff changeset
11 the client code
kono
parents:
diff changeset
12
kono
parents:
diff changeset
13 * enums and ABI: give enums specific numbers, in ranges, to make it
kono
parents:
diff changeset
14 possible to maintain a logical ordering whilst preserving ABI.
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 * expose the statements in the API? (mostly so they can be stringified?)
kono
parents:
diff changeset
17
kono
parents:
diff changeset
18 * support more arithmetic ops and comparison modes
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 * access to a function by address::
kono
parents:
diff changeset
21
kono
parents:
diff changeset
22 extern gcc_jit_function *
kono
parents:
diff changeset
23 gcc_jit_context_get_function (ctxt,
kono
parents:
diff changeset
24 void *); /* need type information */
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 so you can access "static" fns in your code.
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 * ability to turn a function into a function pointer::
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 gcc_jit_function_as_rvalue ()
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 * expressing branch probabilies (like __builtin_expect)::
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 extern gcc_jit_rvalue *
kono
parents:
diff changeset
35 gcc_jit_rvalue_likely (gcc_jit_rvalue *rvalue,
kono
parents:
diff changeset
36 int is_likely);
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 though would:
kono
parents:
diff changeset
39
kono
parents:
diff changeset
40 extern void
kono
parents:
diff changeset
41 gcc_jit_block_set_likelihood (gcc_jit_block *block,
kono
parents:
diff changeset
42 int hotness);
kono
parents:
diff changeset
43
kono
parents:
diff changeset
44 be better? (for expressing how hot the current location is)
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 * add a SONAME to the library (and potentially version the symbols?)
kono
parents:
diff changeset
47
kono
parents:
diff changeset
48 * do we need alternative forms of division (floor vs rounding)?
kono
parents:
diff changeset
49
kono
parents:
diff changeset
50 * are we missing any ops?
kono
parents:
diff changeset
51
kono
parents:
diff changeset
52 * error-checking:
kono
parents:
diff changeset
53
kono
parents:
diff changeset
54 * gcc_jit_context_new_unary_op: various checks needed
kono
parents:
diff changeset
55
kono
parents:
diff changeset
56 * gcc_jit_context_new_binary_op: various checks needed
kono
parents:
diff changeset
57
kono
parents:
diff changeset
58 * gcc_jit_context_new_comparison: must be numeric or pointer types
kono
parents:
diff changeset
59
kono
parents:
diff changeset
60 * gcc_jit_context_new_array_access: "index" must be of numeric type.
kono
parents:
diff changeset
61
kono
parents:
diff changeset
62 * gcc_jit_lvalue_access_field: must be field of correct struct
kono
parents:
diff changeset
63
kono
parents:
diff changeset
64 * gcc_jit_rvalue_access_field: must be field of correct struct
kono
parents:
diff changeset
65
kono
parents:
diff changeset
66 * gcc_jit_block_add_assignment_op: check the types
kono
parents:
diff changeset
67
kono
parents:
diff changeset
68 * Implement more kinds of casts e.g. pointers
kono
parents:
diff changeset
69
kono
parents:
diff changeset
70 Bugs
kono
parents:
diff changeset
71 ====
kono
parents:
diff changeset
72 * fixing all the state issues: make it work repeatedly with optimization
kono
parents:
diff changeset
73 turned up to full.
kono
parents:
diff changeset
74
kono
parents:
diff changeset
75 * make the dirty dirty hacks less egregious...
kono
parents:
diff changeset
76
kono
parents:
diff changeset
77 * test under valgrind; fix memory leaks
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 * re-architect gcc so we don't have to reinitialize everything every time
kono
parents:
diff changeset
80 a context is compiled
kono
parents:
diff changeset
81
kono
parents:
diff changeset
82 Test suite
kono
parents:
diff changeset
83 ==========
kono
parents:
diff changeset
84 * measure code coverage in testing of libgccjit.so
kono
parents:
diff changeset
85
kono
parents:
diff changeset
86 Future milestones
kono
parents:
diff changeset
87 =================
kono
parents:
diff changeset
88 * try porting llvmpipe to gcc
kono
parents:
diff changeset
89
kono
parents:
diff changeset
90 * inline assembler?
kono
parents:
diff changeset
91
kono
parents:
diff changeset
92 * Detect and issue warnings/errors about uses of uninitialized variables
kono
parents:
diff changeset
93
kono
parents:
diff changeset
94 * Warn about unused objects in a context (e.g. rvalues/lvalues)? (e.g.
kono
parents:
diff changeset
95 for gcc_jit_context_new_call vs gcc_jit_block_add_eval)
kono
parents:
diff changeset
96
kono
parents:
diff changeset
97 Nice to have
kono
parents:
diff changeset
98 ============
kono
parents:
diff changeset
99 * Currently each function has a single stmt_list, which is built in
kono
parents:
diff changeset
100 postprocessing by walking the list of blocks. Presumably we could
kono
parents:
diff changeset
101 have each block have its own stmt_list, avoiding the need for this
kono
parents:
diff changeset
102 traversal, and having the block structure show up within tree dumps.
kono
parents:
diff changeset
103 Alternatively, could we skip tree and go straight to gimple?
kono
parents:
diff changeset
104
kono
parents:
diff changeset
105 * ability to give contexts names, for ease of debugging?
kono
parents:
diff changeset
106
kono
parents:
diff changeset
107
kono
parents:
diff changeset
108 Probably not needed
kono
parents:
diff changeset
109 ===================
kono
parents:
diff changeset
110 * "switch" and "case" ?
kono
parents:
diff changeset
111
kono
parents:
diff changeset
112 * sizeof (should this be an API hook?) do we even need it? presumably
kono
parents:
diff changeset
113 client code can just do the sizeof() in its own code.
kono
parents:
diff changeset
114
kono
parents:
diff changeset
115 * do we need unary plus?
kono
parents:
diff changeset
116
kono
parents:
diff changeset
117 etc etc