Dan*_*Dan 16 c++ programming-languages llvm clang
有没有从llvm ir到工作源代码的简单方法?
具体来说,我想从一些简单的C++代码开始,它只修改POD(主要是整数,浮点数等),将其转换为llvm ir,对其执行一些简单的分析和转换,然后将其转换回C++代码?
它并不介意任何名称被破坏,我只是希望能够在进行依赖于机器的优化之前对源进行破解.
小智 31
实际上有很多选择.您可能感兴趣的2是-march=c和-march=cpp,它们是llc的选项.
跑:
llc -march=c -o code.c code.ll
Run Code Online (Sandbox Code Playgroud)
这会将LLVM bitcode转换code.ll回C并将其放入code.c.
也:
llc -march=cpp -o code.cpp code.ll
Run Code Online (Sandbox Code Playgroud)
这与C输出引擎不同.它实际上会写出可以运行以重建IR的C++代码.我使用这个个人将LLVM IR嵌入程序中,而不必处理解析bitcode文件或任何东西.
-march=cpp您可以看到更多选项llc --help,例如-cppgen=控制输出C++重建的IR的数量.
小智 15
CppBackend被删除了.自2016-05-05,r268631以来,我们没有-march = cpp和-march = c选项.
这里有一个问题......可能无法轻易地将IR表示回语言.
我的意思是,你可能会得到一些表示,但它可能不太可读.
问题是IR不关心高级语义,没有它......
我宁愿建议你学习阅读IR.我可以毫不费力地阅读它,我远不是一个专家.
否则,你可以从IR获得C代码.它与你的C++代码没有太大的相似之处,但如果没有ssa和phi节点,你可能会感觉更好.