研究目的 当研究室で開発しているContinuation based C(CbC)を用いたtail call eliminationの強制。 tail call eliminationにより、Cにおける大きなオーバーヘッドである関数呼び出しの際のreturnの削減。 goto文による処理の記述は状態遷移系とも相性が良い。 Micro-C,GCC版に次ぐllvmを使用したコンパイラの実装。
llvmでtail call optimizationが行われる条件(x86/x86-64の場合) CallerとCalleeの両方のcalling conventionがfastcc,cc10,cc11のいずれか callの直後にretが来る ret voidというのが自動的に付加されるので特に考えなくていい? tailcalloptが有効 variable argument listsを使用していない
llvmでSibling call optimizationが行われる条件 x86/x86-64じゃなきゃだめ CallerとCalleeのcalling conventionがcかfastccで一致している callの直後にretが来る CallerとCalleeの戻り値の方が一致していてCalleeの戻り値が使用されない code segmentはvoidで統一されているので無問題 variable argument listsを使用していない
次したいこと 拡張子に頼らないで.cでも__codeが入っていたらO2入れるようにする必要がある? tail call eliminationを満たす条件を__codeが満たすようにする(そうすればO2だからかってにjmpになる説)