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:
Post a Comment