LLVM的SelectInst的好处

cpt*_*azz 2 llvm llvm-ir

LLVM有一个SelectInst用于表示表达式的表达式something = cond ? true-part : false-part.

这条指令在IR中有什么好处,编译器?:也可以一直降低到a BranchInst?是否有支持此类指令的CPU?或者select降级为CodeGenerator的跳转?

我认为分析传递可能有好处,因为它select保证了隐含的两个"分支" if.但另一方面,编译器根本不需要使用该指令,因此这些通道必须能够处理brs.

Oak*_*Oak 5

是的,你总是可以使用条件分支而不是select指令,但select有几个优点:

  1. 确实有相关的CPU指令来降低这些指令,x86中最明显的例子是cmov和各种set cc指令.
  2. 选择更易于矢量化 - 事实上,矢量化的常见阶段之一是"如果转换",即将控制流(条件分支)转换为数据流(选择)的过程.