3

LLVM には、 のSelectInstような式を表すために使用される がありsomething = cond ? true-part : false-partます。

コンパイラによって?:常に a に下げられる可能性があるため、IR でのこの命令の利点は何ですか? BranchInstそのような命令をサポートする CPU はありますか? とにかくCodeGeneratorselectによってジャンプに下げられますか?

selectは暗黙の 2 つの「分岐」を保証するため、分析パスには利点があると思いますif。しかし一方で、コンパイラは命令をまったく使用する必要がないため、これらのパスはいずれにbrせよ s を処理できなければなりません。

4

1 に答える 1

6

はい、選択命令の代わりに常に条件分岐を使用できますが、選択にはいくつかの利点があります。

  1. 実際、それらを下げる関連する CPU 命令があります。x86 での最も明白な例は、cmovおよびさまざまなset cc命令です。
  2. 選択はベクトル化がはるかに簡単です。実際、ベクトル化の通常のフェーズの 1 つは、制御フロー (条件分岐) をデータ フロー (選択) に変換するプロセスである「if 変換」です。
于 2013-09-07T13:11:39.340 に答える