そこで最近、アセンブリスキルを磨くために、C++でおもちゃの言語用の非常に単純なコンパイラを作成しました。シングルパスを実行し、解析フェーズ中にコードをいくつかの文字列ストリームに直接送信します。各文字列ストリームはコードのセクションを表します(つまり、1つはを表し、section .bss
他は.data
.text
)。その後、これらの文字列ストリームはファイルに書き込まれ、NASMとgccを使用してそれらをアセンブルおよびリンクします。このシングルパスアプローチはひどく非効率的であることを私は知っていますが、繰り返しになりますが、これは他の何よりもコード生成段階を理解するための演習でした。とにかく、学習演習として、生のアセンブリではなくLLVMILを直接出力するようにコードを変更したいと思います。LLVM ILの入門レベルのガイドはありますか?または、さらに良いことに、アセンブリ行の同等のILコードを決定するためのツールですか?調べてみたところ、完全な仕様しか見つかりませんでした。これは、必要以上の情報です。
1 に答える
LLVM IR言語リファレンスは、こちらから入手できます。これはチュートリアルではなく、詳細なリファレンスページであることに注意してください。x86アセンブリとLLVMIRの間に直接の1対1の対応はありませんが、LLVM IRはx86アセンブリよりも高レベルで一般的であるため、コンパイラをx86の発行からLLVMIRの発行に適応させることはそれほど難しくありません。
公式のLLVMドキュメントには、あなたにとって絶対に最適な出発点となる詳細なチュートリアルが付属しています。これは、単純な高級プログラミング言語からLLVMIRまでのおもちゃのコンパイラーの作成について説明しています。これを実行することで、LLVMの主要な概念の多くを学び、前述の言語リファレンスを効果的に使用できるようになります。
チュートリアルで問題を見つけた場合は、LLVMバグトラッカーまたはメーリングリストに報告してください。チュートリアルは機能することが期待されており、報告された問題はすべて修正されます。
LLVM IRを理解するためのもう1つの優れた最初のリソースは、オンラインデモページです。これにより、Cコードのチャンクをオンラインで(何もインストールせずに)LLVM IRにコンパイルでき、基本的なプログラミング構造をLLVMIRで表現する方法を理解するのに非常に役立ちます。