LLVMの重要な一部として渡し、LLVM IRレベルとLLVMバックエンドのレベルが重要な役割を果たしてきました。多くのLLVMパスのユーザーが簡単にLLVM IRレベルの分析として理解し、LLVMバックエンドレベルの役割のパスを無視して、変換されます。実際には、小さくないLLVMバックエンドレベルの役割に渡します。例として、構造体の終了後:
注:P134「LLVMコアライブラリ入門」。
パスに直接書くことが空白のボックスの内容の、いくつかの小さな峠で構成されるスーパーパスとして解釈灰色のボックスとコンテンツ「LLVMコアライブラリ入門」。この見解によれば、パスは、全体バックエンドの主要部分として理解することができます。もちろん、バックエンドは完全にパスされていませんが、プロセス実行の観点から、パスが全体のバックエンドの主要部分に参加しました。
なぜ、その後、パスのバックエンドは常にそう簡単には無視されますか?
まず、パスサブクラスからのサブカテゴリーとサブカテゴリーの話します。パスサブクラスは以下のとおりです。
その中で、私たちは、ほとんどがLLVM IR FunctionPassのレベルで使用します。峠でLLVMバックエンド、主にMachineFunctionPassの親クラス。そしてMachineFunctionPassはFunctionPassサブクラス、示された構造です。
この構造では、MachineFunctionPassは構造的な弱点である、あなたがパスを無視した場合、バックエンドの使用に直接見落としを渡し、LLVM IRのレベルとは異なり、パスのサブクラスのすべてが使用されています。
第二に、もう一つの理由は、多くの人がパスし、そのソースディレクトリとは無関係のバックエンドさせます。多くの人々はそれがパスのみLLVM IRのレベルで使用されているような錯覚を作成し、LIB / codegenのディレクトリとlib /ディレクトリの内容ターゲットを無視して、ただのlib /分析ディレクトリとlib / Transfromディレクトリにパスを懸念しています。
再次,对LLVM IR层面和LLVM Backend层面的Pass的调用方式不同,也导致很多使用者将二者割裂开来。LLVM IR层面,使用的是opt工具;LLVM Backend层面,使用的是llc工具。
最后,一些使用者忽略Pass在Backend应用是因为对后端的认识比较模糊,没有搞清楚后端的完整架构。默认的将Pass直接和LLVM IR层面进行了绑定。
相关内容:
小乖他爹:LLVM每日谈之十二 LLVM的源码分析之Pass相关
小乖他爹:LLVM每日谈之四十三 LLVM的utility pass
发布于 2019-06-13