【问题标题】:LLVM, CLang and LLC optimization passLLVM、CLang 和 LLC 优化过程
【发布时间】:2011-03-06 02:25:49
【问题描述】:

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

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

【问题讨论】:

    标签: c optimization llvm clang


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的建议。不幸的是,问题在于它会将我与clang前端联系起来。 LLVM 的一点被宣传为前端和后端是分开的。如果有一种表示可以让我无论前端如何都可以进行转换,那就太好了。
    • 是的,但是您正在尝试做源代码级别的事情。这样,除了使用一些前端表示之外,我看不到其他方式。并非所有转换都可以在 IR 级别完成,特别是这样的高级转换。
    猜你喜欢
    • 2023-04-03
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    相关资源
    最近更新 更多