llvm.org のオンライン コンパイラを使用して bc ファイルを生成しました。この bc ファイルを ac または C++ プログラムからロードし、llvm jit を使用して bc ファイルで IR を実行できるかどうかを知りたいです (プログラムでc プログラム)、結果を取得します。
どうすればこれを達成できますか?
これは (多かれ少なかれ) LLVM 2.6 を使用して動作するはずです。SVN には、ビットコード ファイルの上に遅延 ModuleProvider を作成するためのヘルパー関数がいくつかあるようです。コンパイルは試していませんが、私の JIT アプリケーションの一部をくっつけただけです。
#include <string>
#include <memory>
#include <llvm/Bitcode/ReaderWriter.h>
#include <llvm/ExecutionEngine/ExecutionEngine.h>
#include <llvm/ModuleProvider.h>
#include <llvm/Support/MemoryBuffer.h>
#include <llvm/ExecutionEngine/JIT.h>
using namespace std;
using namespace llvm;
int main()
{
    InitializeNativeTarget();
    llvm_start_multithreaded();
    LLVMContext context;
    string error;
    auto_ptr<MemoryBuffer> buffer(MemoryBuffer::getFile("bitcode.bc"));
    auto_ptr<Module> module(ParseBitcodeFile(buffer.get(), context, &error));
    auto_ptr<ModuleProvider> mp(new ExistingModuleProvider(module));
    module.release();
    auto_ptr<ExecutionEngine> ee(ExecutionEngine::createJIT(mp.get(), &error));
    mp.release();
    Function* func = ee->getFunction("foo");
    typedef void (*PFN)();
    PFN pfn = reinterpret_cast<PFN>(ee->getPointerToFunction(func));
    pfn();
}
    コマンドラインから、LLVM プログラム lli を使用して bc ファイルを実行できます。ファイルが LLVM アセンブリ言語の場合は、最初に llvm-as を実行してバイナリ ビットコード ファイルを作成する必要があります。
C からこれを行うのは簡単です。詳細な LLVM ドキュメントを参照することをお勧めします: http://llvm.org/docs
そのページにリンクがある LLVM irc チャンネルには、質問に喜んで答えてくれる知識豊富な人々がたくさんいます。
間接的な回答で申し訳ありません。私は LLVM を広く使用していますが、時間のコンパイルだけでなく直接コード生成も行っています。