Mercurial > hg > Members > kaito > slides
comparison 2013/old/2013_06_15.html @ 0:845ff8ff4fc9
1st
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 14 Jan 2014 01:31:42 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:845ff8ff4fc9 |
---|---|
1 <!DOCTYPE html> | |
2 <html> | |
3 <head> | |
4 <meta charset='utf-8'> | |
5 | |
6 <script | |
7 src='./trunk/slides.js'></script> | |
8 </head> | |
9 | |
10 <body style='display: none'> | |
11 <section class='slides layout-regular template-default'> | |
12 | |
13 <article> | |
14 <h1>CbCコンパイラのLLVM3.4上での実装</h1> | |
15 <p><br>Kaito Tokumori<br>June 25, 2013</p> | |
16 </article> | |
17 | |
18 <article> | |
19 <br> | |
20 <h3> | |
21 研究目的 | |
22 </h3> | |
23 <ul> | |
24 <li>当研究室で開発しているContinuation based C(CbC)を用いたtail call eliminationの強制。</li> | |
25 <li>tail call eliminationにより、Cにおける大きなオーバーヘッドである関数呼び出しの際のreturnの削減。</li> | |
26 <li>goto文による処理の記述は状態遷移系とも相性が良い。</li> | |
27 <li>Micro-C,GCC版に次ぐllvmを使用したコンパイラの実装。</li> | |
28 </ul> | |
29 </article> | |
30 | |
31 <article> | |
32 <br> | |
33 <h3> | |
34 今週したこと | |
35 </h3> | |
36 <ul> | |
37 <li>拡張子がcbcのファイルをコンパイルできるように</li> | |
38 <li>拡張子がcbcのばあいにO2フラグの強制付与</li> | |
39 <li>llvmでtail call optimizationが行われる条件について調査</li> | |
40 </ul> | |
41 <br> | |
42 </article> | |
43 | |
44 <article> | |
45 <br> | |
46 <h3> | |
47 O2の付与 | |
48 </h3> | |
49 <ul> | |
50 <li>IK_CbCを宣言して拡張子がcbcの場合はInputKindをCbCに</li> | |
51 <li>これであとでオプション指定するときにIK_CbCならOptLevelを2ってできる</li> | |
52 </ul> | |
53 <br> | |
54 </article> | |
55 | |
56 <article> | |
57 <br> | |
58 <h3> | |
59 llvmでtail call optimizationが行われる条件(x86/x86-64の場合) | |
60 </h3> | |
61 <ul> | |
62 <li>CallerとCalleeの両方のcalling conventionがfastcc,cc10,cc11のいずれか</li> | |
63 <li>callの直後にretが来る | |
64 <ul> | |
65 <li>ret voidというのが自動的に付加されるので特に考えなくていい?</li> | |
66 </ul> | |
67 </li> | |
68 <li>tailcalloptが有効</li> | |
69 <li>variable argument listsを使用していない</li> | |
70 </ul> | |
71 <br> | |
72 </article> | |
73 | |
74 <article> | |
75 <br> | |
76 <h3> | |
77 llvmでSibling call optimizationが行われる条件 | |
78 </h3> | |
79 <ul> | |
80 <li>x86/x86-64じゃなきゃだめ</li> | |
81 <li>CallerとCalleeのcalling conventionがcかfastccで一致している</li> | |
82 <li>callの直後にretが来る</li> | |
83 <li>CallerとCalleeの戻り値の方が一致していてCalleeの戻り値が使用されない | |
84 <ul> | |
85 <li>code segmentはvoidで統一されているので無問題</li> | |
86 </ul> | |
87 </li> | |
88 <li>variable argument listsを使用していない</li> | |
89 </ul> | |
90 <br> | |
91 </article> | |
92 <article> | |
93 <br> | |
94 <h3> | |
95 次したいこと | |
96 </h3> | |
97 <ul> | |
98 <li>拡張子に頼らないで.cでも__codeが入っていたらO2入れるようにする必要がある?</li> | |
99 <li>tail call eliminationを満たす条件を__codeが満たすようにする(そうすればO2だからかってにjmpになる説)</li> | |
100 </ul> | |
101 <br> | |
102 </article> | |
103 | |
104 </section> | |
105 </body> | |
106 </html> |