&& は & より遅い

Compiler に面倒見てもらえないのかと言ったやつ。とりあえずの解釈として、&& は & や % などとの組合せの代数的性質がよくないので compiler が reduce しにくい/しようとしないのかと考えてみた。つまり、&& などの条件演算子はあくまで独立条件を加味した bool 代数演算で reduce して、個々の条件にある bit 演算子は剰余代数で変換をかけ、両方を合わせた reduce は (殆ど) しない。という風に gcc が code されてるのかも。
ちょっと実験したところ、

(x & 4) && (x & 8) --> (x & 4) && (x & 8)
(x & 4) & (x & 8)  --> 0
(x & 4) | (x & 8) && (x & 2) --> (x & 12) && (x & 2)

という風に処理された。これ以上は code 見た方が早いかな。