Mercurial > hg > Members > kaito > slides
view before_s6/2014/2014_02_04/2014_02_04.html @ 5:ab2d529bb1d7
add slide
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 14 Oct 2014 19:17:35 +0900 |
parents | 2014/2014_02_04/2014_02_04.html@0dbe58077244 |
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>February 04, 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>元の関数の型を調べて変数等を生成する</li> <li>setjmpで使う環境保持のための変数をintの配列からjmp_bufに変更</li> <li>__CbC_env構造体の定義を __code を見つけたらではなく 環境付き継続が使用されることが分かったら行うように変更</li> <li>__return, __environment宣言時に生成するコードにcomplex statementを使用して代入に対応</li> <li>CreateUniqueIdentifierInfoで生成するIdentifierInfoの名前にuniqueIDを付加</li> </ul></li> </ul> </article> <article> <h3>元の関数に合わせた変数等の生成</h3> <ul> <li>元の関数に合わせた型にしないといけないのは以下の4つ<ul> <li>継続元の関数内に宣言する戻り値を代入する変数</li> <li>__CbC_return変数の引数の型の部分</li> <li>帰還用コードセグメントの引数の型</li> <li>帰還用コードセグメントで戻り値を代入する部分でのキャストの型</li> </ul></li> </ul> </article> <article> <h3>元の関数に合わせた変数等の生成</h3> <ul> <li>関数の型はFunctionDecl内でQualTypeという形で保持されている</li> <li>変数や引数等の型もDeclを継承したクラス内でQualTypeという形で表される</li> <li>つまり今の関数のQualTypeをとってきてそれをsetすればいい</li> </ul> </article> <article> <h3>uniqueIDの付加</h3> <ul> <li>static変数の場合LLVM IRを作る部分でreinsertValueを使って名前が変更される。</li> <li>reinsertValueを呼ぶ関数(static変数宣言部分の場合はEmitStaticVarDecl)がDeclarationを引数に用いるのでここに適当にフラグを立てれば判別は可能。</li> <li>reinsertValueで名前を変更しても使用される部分までは変更されないみたい。</li> <li>しかし他の部分から名前の変更にreinsertValueを呼び出している様子がないので名前の受け取り方にも何かある?</li> <li>結局その部分が突き止められなかったのでIDを振る方向で。</li> </ul> </article> <article> <h3>卒論目次</h3> <ol> <li>研究背景と目的</li> </ul></li> <li>Continuation based C (CbC)</li> <li>LLVM, clang<ul> <li>LLVM</li> <li>clang</li> <!-- <li>clangAST</li> <li>LLVM IR</li> <li>SelectionDAG</li> <li>MachineInstr</li> http://llvm.org/docs/CodeGenerator.html に詳しく載ってるです。これいる? --> <li>Tail Call Elimination (TCE)</li> </ul></li> <li>実装<ul> <li>__code型の追加</li> <li>gotoシンタックスの追加</li> <li>TCEの強制</li> <li>環境付き継続</li> </ul></li> <li>評価</li> <li>結論<ul> <li>まとめ</li> <li>今後の課題</li> </ul></li> </ol> </article> </section> </body> </html>