【问题标题】:LLVM - How AST can be transformed to IRLLVM - 如何将 AST 转换为 IR
【发布时间】:2014-08-30 09:08:09
【问题描述】:

我知道解析器生成的AST是用来在前端生成IR的。

我想知道如何解析 AST,然后将其转换为 IR(prob 程序集或位码),

AST 是一棵树,从 AST 到 IR 的转换涉及哪些步骤。

【问题讨论】:

    标签: llvm llvm-clang llvm-gcc llvm-ir


    【解决方案1】:

    发射LLVM IR from Clang ASTs 发生在Clang 的code gen 阶段。此阶段的代码位于lib/CodeGen/(相对于 Clang 的源代码根目录)。由于 Clang 在内存数据结构中拥有 AST,因此无需解析 AST。代码生成本质上是 AST 的递归遍历,它将 IR 发送到 Module。如果您对其中的任何特定步骤感兴趣,最好的检查方法是查看代码。

    【讨论】:

    • 谢谢伊莱。您是否介意解释一下“将 IR 发射到模块中的 AST 行走”期间发生的事情?
    • 我的意思是,如何将 AST 转换为 IR ?那是映射文件还是其他什么?
    • @Sam 详细解释过程会占用大量时间和篇幅,你最好自己去查源
    • @MarcoA.,感谢您的回复。是否可以给出一个非常简短的解释,以便我在深入研究代码之前可以有一个大致的了解?
    • @Sam:mishr 给出的链接是从简单 AST 发出 LLVM IR 的一个极好的简单示例。简单,因为输入语言简单。真正的 Clang AST 表示的语言绝非简单 (C++),因此遍历它们也非常复杂。
    猜你喜欢
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多