Sunday, 1 April 2018

GCC側

CbCを GCC 4.5 から GCC 8.0 に上げたんですが、なかなかCbCのテストが通らず。LLVMに乗り換えてから、GCCはもういいやと思っていたんですが、やっぱり欲しくなったので。

卒論が片付いてから始めたんですが、LLVM側はわりとすぐにすんだのだけど、GCCが、

  最適化すると、tail call をさぼる

という症状が出ていて。今まで最適化の部分は避けてたのですが、まぁ、やるしかない。inline で展開する時に、tail call のflagが落とされしまうらしい。

cfgexpand.c かと見当付けたんですが、そこで無理にtail call flag を付けると internal compile error 。うーん。

GCC はさまざまなdump file を生成できるので、それをやったのですが、

  どのpassで変化しているのかがわからない

なんだけど、そのpass名を表示するoptionもあった。

-fdump-passes

で、結局、ipa-inline.c だってのがわかったんですが、そこから治し方がわからない。

なのですが、カタンの日に、なんか学生が「できました」とか言ってる。おお、すごい。なんか、ssa 形式の下に vdef ってのがあって、そこに tail call flag が付いているとだめらしい。なので、そこにflagがあったら、展開しないという方法で良いらしいです。詳しい分析は、また、後でだな。

GCC/LLVMをいじる時には、なるべく学生と一緒にやってるわけだけど、学生が自力でいじれるようになれるのは素晴らしい。まぁ、そうなったころに卒業/修了してしまうわけですけどね。どっかの企業は、それに文句つけるらしいが、うちは、技術付けさせて、さっさと卒業させるのが仕事だからな。

家でLLVMの修正を勝手にやってきてしまう学生もいたんですが、ちょっと残念だったかな。もっと、いろいろできたと思う。

3月中に片付けるとか言ってたんですが、ちゃんと3月中にできたのは素晴らしい。

No comments: