LLVM for Grad Students 大学院生のためのLLVM を訳す1

ツイッターをチラチラみてたらLLVMハッシュタグあることに気づいた(調べた 笑). そのなかで

Adrian Sampson: LLVM for Grad Students

というリンクが気になったので訳しみた. 

いつもと同様にGoogle翻訳先生に英文投げて日本語を拾い上げる方式. 

そのため日本語で通じない部分だったり, いみの通らない部分が多かったりするので, コメントとかであれば(ないだろう)随時直そうと思う.

 

では, 

LLVM for Grad Students

これはLLVMコンパイラインフラストラクチャの研究の紹介です。
無関心からいっきに興味を引きつけるには十分です.

 

What is LLVM? LLVMって? 

LLVMコンパイラである. それはC, C++言語のようにネイティブ言語のためのahead-of-time compileであり, hackable(改良可能)である.

もちろん他にも優れています. LLVMは素晴らしい(JITもある;それはまだないC言語のような多様性を提供する.それは、App Storeの新しい配信フォーマットとかetc.etc.)
これらはすべて真実ですが、目的のために、上記の定義は重要なものです。

ほかのコンパイラとの大きな違いについて以下に解説する。

  • LLVMの中間表現(IR)は、偉大な技術革新です。
  • LLVMは、あなたがアセンブリ読むことができる場合、実際に読むことができるプログラムの表現に変換します。
    これは素晴らしいように見えないかもしれませんが、次のとおりです。
    他のコンパイラのIRは、実際に書くことができないので、複雑なインメモリ構造になる傾向がある.
  • LLVMは可読性に優れてます.
    構造は、他のコンパイラよりもずっとよりモジュール化されています。これは元の作成者(Chris Lattner(?))から受け継がれてきたものです.
  • 私たちのような学術プログラマの研究ツールであるにもかかわらず、LLVMは大企業に裏打ちされた非常に強力なコンパイラです。
     あなたがホットスポットとのJikesの間で迷った時,
    Javalandがあるように、巨大なコンパイラと改良可能コンパイラの間で妥協する必要はないことを意味します。

optコマンドについて

opt - LLVM optimizer | http://llvm.org/docs/CommandGuide/opt.html (閲覧日:2015/08/09)

簡単な訳(あってるかは保証しない.)

DESCRIPTION

optコマンドは、モジュール式LLVM最適化および解析器である。optはLLVMソースファイルを入力として受け取り, 指定の最適化を実行、もしくは解析し,
さらに最適化されたファイルや解析結果を出力する.
OPTの機能は-analyzeオプションが指定されているかどうかに依存する.

-analyzeを指定すると、OPTは入力ソースに対して様々な分析を行います。
これは通常、標準出力に結果を出力しますが、いくつかのケースでは標準エラー出力かファイルに対して解析出力を一緒に生成する.

-analyzeが与えられていない間,最適化された出力ファイルを生成しようとする。
OPTを介して利用可能な最適化は、-loadオプションを指定してロードされた任意の追加のライブラリとしてだけでなく、それにリンクされていたライブラリに依存します
使用できる最適化を決定するために-helpオプションを使用します。

ファイル名は、コマンドラインから省略するか”-”だった場合は, OPTは、標準入力からの入力を読み込みます。
入力ファイルはLLVMアセンブリ言語形式の(.ll)もしくはビットコード形式(.bc)である.

出力ファイル名は-o オプションが指定されてない場合は, 標準出力に書き込む.

 

 

-Iオプションについて

忘備録としてつけているのに説明なしとはこれいかに

Ubuntu Manpage: clang - the Clang C and Objective-C compiler

で解説されているが- Iオプションについて

-Idirectory

Add the specified directory to the search path for include files.

 とかかれており, 日本語に直すと

インクルードファイルの検索パスに指定されたディレクトリを追加します。

 まぁ, 思っていたとおりというか, 調べたというか.

今回の場合は展開したllvmディレクトリのincludeディレクトリを指定している.  (-I../../../includeてきな)

LLVMについて

LLVMの知識については

を参考にやっている. 英語力はないのでGoogle先生頼りながら, 必要な情報を集める方針. 狐本の方は, 内容はとてもわかり易いと思う. 

でも, 実際は確認程度かなと思い始めている.

 

そして, 今ハマっている問題について

Writing an LLVM Pass — LLVM 3.8 documentationを今読みながら, 作業中だが, Running a pass with optの部分で手詰まりしている.

 

最初, インクルードパスが上手くいってないせいでコンパイルできない

→  -Iオプションで無理やり, llvmのディレクトリ内のincludeを参照し, 読みだした.

つぎに実行 $ opt -load ./Hello.so -hello < Hello.bc > /dev/null

Error opening './Hello.so': ./Hello.so: only ET_DYN and ET_EXEC can be loaded
-load request ignored.
opt: Unknown command line argument '-hello'. Try: 'opt -help'
opt: Did you mean '-help'?

とでて, 気持ちが途切れ終了.

よむと Hello.soが開けませんてきな感じかなっと。

あとは-helloオプションなんてありませんてきな感じかな?

 

ということでここらへんのoptがわかってない.

つぎに投稿するときはそこらへんを解決できるようにしなければいけない.

やっぱり, 得意な人はここらへん楽に突破できるのだろうか?

 

はじめる理由てきな

理由:

  • グループでの開発作業に必要な知識が足りていない.
  • LLVMでPassの作成をやりたいが,  上手くいかない.
  • なんとなく他の人の忘備録とかみて作業をやってきたから, 自分もやってみようと思った.

こんなかんじが今のモチベーションである. 

完全に自分語り用なので言葉遣いとかは気にしない方向性

なるべく, 未来の自分に発信できるようにわかりやすい作りにはしていきたいと思う.

 

どうせ, 飽き性なのですぐやめるとは思うが, 誰かに発信しているという感覚だけでもしかしたら長続きするかもという希望的観測 de

ということで, はじめていきたい