c - LLVM、CLang 和 LLC 优化通过

标签 c optimization llvm clang

我正在为 LLVM 实现一个新的后端,从 CBackend 目标开始。 最终目标是使用“llc”生成输入 C 代码的源转换。 但是,我想进行一些优化,但在此上下文中似乎没有得到很好的支持。 LLVM 目标代码非常低级,我必须检查它以重新发现实际发生了什么。这在 AST 级别上做起来要简单得多。 但是,AST 级别似乎是 Clang 内部构造,并且没有简单的方法插入其中。

我是否必须检查 LLVM 目标代码并自行对更高级别的流程进行逆向工程? (是不是每个后端都要做这个?好像很浪费!)

最佳答案

一般来说,您无法对所有内容进行逆向工程。所以,你只有两种可能:

  1. 在 clang AST 级别上做所有事情。
  2. 发出可能有助于您恢复输入源某些方面的附加信息(例如通过元数据)。

但实际上,您不应该在 LLVM IR 级别上进行任何源到源的转换,对于给定的目标来说,它是一个错误的工具。您肯定可以插入到 AST 级别。例如。 clang 源代码包含一个将 ObjC 代码转换为普通 C 代码的重写器。

关于c - LLVM、CLang 和 LLC 优化通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5208228/

相关文章:

c - 函数指针的问题

c - 生成无向图的邻接矩阵

c++ - 如何从 clang-tidy 中的 CStyleCastExpr 匹配器获取宏名称?

LLVM IR getelementptr LLVM C API 等效项

llvm - clang、opt、llc 和 llvm-linker 之间的关系

c - POSIX/C : chdir() not changing the directory with spaces?

c - 从一个函数返回多个值

python - 在 Python 中处理字符串——包还是硬代码?

Android Activity 有太多行

optimization - 我如何查看 LLVM 的 opt 使用了哪些优化过程?