【发布时间】:2017-03-31 09:29:01
【问题描述】:
我需要为不支持跳转(有条件或无条件)的语言编写 LLVM 后端。我可以使用的唯一流控制结构是 if-then-else 和 while 循环(加上 break 和 continue)。
有没有什么方法(或实用程序)可以从基于 LLVM 跳转+phi-node 转换为这个?
【问题讨论】:
-
if-then-else基本不就是跳跃吗? -
@arrowd:我的意思是目标语言不支持设置标签和对其执行 GOTO,这就是 LLVM 生成代码的工作方式。
-
你的意思是你的后端发出这种语言的代码吗?
-
@RegisPortalez:是的,我的后端使用不支持 GOTO 的语言发出代码(仅限 while 循环和 if-then-else)。
-
添加目标语言的示例。我编写了一种没有显式“goto”的语言,但是当我发出 LLVM-IR 时,它使用
branch and/or phi最终在机器代码中编译为jmp。