Я хочу разобрать IR-файл, созданный с помощью clang++ -S -emit-llvm test.cpp -o test.ir
, с помощью вызова parseIRFile
, немного манипулировать этим IR, а затем записать IR обратно в файл.LLVM: Как записать IR в файл и запустить его?
Я пробовал использовать вызов WriteBitcodeToFile
, но это не работает должным образом.
Как бы написать модуль обратно в ИК-порт, а затем скомпилировать и запустить измененный ИК-порт?
#include <llvm/IR/Module.h>
#include <llvm/IRReader/IRReader.h>
#include <llvm/IR/LLVMContext.h>
#include <llvm/Support/SourceMgr.h>
#include <llvm/Bitcode/ReaderWriter.h>
#include <llvm/Support/FileSystem.h>
using namespace llvm;
int main()
{
LLVMContext context;
SMDiagnostic error;
std::unique_ptr<Module> m = parseIRFile("test.ir", error, context);
std::error_code EC;
llvm::raw_fd_ostream OS("module", EC, llvm::sys::fs::F_None);
WriteBitcodeToFile(m.get(), OS);
OS.flush();
return 0;
}
Что вы имеете в виду под "не работает, как ожидалось"? – Steeve
Когда я открываю файл, содержимое кажется двоичным? – Shuzheng
@Shuzheng Это всего лишь двоичное кодирование IR. Вы можете использовать 'llvm-dis' для получения текстового IR, но вы должны иметь возможность использовать' llc' непосредственно в двоичном файле для создания объектного файла. – TartanLlama