コードの枝は
int value = //some number;
if(value > some_other_value)
value *= 23;
else
value -= 5;
(コードの SIMD 最適化を有効にするため) ビットごとのマスキングを使用して削除できます。
const int Mask = (some_other_value-value)>>31;
value = ((value * 23)&Mask)|((value-5)&~Mask);
ただし、これがどのように機能するかはわかりません (ここで使用されている操作と、結果がバイナリでどのように表示されるかは理解していますが)。さらに、これはどの程度一般的に適用できますか? 元のコードが代わりに次のようなものだったらどうなるでしょうか
if(value & 1 == 1)
value *= 23;
else
value -= 5;
ブランチを削除したコードは同じですか? それ以外の場合、マスクの目的は何ですか?また、マスクを作成するにはどうすればよいですか? ここで何が起きてるの?