If we have a mask, and a value x, where (x & mask) == x, we can drop the AND and just use x.
This is about a 0.4% geomean code size improvement on CTMark at -O3 for AArch64.
In AArch64, this is most useful post-legalization. Patterns like this often show up when legalizing s1s, which must be extended to larger types.
e.g.
%cmp:_(s32) = G_ICMP ... %and:_(s32) = G_AND %cmp, 1
Since G_ICMP only produces a single bit, there's no reason to mask it with the G_AND.
I would kind of expect combines to be marked with requiring this, and the generated matcher table would understand to skip this if known bits isn't available