使用LLVM编写编译器后端:语句的返回值



我正在为C语言的a子集编写一个基本编译器,并使用LLVM C++api编写后端。我主要遵循本教程。我知道AST中的每个节点都必须返回一个llvm::Value,这适用于表达式,但对于C语句我该返回什么?

例如,对于if-else块,我需要创建一个phi节点。构造函数Builder.CreatePHI采用这个if-else块应该求值的值的类型,但该类型应该是什么?

Phi节点表示从几个前置块的并集中获取值的操作。对于if/else中确定的每个值,您需要一个phi节点,例如有条件分配的寄存器变量。

如果您不使用寄存器变量或在基本块之间携带它们,那么您就不需要任何phi节点。

你不应该只需要一个phi节点来实现一个没有任何作用的if/else,这正是因为非表达式语句没有值。正如@ant提到的,您可能想要使用void类型。

例如,对于if-else块,我需要创建一个phi节点。

您不需要执行此操作。LLVM还有br指令,可以用于实现条件分支和无条件分支。

C语句经常返回一个未定义的void类型值。

相关内容

  • 没有找到相关文章

最新更新