2016-10-04 14 views
1

https://idea.popcount.org/2013-07-24-ir-is-better-than-assembly/IR LLVMフォームアセンブリ対

こんにちは、

私はIRのアイデアを把握するが、1つの問題は、明らかではありません。

IRがアセンブリより優れているのはなぜですか?私は作者がそれについて語ったことを読んだことがあり、それは一般に抽象概念の意味でより高いことがわかります。それは型制御を可能にする。しかし、私は何か他のことについて質問したい:

特に、LLVM IRは中間形式の一種です。しかし、そのような形で最適化が行われるのはなぜですか?アセンブリ出力を最適化することは不可能ですか?確かに、それは可能ですか?ですから、なぜLLVM IRがそのような状況でそれを使用するのがすばらしいのですか?私は、IRフォームの解析が単純で「より可能」であると考えています。

+2

確かに、アセンブリを最適化することができます(コンパイラは行います)。LLVMは、中間表現のオプティマイザを書くことができるときに、すべてのプラットフォームに対してオプティマイザを書く理由を質問します。 – Chris

+1

@ChrisStathis:アセンブリを最適化しない*、彼らは内部表現を最適化します。通常、ソースの動作のSSA表現です。 asmを入力として取ることは、レジスタやメモリに残っている値がプログラムの遠隔部分の入力であり、まったく死んでいる一時的なものであることを理解することの難しい問題をもたらします。 asmオプティマイザは、すべての関数がコードブロック間でデータを渡すための標準のABI /呼び出し規約に限定されているとは想定できません。 –

答えて

2

これは私があなたの質問を読む方法です:なぜコンパイラは最適化されていないアセンブリへの素早い翻訳をしてからそれを最適化しないのですか?

アセンブリの最適化には重大な制限があります。 Chris Stathisの言葉通り、アセンブリオプティマイザは1つのプラットフォームに限定されます。 IRオプティマイザはプラットフォームとは独立しています。

アセンブリでエンコードされたハードウェア固有の詳細が多すぎます。コンパイラの最適化はすでに難しいので、無関係なハードウェアの詳細を追加することで、その問題をより複雑にする理由はありません。たとえば、アセンブリコードでは、特定のサイズのレジスタが限られています。 IRでは、必要な数のレジスタを使用することができます。ハードウェアレジスタの追跡を強制することによって、最適化アルゴリズムをより複雑にする理由はありません。

LLVM IRは、私が知っている他のコンパイラIRにいくつかの利点があります。 1つの重要な利点は、LLVM IRがSSA形式であることです。つまり、変数は一度しか定義できず、その値は決して変更できません。これにより、コンパイラの最適化が非常に重要になります。

LLVM IRマニュアルを見ると、SSA形式であることが明らかでない場合があります。しかし、LLVMライブラリでIRを表すために使用されるデータ構造を見ると、LLVM IRに非SSAコードを書くことはできません。

関連する問題