comparison presen/advice.txt~ @ 65:baace77d7d30

add some pix files
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Thu, 29 Dec 2011 00:39:01 +0900
parents
children
comparison
equal deleted inserted replaced
64:743afe406e56 65:baace77d7d30
1 Continuation
2 ベーシック
3
4 環境付き継続が普通。
5 schemeとの継続は違う
6 light-weight
7 スタック
8 会議室
9 SICP のContinuation
10
11 Micro-C 2001 年
12 『GCC上の』をつける。
13 『行った~』くらいに。赤いみない。
14
15 難しいところがどこで、どうやって解決し方。
16
17 フルセットのCに
18 C with Continuation
19 それを制限するとContinuation Based Cになる。
20
21 より高度に最適化。。。の部分は外す。
22
23 どのパス
24
25 コンパイラは幾つかパスを通る。
26 そのたんびにTree
27
28 トレースをだす。
29 GCC をいじるというのはどういうことなのかをいいたい。
30 execute_pass_list: 1616
31
32 passes.c:1558
33 execute_one_pass() を読んでないと行けない。
34
35 pass_execute
36
37 pass の前後でデバッグオプションがあるから
38
39 NEXT_PASS はオプティマイゼーションパス
40
41 passes.c:
42 do_per_function()
43 IPAモード関数単位でしかコンパイルしない場合…?。
44
45 NEXT_PASS
46
47 OpenMP 様
48
49 eh = error handler
50 worn_function_return はcbCなのにreturn
51
52 NEXT_PASS (pass_build_ssa);
53
54 昔はGIMPLEは残っていたけど、消されてはまった。
55
56 INter procedure Optimization
57 (ipa)
58
59 CbC だとほとんど使わないはず。
60 なので、CbC で書いたほうが性能が悪くなる可能性がある。
61
62 SSAからgimpleにもどす。
63 昔はいきなりRTLに変換していた 
64 SSAをRTLに変換するルーチン
65
66
67 cse
68 common se… elimination
69 共通部分の最適化
70
71
72 pass の中でコード生成されていたと思うので。
73 最終的にコード生成のところまでいくのはながい。
74
75
76 SSAからgimpleに戻しているところがあるはず…
77 gimple_expand cfg
78
79
80
81
82 pass_expand から
83 call_expand は gimple から rtl を生成しているはず。
84 こっから下は
85
86
87 rtlをSSAに変換しているアホがいる。
88 そこのスライドはこのパスにそって説明する必要がある。
89
90
91 pass_expandから上としたは全然ちがう。
92 call_expandはgimpleだけど途中SSAに変換してgimpleに戻す。
93
94
95 実際にpass_listがあって、そのpass_listの中でexpand_callがどこにあるのかっていうのを説明してほしい。
96 なぜか、プログラミングシンポジウムはハッカーの為の詳細なので、
97 GCCを今いじるならどんなふうにいじるのか。
98
99
100 自分が以下にGCCを理解しているのかを行って欲しい。
101
102
103
104
105 実際は
106 gotoとなってるけど、単にfactorialと書いたのと同じだよね。
107 factorial0()
108
109
110 goto factorial()
111 だとtail recursive call が矯正される。
112
113
114
115 右側のgoto はとる。
116
117
118 実際にどんな引数渡しになるのか。
119 micro-C ベースのやつがレジスタ渡しだったのでださいコンパイラに負けるということになった。
120 Intel64はレジスタが増えた。レジスタ16になったから増えた。
121
122
123
124
125 basic.c は引数渡しに使われるレジスタの数を調べる。
126
127
128 表にする。
129 i386
130 ia64
131
132
133 引数は浮動小数点と整数があるよね。その浮動小数点と整数の2つを。
134
135
136
137
138 環境付き継続がの説明のスライド。
139 本来はクロージャである必要はない。
140 GCCで
141 setjmpで実装しても問題はあまり変わらなくて。
142 それでどうなるか、static を使うと
143 thread local な static だったらうまくいくのでは。
144
145
146 setjmpでない普通のやつを先に。
147 setjmpのソースは
148 どうやって生成しているかのソースを内部的に生成しているのをみせてもいいと。
149
150
151 問題は return val 。だから意味がない。
152 setjmp
153 重要なのはretval。
154 これでない
155
156
157 問題はreturn val がmainの中の環境にある。
158 これが普通のローカル変数だと、tail recurcive でぬけると駄目になる。だからstatic にしないといけない。
159 static にすればこれを
160 なぜまずかったのか。mainから tail recursive call で抜けてるからまずい。普通にcallすれば生きてるので、
161 クロージャを使ってうまくできると…
162
163
164 mainで抜ける所で
165 goto は二種類。
166 普通の関数からgotoする場合。
167 コードセグメントからgotoする場合で実装が違う。
168
169
170 statci tls をスレッドローカルにすればいんだけど、実際には決まったレジスタにすればいい。
171 レジスタとは->リターンするレジスタ
172
173
174 書きこむ先は相手側にあるので関係ない。
175 それをそっちの方にコピーするってのはどっかそのへんでやっている。
176 多分return 文の中でコピーする。
177 return は
178 正しく構造体の戻り値を指していればいいだけで、
179
180
181 引数がついている。
182 構造体の場合は引数で一個呼ばれているのでその引数をとっておかないといけなくて。
183 実は引数、 evnpがついてる。
184 値を返す evnp がさしてる allocate させてるところにおいてもいい。
185
186
187 evnpni
188
189
190 Micro-C ではフレームポインタが入っている。
191 実装ではフレームピオンタが入っている。
192
193
194 さっき行ったとおり、return val はレジスタでいいので、return レジスタ
195 simple return;
196 return だけで戻る。
197 前にレジスタを設定したので戻ってくると。
198
199
200 関数の戻りからの動作はおもいので、
201 goto 剃る前にはレジスタの値がきまっているはず。
202
203
204 return val があればbuild1 で
205
206
207 if(0)なので中にはいってこない。このコードが最適化で消えないように工夫しないといけない。
208 最適化をかけるとここがきえちゃう。消えないようにCOND をいれて〜とかある。
209
210
211 cbc_exit0: が外から
212 TREE_used とか
213 c_decl_flag_label
214
215
216 最適化で消えちゃわないようになってる。
217
218
219 最適化かけてうまく動かなかいのはこのコードが消されちゃうから。
220 そのあたりをチェック。
221
222
223 setjmp 使えば常にもどれるので。
224 CbCのなかでsetjmp してlongjmp をかいてももどれる。
225
226
227
228
229 CbC バージョン GCC バージョン
230 typedef
231
232
233 __rectype
234 __selftype
235
236
237 それを入れるためにはどうすればいいのかっていうのも議論すればいい。
238
239
240 typdef をやると、先輩たちがやって
241 もちろん両方。
242