3

LLVM 有一个SelectInst用于表示诸如something = cond ? true-part : false-part.

IR 中的这条指令有什么好处,因为编译器?:也总是可以将其降低为 a ?BranchInst是否有支持此类指令的 CPU?还是被selectCodeGenerator 降为跳跃?

我认为分析通过可能有好处,因为它select保证了隐含的两个“分支” if。但另一方面,编译器根本不需要使用该指令,所以这些passbr无论如何都必须能够处理s。

4

1 回答 1

6

是的,您可以始终使用条件分支而不是选择指令,但选择有几个优点:

  1. 确实有相关的 CPU 指令可以降低这些指令,x86 中最明显的例子是cmov和各种set cc指令
  2. 选择更容易矢量化 - 事实上,矢量化的常见阶段之一是“如果转换”,将控制流(条件分支)转换为数据流(选择)的过程。
于 2013-09-07T13:11:39.340 回答