从具有多个llvm返回的函数构建AST

时间:2011-09-11 07:56:21

标签: llvm

例如我有这个功能:

def max(a,b) {
   if(a < b) return b;
   if(a > b) return a;
}

我很好奇如何将其解析为AST。 如果我理解这一点,那么它的身体节点应该返回一个ReturnInst *。

但在我的AST中,这个主体包含两个节点(作为表达式),一个用于第一个if,另一个用于另一个。

是否有一些技巧或设计错误开始?

编辑:我只是强调一个可能是一个解决方案:

  1. 在身体开始处创建AnAlloca。
  2. CreateStore并在每次返回时跳转到结束标签。
  3. 在结束标签处返回var。
  4. 这是个好主意吗?以及如何使用llvm跳转/转到?

2 个答案:

答案 0 :(得分:1)

您可以尝试在线演示:http://llvm.org/demo/在C或C ++中键入您要执行的操作,它将显示LLVM输出。

答案 1 :(得分:0)

如果我正确理解,你使用alloca + store + jump概述的解决方案肯定有效。是的,LLVM优化器可以很好地处理它。或者,对给定函数中的ret指令数没有任何限制。

不确定你要求生成goto;如果你已经设法写了一个if语句,它就是你在一个语句结束时需要的那种br指令。通常,在一些简单的代码上运行“clang -S -emit-llvm”是一种很好的技术,可以看到如何生成简单的结构。另外,“llc -march = cpp”是了解如何在C ++中构建指令的好方法。