首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LLVM no-op指令?

LLVM no-op指令?
EN

Stack Overflow用户
提问于 2011-11-19 03:31:22
回答 3查看 3.9K关注 0票数 5

我正在为一种有空语句的语言编写一个赋值编译器。对于像if-then-else这样的结构,如果我可以在llvm中使用no-op语句,但我没有找到任何“官方”nop,那就太方便了。我有一些想法,但理想情况下,我希望有llvm来优化这部分代码并删除指令;有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-20 19:40:00

IR中没有no-op操作码。但是您可以安全地使用任何无副作用的死指令作为替代(也就是说,如果您确实需要发出一个no-op),因为优化器将非常容易地删除它们。例如,%nop = add i1 0, 0%nop = alloca i1, i1 0可以工作。

票数 6
EN

Stack Overflow用户

发布于 2015-04-03 02:11:54

看看这个内在的:

代码语言:javascript
复制
declare void @llvm.donothing() nounwind readnone

来自LLVM Language Reference Manual:

llvm.donothing内部函数不执行任何操作。它是仅有的两个可以用invoke指令调用的内部函数(除了llvm.experimental.patchpoint之外)之一。

票数 6
EN

Stack Overflow用户

发布于 2015-09-09 02:07:04

为if条件创建标签和分支,而不是noop或优化为noop的语句。

  1. 这简化了代码生成,不存在任何特殊情况。
  2. 优化器会将这些转换为phi
  3. 使代码的intention对开发人员来说是明确的。将来,您或其他人将不需要弄清楚为什么要插入这条额外的指令。

例如:

代码语言:javascript
复制
    %2 = icmp sgt i32 %0, %1
    br i1 %2, label %3, label %7
; <label>:3
;   ;; [instructions in block redacted for simplicity]
    br label %8
; <label>:7
    br label %8
; <label>:8
    %9 = load i32* %x, align 4 ;; continue on our merry way
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8188045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档