Mercurial > hg > Members > kaito > slides
view 2014/2014_01_14/2014_01_14.html @ 1:bcf1ede39faa
jan 21
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 21 Jan 2014 19:40:41 +0900 |
parents | 845ff8ff4fc9 |
children |
line wrap: on
line source
<!DOCTYPE html> <html> <head> <meta charset='utf-8'> <title>Presentation</title> <script src='./s6_trunk/slides.js'></script> <style media='screen,projection'> /**** * Add your styles here. */ body { font-size: 175%; } .step { color: silver; } /* or hide next steps e.g. .step { visibility: hidden; } */ .slide { font-family: 'Open Sans', Arial, sans-serif; color: rgb(102, 102, 102); text-shadow: 0 1px 1px rgba(0, 0, 0, .1); } .slide h1, .slide h2, .slide h3 { color: rgb(51, 51, 51); } .slide pre { font-family: 'Droid Sans Mono', 'Courier New', monospace; font-size: 80%; padding: 5px 10px; margin-top: 40px; margin-bottom: 40px; color: black; background: rgb(240, 240, 240); border: 1px solid rgb(224, 224, 224); box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1); overflow: hidden; } .slide code { font-family: 'Droid Sans Mono', 'Courier New', monospace; color: black; } </style> </head> <body> <section class='slides'> <!-- Add your slides here. Delete or comment out the slides below. --> <article> <h1>CbCコンパイラのLLVM3.5上での実装</h1> <p><br>Kaito Tokumori<br>January 14, 2014</p> </article> <article> <h3>研究目的</h3> <p> 当研究室ではプログラムをコードセグメント、データセグメントという単位を用いて書くという手法を提案している。その手法を用いてプログラミングを行う言語として"CbC"の開発を行っており、これはCの下位の言語である。CbCにおいてコードセグメント間の移動はgoto文を用いた軽量継続によって行われ、これはTail Call Eliminationという最適化の強制によって実現される。</p> <p>本研究過去に開発されたmicro-c,GCC版のコンパイラに続くLLVM/Clang上でのCbCコンパイラの開発を行う。</p> </article> <article> <h3>今回したこと</h3> <ul> <li>環境付き継続の実装<ul> <li>setjmp部分の構文の生成</li> <li>環境を保持する変数の自動生成</li> <li>元の関数に戻るコードセグメントの生成</li> </ul></li> </ul> </article> <article> <h3>環境を保持する変数群の自動生成</h3> <ul> <li>__environmentを解析するときに生成。</li> <li>__CbC_environment, buf, retvalの宣言は__returnと同様にできる。</li> <li>__CbC_environmentのメンバへbufとretvalのアドレスをもたせるのもここで。</li> </ul> </article> <article> <h3>setjmp部分の構文の生成</h3> <ul> <li>__returnか__environmentを解析するときに生成。</li> <li>if文の生成はIfScopeを作ってその中に入ってStatementを生成していくだけで良い。</li> </ul> </article> <article> <h3>元の関数に戻るコードセグメントの生成</h3> <ul> <li>__returnか__environmentを解析するときに生成。</li> <li>一旦今のスコープ(FunctionScope)を抜けて、トップのスコープに入る必要がある。</li> <li>スコープ以外に、FunctionScopeInfoの初期化をしてContextもTranslationUnitDeclに切り替えないといけない。</li> <li>それから作り始める。PrototypeScope,BodyScopeの順に作る。できたら上のみっつを元に戻す。</li> </ul> </article> <article> <h3>ユニークなシンボル名をつけるには(1)</h3> <ul> <li>IdentifierInfoTableは名前だけを持っている。型とかスコープとかの違いはない。多分余計にIdentifierInfoオブジェクトを作りたくないだけ。</li> <li>LLVM IRに変換されるときに作られるSymbolTableが重要?</li> <li>SymbolTableは関数ごとにある。ファイル全体のものもあって、これで外のスコープの同じ名前ものと被らないようになる。</li> <li>こいつに値を登録するときに、reinsertValueという関数によって名前の衝突が解決される。</li> <li>DeclオブジェクトがIdentifierNamespaceというのを持っていてこれでラベルの名前なのか変数の名前なのかとかが判別できるみたい。</li> </ul> </article> <article> <h3>ユニークなシンボル名をつけるには(2)</h3> <ul> <li>CbC用のIdentifierNamespaceを作れば、構文解析の最中に名前衝突でおこられない(はず)</li> <li>ただし、reinsertValueはこれより前のシンボル名と衝突しないことは保証するが後については保証しない。</li> </ul> </article> <article> <h3>環境付き継続TODO</h3> <ul> <li>シンボル名</li> <li>setjmp.hの警告の処理</li> <li>元の関数の型を調べて変数などを生成する</li> </ul> </article> </section> </body> </html>