view before_s6/2013/old/2013_11_5.html @ 5:ab2d529bb1d7

add slide
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Tue, 14 Oct 2014 19:17:35 +0900
parents 2013/old/2013_11_5.html@845ff8ff4fc9
children
line wrap: on
line source

<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8'>
    
    <script
       src='./trunk/slides.js'></script>
  </head>

  <body style='display: none'>
    <section class='slides layout-regular template-default'>

      <article>
	<h1>CbCコンパイラのLLVM3.4上での実装</h1>
        <p><br>Kaito Tokumori<br>November 5, 2013</p>
      </article>
      <!--
	  <article>
	    <h3>研究背景と目的 (1)</h3>
	    <p>現代社会においてプログラムは様々な場所で用いられ、その用途に応じて求められる要素も様々である。例えばReal-timeな制御が重要視される場合には速度が、組込みシステムなどのメモリが制限される環境では軽量なプログラムが求められる。軽量で高速であるという条件に最も適しているのはアセンブリ言語であるが、低レベル過ぎてわかりづらい上に、アーキテクチャへの依存性が高いため汎用的でない。当研究室ではそういった要求に応える言語としてCbCを提案している。</p>
	  </article>
	  <article>
	    <h3>研究背景と目的 (2)</h3>
	    <p>CbCのコンパイラとしては初めにmicro-cをベースとしたものが開発され、続いて2008年の研究によりGCCベースのものが開発されGCCの持つ最適化の恩恵を受けることに成功した。しかし、Mac OS Xの最新版であるMavericksでは、cコンパイラとしてgccではなくllvm(clang)が用いられるようになった。llvmもgccと同じように強力な最適化を持っており、さらにエラーメッセージがgccに比べ丁寧であるという特徴を持つ。本研究では、micro-c,gccに続くLLVM/clangベースのコンパイラの開発を行う。</p>
	  </article>
	  -->
      <article>
	<h3>研究目的</h3>
	<p> 当研究室では継続を用いて処理制御を行うプログラミング言語"CbC"の開発を行っている。CbCコンパイラとしては最初にmicro-cベースのものが2001年に開発され、続いて2008年の研究によりGCCベースのものが開発された。またこの研究によりGCCの持つ最適化の恩恵を受けることに成功した。</p>
	<p> しかし、Mac OS Xの最新版であるMavericksではCコンパイラとしてGCCではなくClangが用いられるようになった。さらに、LLVMもGCC同様強力な最適化を持っていることや、GCCに比べて丁寧なエラーメッセージを出力する等の特徴から、GCCではなくClangに移り変わる人々も少なくない。</p>
	<p>よって、本研究ではmicro-c,GCCに続くLLVM/ClangをベースとしたCbCコンパイラの開発を行う。</p>
      </article>
      <!--
	  <article>
	    <h3>先々週課されたもの</h3>
	    <ul>
	      <li>研究目的をもうちょっとなんとか(3回目)</li>
	      <li>環境付き継続について考える</li>
	    </ul>
	  </article>
	  -->

      <article>
	<h3>今回したこと</h3>
	<ul>
	  <li>研究目的をゼミ用に短縮</li>
	  <li>中間発表の予稿作成</li>
	  <li>TCE条件の再確認</li>
	  <li>variable arguments list の問題の回避</li>
	</ul>
      </article>

      <article>
	<h3>TCE条件の再確認 (1)</h3>
	<ul>
	  <li>caller と callee の calling convention が fastcc,cc10,cc11のいずれか
	    <ul><ul><li>
		FastCCに設定。
	    </li></ul></ul>
	  </li>
	  <li>関数呼び出しの直後がreturnであることに加えvoid型
	    <ul><ul>
	      <li>returnの挿入は済ませている</li>
	      <li>ifやswitchを使った時にbranchになってしまうのを防ぐパスも通るようにした</li>
	      <li>code segmentはvoid型で統一</li>
	    </ul></ul>
	  </li>
	</ul>
      </article>

      <article>
	<h3>TCE条件の再確認 (2)</h3>
	<ul>
	  <li>tailcalloptが有効になっている。
	    <ul><ul><li>
		  LLVM内部ではGuaranteedTailCallOptとなっており、__codeを含む場合コレを有効化するようにしている。
	    </li></ul></ul>
	  </li>
	  <li>variable argument list が使用されていない。
	    <ul><ul><li>
		  後述。
	    </li></ul></ul>
	  </li>
	  <li>byval parameter が使用されていない。(PowerPCのみ)
	    <ul><ul><li>
		  引数に付けれる属性の一つ。構造体などの値渡しの時に使われるだろうと書かれている。
	    </li></ul></ul>
	  </li>
	  <li> GOT / PIC を使用するときは visibility が hidden か protected じゃないといけない。
	    <ul><ul><li>
		  GCC 同様 -fPIC で PIC が有効になるらしい。
	    </li></ul></ul>
	  </li>
	</ul>
      </article>

      <article>
	<h3>variable arguments list の問題</h3>
	<ul>
	  <li>variable arguments list を引数に持つときは calling convention が CC じゃないといけない。</li>
	  <li>code segment は calling convention を FastCC にしていたので怒られる。</li>
	  <li>エラー回避のためとりあえず variadic function だったら calling convention を戻して タイプも Void に変更
	    <ul>
	      <li>__CodeType のままだと TCE できたかどうかのチェックに引っかかるので。</li>
	    </ul>
	  </li>
	  <li>ちなみにGCC版だとコンパイルは通るけど実行すると illegal hardware instruction と出て落ちる。</li>
	</ul>
      </article>

      <article>
	<h3>バグ報告</h3>
	<ul>
	  <li>stdio.hをincludeせずにputs()を使うとコンパイルに失敗する。</li>
	  <li>printf()は大丈夫。</li>
	  <li>TailCallElimあたりで文句言われてる。</li>
	</ul>
      </article>

      <article>
	<h3>次回課題</h3>
	<ul>
	  <li>バグ修正</li>
	</ul>
      </article>

    </section>
  </body>
</html>