【问题标题】:LLVM backend without jumps (no goto)没有跳转的 LLVM 后端(没有 goto)
【发布时间】: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

标签: llvm backend llvm-ir


【解决方案1】:

你可以参考 Emscripten 中的 relooper 算法,它是针对 LLVM IR 到 javascript 的,并且没有“goto”语句。

https://kripken.github.io/emscripten-site/docs/introducing_emscripten/Talks-and-Publications.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 2018-03-12
    相关资源
    最近更新 更多