是否有一种从llvm ir转到工作源代码的简单方法?
具体来说,我想从一些简单的C ++代码开始,这些代码只修改POD(主要是整数,浮点数等),将其转换为llvm ir,对其执行一些简单的分析和转换然后将其转换回来进入C ++代码?
它并不介意任何名称被破坏,我只是希望能够在进行与机器相关的优化之前对源进行破解。
答案 0 :(得分:30)
实际上有很多选择。您可能感兴趣的2是-march=c
和-march=cpp
,它们是llc的选项。
执行命令
llc -march=c -o code.c code.ll
这会将code.ll
中的LLVM bitcode转换回C并将其放入code.c
。
此外:
llc -march=cpp -o code.cpp code.ll
这与C输出引擎不同。它实际上会写出可以运行以重建IR的C ++代码。我使用这个私有程序将LLVM IR嵌入程序中,而不必处理解析bitcode文件或任何东西。
-march=cpp
您可以使用llc --help
看到更多选项,例如-cppgen=
控制输出C ++重建的IR的数量。
答案 1 :(得分:12)
CppBackend已删除。自2016-05-05,r268631以来,我们没有-march = cpp和-march = c选项。
答案 2 :(得分:7)
这里存在一个问题......可能无法轻易将IR表示回语言。
我的意思是,您可能能够获得某些表示,但它可能更少可读。
问题在于,IR并不关心高级语义,没有它......
我建议你学习阅读IR。我可以在没有那么多努力的情况下阅读它,我远非成为一名专家。
否则,您可以从IR获得C代码。它与你的C ++代码没有太大相似之处,但如果没有ssa和phi节点,你可能会感觉更好。