This transforms:
select((C0 & C1), a, b) -> select(C0, select(C1, a, b), b)
select((C0 | C1), a, b) -> select(C0, a, select(C1, a, b))
The result is better on most targets as C0 and C1 do not need to be
materialized into an integer register but can stay flags.
I think that you want to explicitly add And to the worklist here (assuming that the builder has not constant-folded it).
otherwise we might not actually revisit it until the next main outer instcombine iteration.