0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 <!DOCTYPE html>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 <html>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 <head>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 <meta charset='utf-8'>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 <title>Presentation</title>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 <script src='./s6_trunk/slides.js'></script>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 <style media='screen,projection'>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 /****
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 * Add your styles here.
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 */
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 body { font-size: 175%; }
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 .step { color: silver; } /* or hide next steps e.g. .step { visibility: hidden; } */
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 .slide {
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 font-family: 'Open Sans', Arial, sans-serif;
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 color: rgb(102, 102, 102);
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 text-shadow: 0 1px 1px rgba(0, 0, 0, .1);
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 }
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 .slide h1, .slide h2, .slide h3 {
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 color: rgb(51, 51, 51);
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 }
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 .slide pre {
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 font-family: 'Droid Sans Mono', 'Courier New', monospace;
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 font-size: 80%;
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 padding: 5px 10px;
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 margin-top: 40px;
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 margin-bottom: 40px;
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 color: black;
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 background: rgb(240, 240, 240);
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 border: 1px solid rgb(224, 224, 224);
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1);
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 overflow: hidden;
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 }
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 .slide code {
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 font-family: 'Droid Sans Mono', 'Courier New', monospace;
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 color: black;
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 }
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 </style>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 </head>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 <body>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 <section class='slides'>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 <!-- Add your slides here. Delete or comment out the slides below. -->
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 <article>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 <h1>CbCコンパイラのLLVM3.5上での実装</h1>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 <p><br>Kaito Tokumori<br>January 14, 2014</p>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 </article>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 <article>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 <h3>研究目的</h3>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 <p> 当研究室ではプログラムをコードセグメント、データセグメントという単位を用いて書くという手法を提案している。その手法を用いてプログラミングを行う言語として"CbC"の開発を行っており、これはCの下位の言語である。CbCにおいてコードセグメント間の移動はgoto文を用いた軽量継続によって行われ、これはTail Call Eliminationという最適化の強制によって実現される。</p>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 <p>本研究過去に開発されたmicro-c,GCC版のコンパイラに続くLLVM/Clang上でのCbCコンパイラの開発を行う。</p>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 </article>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63 <article>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 <h3>今回したこと</h3>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 <ul>
|
1
|
66 <li>環境付き継続の実装<ul>
|
|
67 <li>setjmp部分の構文の生成</li>
|
|
68 <li>環境を保持する変数の自動生成</li>
|
|
69 <li>元の関数に戻るコードセグメントの生成</li>
|
|
70 </ul></li>
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 </ul>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 </article>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 <article>
|
1
|
75 <h3>環境を保持する変数群の自動生成</h3>
|
|
76 <ul>
|
|
77 <li>__environmentを解析するときに生成。</li>
|
|
78 <li>__CbC_environment, buf, retvalの宣言は__returnと同様にできる。</li>
|
|
79 <li>__CbC_environmentのメンバへbufとretvalのアドレスをもたせるのもここで。</li>
|
|
80 </ul>
|
|
81 </article>
|
|
82
|
|
83 <article>
|
|
84 <h3>setjmp部分の構文の生成</h3>
|
|
85 <ul>
|
|
86 <li>__returnか__environmentを解析するときに生成。</li>
|
|
87 <li>if文の生成はIfScopeを作ってその中に入ってStatementを生成していくだけで良い。</li>
|
|
88 </ul>
|
|
89 </article>
|
|
90
|
|
91 <article>
|
|
92 <h3>元の関数に戻るコードセグメントの生成</h3>
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93 <ul>
|
1
|
94 <li>__returnか__environmentを解析するときに生成。</li>
|
|
95 <li>一旦今のスコープ(FunctionScope)を抜けて、トップのスコープに入る必要がある。</li>
|
|
96 <li>スコープ以外に、FunctionScopeInfoの初期化をしてContextもTranslationUnitDeclに切り替えないといけない。</li>
|
|
97 <li>それから作り始める。PrototypeScope,BodyScopeの順に作る。できたら上のみっつを元に戻す。</li>
|
|
98 </ul>
|
|
99 </article>
|
|
100
|
|
101 <article>
|
|
102 <h3>ユニークなシンボル名をつけるには(1)</h3>
|
|
103 <ul>
|
|
104 <li>IdentifierInfoTableは名前だけを持っている。型とかスコープとかの違いはない。多分余計にIdentifierInfoオブジェクトを作りたくないだけ。</li>
|
|
105 <li>LLVM IRに変換されるときに作られるSymbolTableが重要?</li>
|
|
106 <li>SymbolTableは関数ごとにある。ファイル全体のものもあって、これで外のスコープの同じ名前ものと被らないようになる。</li>
|
|
107 <li>こいつに値を登録するときに、reinsertValueという関数によって名前の衝突が解決される。</li>
|
|
108 <li>DeclオブジェクトがIdentifierNamespaceというのを持っていてこれでラベルの名前なのか変数の名前なのかとかが判別できるみたい。</li>
|
|
109 </ul>
|
|
110 </article>
|
|
111
|
|
112 <article>
|
|
113 <h3>ユニークなシンボル名をつけるには(2)</h3>
|
|
114 <ul>
|
|
115 <li>CbC用のIdentifierNamespaceを作れば、構文解析の最中に名前衝突でおこられない(はず)</li>
|
|
116 <li>ただし、reinsertValueはこれより前のシンボル名と衝突しないことは保証するが後については保証しない。</li>
|
|
117 </ul>
|
|
118 </article>
|
|
119
|
|
120 <article>
|
|
121 <h3>環境付き継続TODO</h3>
|
|
122 <ul>
|
|
123 <li>シンボル名</li>
|
|
124 <li>setjmp.hの警告の処理</li>
|
|
125 <li>元の関数の型を調べて変数などを生成する</li>
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
126 </ul>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
127 </article>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
128 </section>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
129 </body>
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
130 </html>
|