2012-04-29 9 views
11

最近、アセンブリ技術を磨くために、C++でおもちゃ言語用の非常に単純なコンパイラを作成しました。これはシングルパスで実行され、解析フェーズ中にコードの一部を表す複数のストリングストリームにコードを直接送信します(つまり、1つはsection .bss、もう1つは.dataおよび.textを表します)。その後、これらの文字列ストリームはファイルに書き込まれ、NASMとgccを使用してそれらをアセンブルしてリンクします。私はこのシングルパスのアプローチがひどく非効率的であることを知っていますが、これはコード生成の段階を他のものよりも理解するためのものです。とにかく、元のアセンブリではなくLLVM ILを直接発行するようにコードを修正したいと思います。 LLVM ILの入門レベルガイドはありますか?あるいは、組立ラインの等価ILコードを決定するためのツールでも良いでしょうか?私は見て、私は私が必要以上に多くの情報である完全な仕様を見つけただけです。コンパイラをx86アセンブリからLLVMに移植する

+0

1対1のマッピングはありません。ここにはショートカットはありません。 –

+0

私はこれを理解しています。データ、cmp、条件付きジャンプなどの基本的なものを出す方法についてのガイドを探しています。 – chameco

+0

LLVMドキュメント。おもちゃの言葉のためのコンパイラを作成する方法を説明する(少なくとも1つの)チュートリアルがあります。 – Mat

答えて

14

LLVM IRリファレンスはavailable hereです。チュートリアルではなく詳細なリファレンスページであることに注意してください。 LLVM IRはx86アセンブリよりも高水準かつより一般的であるため、コンパイラがx86から​​LLVM IRを放出するように適応するのは難しくありませんが、x86アセンブリとLLVM IRの間には直接的な1対1の対応はありません。

正式なLLVMのドキュメントには、あなたにとって最高の出発点であるdetailed tutorialが付属しています。これは、簡単な高水準プログラミング言語からLLVM IRまでおもちゃコンパイラを作成する手順を示しています。これを実践することで、LLVMの主要な概念の多くを学び、前述の言語リファレンスを効果的に使用できるようになります。

このチュートリアルで問題が見つかった場合は、LLVMバグトラッカーまたはメーリングリストに報告してください。このチュートリアルは機能すると予想され、報告された問題は修正されます。

LLVM IRを理解するためのもう1つの良いスタートリソースはonline demo pageです。これにより、CコードをLLVM IRにオンラインで(何もインストールせずに)コンパイルすることができ、基本的なプログラミング構造をLLVM IRでどのように表現できるかを理解するのに非常に役立ちます。

+2

ありがとう!私はデモページを見たことがなかった、それはまさに私が探していたものです。 – chameco

+0

@chameco:デモページは本当に便利ですが、個人的に私はしばしばClangがどのような種類の最適化を実行できるかどうかをチェックするために使います。本当に人々に光を見せてもらい、コード内であまりにも低レベルになってしまうことを避けるのに役立ちます。 –

+0

私は他のLLVMターゲットのアセンブリ言語を見てみましょう。http://ellcc.org/demo –

関連する問題