llvm ir回到人类可读的源语言?

时间:2011-03-03 12:50:42

标签: c++ programming-languages llvm clang

是否有一种从llvm ir转到工作源代码的简单方法?

具体来说,我想从一些简单的C ++代码开始,这些代码只修改POD(主要是整数,浮点数等),将其转换为llvm ir,对其执行一些简单的分析和转换然后将其转换回来进入C ++代码?

它并不介意任何名称被破坏,我只是希望能够在进行与机器相关的优化之前对源进行破解。

3 个答案:

答案 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节点,你可能会感觉更好。