2

私はCコードからLLVM-IRコードを生成しようとしています.

stdio.h、string.h、stdlib.h、および一般に malloc、calloc などの標準メモリ ベースの関数。

http://llvm.org/docs/LangRef.htmlこの表現の制限と、標準/最も人気のある c 関数を処理するためだけに独自の組み込み関数を追加する必要があるかどうかについて疑問に思っていました。

私は実行時にコードを変更しようとしているので、どの種類のアプローチが最も柔軟性を与えるのか疑問に思っていました。たとえば、代わりに AST レベルでコードを操作します。

ありがとう

4

1 に答える 1

7

C から LLVM IR を発行することは、まさに産業用の強力なコンパイラ Clang が行うことです。-emit-llvm(このドキュメントの詳細: http://clang.llvm.org/get_started.html ) を使用して C コードの小さなスニペットで Clang を実行し、結果の IR を観察することをお勧めします。

ブラウザでこれを行うこともできます: http://ellcc.org/demo/index.cgi

これにより、ビルトインのようなものがどのようmemcpyに処理されるか、およびその他の同様の疑問を確認できます。

LLVM も Clang も完全な C ライブラリを持っていませんが、既存のものをコンパイルするために使用できることに注意してください。newlib は、さまざまな新しいプラットフォームでビルドするために特別に設計された、人気のある移植可能な C ライブラリです。たとえばPNaClは、これを使用して C/C++ コードを移植可能な実行可能ファイルにビルドします。これは、 newlib をユーザーのコードと一緒に単一の LLVM IR モジュールにコンパイルします。

于 2013-11-05T23:22:17.420 に答える