制御フローグラフの簡約化。コード生成器から利用するためグローバル変数に格納。ここでメインのインタプリタのループを実行する。MainLoop();このコードは、FunctionPassManagerを”OurFPM”として定義している。FunctionPassManagerは、それ自身の構築のためにModuleへのポインタを必要とする。準備が終われば、あとは様々なLLVMのパスを一連のaddメソッドの呼び出しで追加出来る。最初のパスは、いわば決まり文句であり、プログラムの中のデータ構造がどういう配置になってるかについて以降の最適化パスに知らせるためのパスである。“TheExecutionEngine”変数はJITに関連していて、それについては次の節で述べる。上の場合では、我々は4つの最適化パスを追加する事を選択した。ここで選んだパスは、色んな種類のコードに対して役立つ非常に標準的な”クリーンアップ”最適化である。ここではそれらの最適化が何を行ってるのかについて深く説明することはしないが、これはよい出発点であると思って欲しい。ここでいうクリーンアップは野球用語(米国では4番打者のみを指す)で、”かなり効果的”というような意味かと思う。PassManagerが準備できたら、それを使うようにする必要がある。これについては、新しく関数が構築された後、呼び出し元に返る直前に行う。矛盾が無いか、生成されたコードを検証する。TheFunction;}見ての通り、そのまんまである。Function*を最適化して更新し、(うまくいけば)その関数本体に磨きをかける。前節で行ったテストを再度やってみる。%multmp}期待してた通り、うまく最適化されたコードを得ることが出来た。元の関数にあった複数の浮動小数点の加算は削減された。LLVMは、色んな状況のなかで動作するいろんな種類の最適化を提供する。様々なパスについてのドキュメントがいくつかあるが、未完全である。Clangがどのようにパスを使ってるかについて見てみるのは、パスについてのアイデアを得る別の良い方法である。“opt”ツールによって、コマンドラインからパスに対する実験を行うことができる。optは、LLVMに付属するツールであり、LLVMのBitcodeを受け取り、コマンド引数で指定された最適化パスを実行して、Bitcodeを出力するためのもの。IRをLLVMのVMに対するアセンブリ言語とすると、BitcodeはLLVMのVMに対するバイナリのようなもの。これで、我々のコンパイラのフロントエンドはいい感じのコードを得た。次はその実行に関して考えてみよう。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。...774Fedexアカウント取得後にオンラインで手続きすれ...NETこういうのずっと見てしまう気持ちがよくわかります(...BINGEブログを拝見させていただきました・・・。花粉症対策についてはこれまで次の記事を書いてきました。花粉症対策についてはこれまで次の記事を書いてきました。花粉症対策についてはこれまで次の記事を書いてきました。花粉症対策についてはこれまで次の記事を書いてきました。花粉症対策についてはこれまで次の記事を書いてきました。