Handle cmp(and(x, y), 0)
There's no need to require y to be a constant. This restriction was an artifact of the old implementation using containment in lower/codegen to recognize this pattern.
This results in a couple of hundred AND instructions being converted to TEST. This is preferable as TEST can be macro-fused with the conditional branch that may follow it.
Occasionally this also saves a MOV because TEST doesn't update its first operand like AND does.
FX diff shows a 118 bytes improvement without any regressions.
Commit migrated from https://github.com/dotnet/coreclr/commit/
811ce7e6dea304bfc71df468f3ebbb3ecef30f08