問題タブ [llc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
322 参照

c - op & ld を使用した LLVM - リンク エラー

プロジェクトのLLVMとclangに慣れようとしています。そこでは、さまざまな最適化を行います。したがって、clang だけでなく、opt & llc を使用して LLVM と対話する必要があります。現在、C ライブラリを使用した非常に基本的な例のリンクに失敗しています。

コード (main.c):

LLVM フロー & リンカとしての ld:

ld のエラー出力:

私はこのエラーにちょっと困惑しています:

  • -lc を使用しています。これは、stdc ライブラリをリンクする必要があります。
  • ld の出力は、libc が見つかったことを示しています
  • LLVM IR ファイルのエラーについて ld が文句を言うのはなぜですか?

さらに馬鹿げたCプログラムがリンクしますが、セグメンテーション違反と実行が発生します。

コード:

そういうのは、根本的に間違ったことをしているのではないかと思います...

どうも!

0 投票する
0 に答える
122 参照

llvm - LLVMを使用してコンパイルしたときに、重複するロード命令の削除を回避する方法はありますか?

LLVM フロントエンド モジュール パスの作成に取り組んでいます。したがって、基本的には、すべてのロード命令を複製して別のレジスタに格納する必要があります。clang、opt、および llc ツールの -O0 では、この重複したロード命令が削除されます。objdump を使用して最終的なアセンブリを確認したところ、重複したロード命令が削除されていることがわかりました。重複するロード命令を何らかの形で削除しないソリューションが必要です。

実際のCプログラムは、

対応するIRは、

しかし、私のパスが有効になると、この IR が変更され、複製されたロードであっても、ロード アドレスが同じメモリであるロード命令のみが複製されます。

変更されたIRは、

IR レベルでは変更された IR を確認できますが、llc 後の最終アセンブリ レベルでは確認できません。llc は重複した負荷をすべて削除していると思います。llc が削除されないようにするにはどうすればよいですか?

注:すべての変数を揮発性にしてみました。これが機能するため、llc の後に重複したロードを確認できます。しかし、これは適切な解決策ではありません。1000 個すべての変数を volatile にすることはできません :(.