Monday 7 December 2015

LLVM読み会続き

日曜日の話ですね。

* AST(Abstract Syntax Tree)の生成部分

を追っていったら、Builderに貯めていくのは良いんだけど、

* new 自作

ですか。まぁ、そうだよな。ASTは基本的に回収しないし。ある程度、大規模なソフトだとメモリ管理系自作は普通か。

次は、IR(LLVM中間コード)の生成部分。土曜日は読み飛ばしていたらしく。こっちは、

* template な 自作 double linked list

まあ、そうだよね。これもglibとか使わずに自作するのが普通ですかね。それなりにくせがあるライブラリなようだけど。でも自分でもかなりくせのあるのを作ったことがあるので、誰しもやってしまうところか。

今回は pointer tag で苦しむことはありませんでした。どうも smart pointer で統一されたみたいですね。その代わり、

* まず、dynamic_cast する

という手順らしいです。実際には何もしないはずんだけどねぇ。まぁ、

* ASTという何でもはいる箱を用意して、
* そこに何かがあるかを決め打ちしてから処理

というわけだからなぁ。dynamic_castでチェックするしかない。いや、まぁ、

* 型整合至上主義

な人が見たら、卒倒しそうなコードではあるかな。

Haskellだと、かなり初期にSystem FCに落としてしまうので、構文木の型ははっきり決まるわけですけど、

* C++の場当たり的なセマンティクス

だと仕方がないところか。今見ているものが、構造体なのかクラスなのかtemplateなのか構文からはわからない。template中だと、そもそも決まらない。そういう状況ですからね。

学生からは assert が多いなんていう指摘も。そうならざるを得ないよね。いや、入っているだけましだろという説も。

IRからの最適化、機械語生成は、かなり大量にある pass のどれかだとは思うのですが、見つけられませんでした。前は見たはずなんだけどな。

* pseudo code を一旦吐いて、それを再度変換

とかやっていたり、変換系を用意するだけの pass があったりとかで見つけられませんでした。

* 今日のところは、これくらいで勘弁しておいてやる

というところですかね。omit-frame-pointer あたりを調べたいので、また、後で,その辺はみることになるでしょう。

土曜日に作った tar ball は、あっとんが別に brew package にしてくれたらしい。でも、8GBではまともに trace できない説も。

http://www.cr.ie.u-ryukyu.ac.jp/~game/pukiwiki/index.php?LLVM

ちょっと疲れ果ててたところもあって、帰ったら、いきなり爆睡でした。

さぁ,今週も頑張ろう。

No comments: