gpt4 book ai didi

optimization - 直接使用 LLVM 是否容易达到 -O3 级别的优化?

转载 作者:行者123 更新时间:2023-12-03 15:59:50 25 4
gpt4 key购买 nike

使用 LLVM 是否容易实现高级别的优化?

举一个具体的例子,让我们假设我有一个简单的语言,我想为其编写一个编译器。

  • 简单函数
  • 简单结构
  • 指针(带算术)
  • 控制结构

  • 我可以很容易地创建编译到 C 的后端并依赖 clang -O3。
    为此目的使用 LLVM API 是否容易?

    最佳答案

    除了一些高级(例如,意识到未在 LLVM IR 中编码的高级语言功能或细节)优化之外,Clang 的后端所做的只是生成简单的 IR 并运行一些 LLVM 优化传递它。所有这些(或至少大部分)应该可以通过 opt 获得。命令以及在使用构建所有 LLVM 工具的 C++ 库时作为 API 调用。见 tutorial举个简单的例子。我看到了几个优点:

  • LLVM IR 比 C 简单得多,并且已经有一个方便的 API 以编程方式生成它。要生成 C,您要么有很多丑陋且不可靠的字符串摆弄,要么必须自己为 C 语言构建 AST。或两者。
  • 您可以自己选择优化集(很可能 Clang 的传递集对于语言支持的代码和编译器生成的 IR 表示并不理想)。这也意味着在开发过程中,您可以只运行通过检查 IR 格式是否正确(更快地发现编译器错误)。你可以直接复制 Clang 的传递顺序,但如果你喜欢,你也可以尝试。
  • 它将允许更好的编译时间。 Clang 对于 C 编译器来说速度很快,但是你会增加不必要的开销:你生成 C 代码,然后 Clang 解析它,将它转换为 IR,然后继续做几乎你可以立即做的事情。
  • 您可能可以访问更广泛的功能,或者至少您可以更轻松地提供它们(即无需合并 #define s、晦涩的编译指示、指令或命令行选项)来提供它们。我说的是像向量,有保证的(好吧,无论如何比在 C 中更多 - AFAIK,一些代码生成器忽略它们)尾调用,纯/只读函数,对内存布局和类型转换的更多控制(例如零扩展与符号延伸)。当然,您可能不需要其中的大部分。
  • 关于optimization - 直接使用 LLVM 是否容易达到 -O3 级别的优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7705031/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com