我正在实施一个新的LLVM后端,从CBackend目标开始。 最终目标是使用“llc”生成输入C代码的源变换。 但是,我想做一些优化,在这种情况下似乎没有得到很好的支持。 LLVM目标代码是非常低级的,我必须检查它以重新发现实际发生的事情。这在AST级别上要简单得多。 但是,似乎AST级别是一个Clang内部构造,并且没有简单的方法来插入它。
我是否必须检查LLVM目标代码并自行反向设计更高级别的流程? (每个后端都必须这样做吗?这看起来很浪费!)
答案 0 :(得分:6)
一般情况下,您无法对所有内容进行逆向工程。所以,你只有两种可能性:
但实际上,你不应该在LLVM IR级别上进行任何源到源的转换,它对于给定的目标来说是一个错误的工具。你肯定可以插入AST级别。例如。 clang源包含一个将ObjC代码转换为普通C的重写器。