When we find something like this:
%a:_(s32) = G_SOMETHING ... ... %select:_(s32) = G_SELECT %cond(s1), %a, %a
We can remove the select and just replace it entirely with %a because it's always going to result in %a.
Same if we have
%select:_(s32) = G_SELECT %cond(s1), %a, %b
where we can deduce that %a == %b.
This implements the following cases:
- %select:_(s32) = G_SELECT %cond(s1), %a, %a -> %a
- %select:_(s32) = G_SELECT %cond(s1), %a, %some_copy_from_a -> %a
- %select:_(s32) = G_SELECT %cond(s1), %a, %b -> %a when %a and %b are defined by identical instructions
This gives a few minor code size improvements on CTMark at -O3 for AArch64.
Organize this into an identity_combines?