annotate gcc/jit/notes.txt @ 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 Client Code . Generated . libgccjit.so
kono
parents:
diff changeset
2 . code .
kono
parents:
diff changeset
3 . . JIT API . JIT "Frontend". (libbackend.a)
kono
parents:
diff changeset
4 ....................................................................................
kono
parents:
diff changeset
5 │ . . . .
kono
parents:
diff changeset
6 ──────────────────────────> . .
kono
parents:
diff changeset
7 . . │ . .
kono
parents:
diff changeset
8 . . V . .
kono
parents:
diff changeset
9 . . ──> libgccjit.c .
kono
parents:
diff changeset
10 . . │ (error-checking).
kono
parents:
diff changeset
11 . . │ .
kono
parents:
diff changeset
12 . . ──> jit-recording.c
kono
parents:
diff changeset
13 . . (record API calls)
kono
parents:
diff changeset
14 . . <─────── .
kono
parents:
diff changeset
15 . . │ . .
kono
parents:
diff changeset
16 <─────────────────────────── . .
kono
parents:
diff changeset
17 │ . . . .
kono
parents:
diff changeset
18 │ . . . .
kono
parents:
diff changeset
19 V . . gcc_jit_context_compile .
kono
parents:
diff changeset
20 ──────────────────────────> . .
kono
parents:
diff changeset
21 . . │ start of recording::context::compile ()
kono
parents:
diff changeset
22 . . │ . .
kono
parents:
diff changeset
23 . . │ start of playback::context::compile ()
kono
parents:
diff changeset
24 . . │ (create tempdir) .
kono
parents:
diff changeset
25 . . │ . .
kono
parents:
diff changeset
26 . . │ ACQUIRE MUTEX .
kono
parents:
diff changeset
27 . . │ . .
kono
parents:
diff changeset
28 . . V───────────────────────> toplev::main (for now)
kono
parents:
diff changeset
29 . . . . │
kono
parents:
diff changeset
30 . . . . (various code)
kono
parents:
diff changeset
31 . . . . │
kono
parents:
diff changeset
32 . . . . V
kono
parents:
diff changeset
33 . . . <───────────────── langhook:parse_file
kono
parents:
diff changeset
34 . . . │ .
kono
parents:
diff changeset
35 . . . │ (jit_langhook_parse_file)
kono
parents:
diff changeset
36 . . . │ .
kono
parents:
diff changeset
37 ..........................................│..................VVVVVVVVVVVVV...
kono
parents:
diff changeset
38 . . . │ . No GC in here
kono
parents:
diff changeset
39 . . . │ jit-playback.c
kono
parents:
diff changeset
40 . . . │ (playback of API calls)
kono
parents:
diff changeset
41 . . . ───────────────> creation of functions,
kono
parents:
diff changeset
42 . . . . types, expression trees
kono
parents:
diff changeset
43 . . . <──────────────── etc
kono
parents:
diff changeset
44 . . . │(handle_locations: add locations to
kono
parents:
diff changeset
45 . . . │ linemap and associate them with trees)
kono
parents:
diff changeset
46 . . . │ .
kono
parents:
diff changeset
47 . . . │ . No GC in here
kono
parents:
diff changeset
48 ..........................................│..................AAAAAAAAAAAAA...
kono
parents:
diff changeset
49 . . . │ for each function
kono
parents:
diff changeset
50 . . . ──> postprocess
kono
parents:
diff changeset
51 . . . │ .
kono
parents:
diff changeset
52 . . . ────────────> cgraph_finalize_function
kono
parents:
diff changeset
53 . . . <────────────
kono
parents:
diff changeset
54 . . . <── .
kono
parents:
diff changeset
55 . . . │ .
kono
parents:
diff changeset
56 . . . ──────────────────> (end of
kono
parents:
diff changeset
57 . . . . │ langhook_parse_file)
kono
parents:
diff changeset
58 . . . . │
kono
parents:
diff changeset
59 . . . . (various code)
kono
parents:
diff changeset
60 . . . . │
kono
parents:
diff changeset
61 . . . . ↓
kono
parents:
diff changeset
62 . . . <───────────────── langhook:write_globals
kono
parents:
diff changeset
63 . . . │ .
kono
parents:
diff changeset
64 . . . │ (jit_langhook_write_globals)
kono
parents:
diff changeset
65 . . . │ .
kono
parents:
diff changeset
66 . . . │ .
kono
parents:
diff changeset
67 . . . ──────────────────> finalize_compilation_unit
kono
parents:
diff changeset
68 . . . . │
kono
parents:
diff changeset
69 . . . . (the middle─end and backend)
kono
parents:
diff changeset
70 . . . . ↓
kono
parents:
diff changeset
71 . . <───────────────────────────── end of toplev::main
kono
parents:
diff changeset
72 . . │ . .
kono
parents:
diff changeset
73 . . V───────────────────────> toplev::finalize
kono
parents:
diff changeset
74 . . . . │ (purge internal state)
kono
parents:
diff changeset
75 . . <──────────────────────── end of toplev::finalize
kono
parents:
diff changeset
76 . . │ . .
kono
parents:
diff changeset
77 . . V─> playback::context::postprocess:
kono
parents:
diff changeset
78 . . │ . .
kono
parents:
diff changeset
79 . . │ (assuming an in-memory compile):
kono
parents:
diff changeset
80 . . │ . .
kono
parents:
diff changeset
81 . . --> Convert assembler to DSO, via embedded
kono
parents:
diff changeset
82 . . copy of driver:
kono
parents:
diff changeset
83 . . driver::main ()
kono
parents:
diff changeset
84 . . invocation of "as"
kono
parents:
diff changeset
85 . . invocation of "ld"
kono
parents:
diff changeset
86 . . driver::finalize ()
kono
parents:
diff changeset
87 . . <----
kono
parents:
diff changeset
88 . . │ . .
kono
parents:
diff changeset
89 . . │ . Load DSO (dlopen "fake.so")
kono
parents:
diff changeset
90 . . │ . .
kono
parents:
diff changeset
91 . . │ . Bundle it up in a jit::result
kono
parents:
diff changeset
92 . . <── . .
kono
parents:
diff changeset
93 . . │ . .
kono
parents:
diff changeset
94 . . │ RELEASE MUTEX .
kono
parents:
diff changeset
95 . . │ . .
kono
parents:
diff changeset
96 . . │ end of playback::context::compile ()
kono
parents:
diff changeset
97 . . │ . .
kono
parents:
diff changeset
98 . . │ playback::context dtor
kono
parents:
diff changeset
99 . . ──> . .
kono
parents:
diff changeset
100 . . │ Normally we cleanup the tempdir here:
kono
parents:
diff changeset
101 . . │ ("fake.so" is unlinked from the
kono
parents:
diff changeset
102 . . │ filesystem at this point)
kono
parents:
diff changeset
103 . . │ If the client code requested debuginfo, the
kono
parents:
diff changeset
104 . . │ cleanup happens later (in gcc_jit_result_release)
kono
parents:
diff changeset
105 . . │ to make it easier on the debugger (see PR jit/64206)
kono
parents:
diff changeset
106 . . <── . .
kono
parents:
diff changeset
107 . . │ . .
kono
parents:
diff changeset
108 . . │ end of recording::context::compile ()
kono
parents:
diff changeset
109 <─────────────────────────── . .
kono
parents:
diff changeset
110 │ . . . .
kono
parents:
diff changeset
111 V . . gcc_jit_result_get_code .
kono
parents:
diff changeset
112 ──────────────────────────> . .
kono
parents:
diff changeset
113 . . │ dlsym () within loaded DSO
kono
parents:
diff changeset
114 <─────────────────────────── . .
kono
parents:
diff changeset
115 Get (void*). . . .
kono
parents:
diff changeset
116 │ . . . .
kono
parents:
diff changeset
117 │ Call it . . . .
kono
parents:
diff changeset
118 ───────────────> . . .
kono
parents:
diff changeset
119 . │ . . .
kono
parents:
diff changeset
120 . │ . . .
kono
parents:
diff changeset
121 <─────────────── . . .
kono
parents:
diff changeset
122 │ . . . .
kono
parents:
diff changeset
123 etc│ . . . .
kono
parents:
diff changeset
124 │ . . . .
kono
parents:
diff changeset
125 V . . gcc_jit_result_release .
kono
parents:
diff changeset
126 ──────────────────────────> . .
kono
parents:
diff changeset
127 . . │ dlclose () the loaded DSO
kono
parents:
diff changeset
128 . . │ (code becomes uncallable)
kono
parents:
diff changeset
129 . . │ . .
kono
parents:
diff changeset
130 . . │ If the client code requested debuginfo, then
kono
parents:
diff changeset
131 . . │ cleanup of the tempdir was delayed.
kono
parents:
diff changeset
132 . . │ If that was the case, clean it up now.
kono
parents:
diff changeset
133 <─────────────────────────── . .
kono
parents:
diff changeset
134 │ . . . .