我正在为 LLVM 实现一个新的后端,从 CBackend 目标开始。 最终目标是使用“llc”生成输入 C 代码的源转换。 但是,我想进行一些优化,但在此上下文中似乎没有得到很好的支持。 LLVM 目标代码非常低级,我必须检查它以重新发现实际发生了什么。这在 AST 级别上做起来要简单得多。 但是,AST 级别似乎是 Clang 内部构造,并且没有简单的方法插入其中。
我是否必须检查 LLVM 目标代码并自行对更高级别的流程进行逆向工程? (是不是每个后端都要做这个?好像很浪费!)
最佳答案
一般来说,您无法对所有内容进行逆向工程。所以,你只有两种可能:
- 在 clang AST 级别上做所有事情。
- 发出可能有助于您恢复输入源某些方面的附加信息(例如通过元数据)。
但实际上,您不应该在 LLVM IR 级别上进行任何源到源的转换,对于给定的目标来说,它是一个错误的工具。您肯定可以插入到 AST 级别。例如。 clang 源代码包含一个将 ObjC 代码转换为普通 C 代码的重写器。
关于c - LLVM、CLang 和 LLC 优化通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5208228/