データの危険を防ぐために、llvm のバックエンドにスケジューリングを追加しようとしています。バックエンドは microblaze と非常に似ていますが、分岐遅延用の複数の遅延スロットなど、多くの違いがあります。現在、llvm がコードをコンパイルするたびに、特にロード命令とストア命令のデータ ハザードが常に見つかります。PPC と ARM のバックエンド スケジューリングを見てきましたが、それを適応させる方法がわからなかったので、代わりに自分で作成したいと思います。コンパイルプロセス中にllvmからコンパイルされた命令のリストを取得して、使用されているレジスタに基づいて命令をソートし、依存関係をチェックする方法を知りたいです。
私は熟練した C++ プログラマーではないため、現在これについてはわかりません。CPU はパイプライン化されており、制御ハザード (分岐) とデータ ハザードのみがあります。CPU のパイプラインには 5 つのステージがありますが、ステージ 1 のデータを使用できるのはステージ 3 と 5 の命令だけです。バックエンドのレイテンシを設定しましたが、何も変わりません。