I have stumbled into this by accident while preparing to extend backend x s% C ==/!= 0 handling.
While we did happen to handle this fold in most of the cases,
the folding is indirect - we fold x u% y to x & (y-1) (iff y is power-of-two),
or first turn x s% -y to x u% y; that does handle most of the cases.
But we can't turn x s% INT_MIN to x u% -INT_MIN,
and thus we end up being stuck with (x s% INT_MIN) == 0.
There is no such restriction for the more general fold:
https://rise4fun.com/Alive/IIeS
To be noted, the fold does not enforce that y is a constant,
so it may indeed increase instruction count.
This is consistent with what x u% y->x & (y-1) already does.
I think it makes sense, it's at most one (simple) extra instruction,
while remainder is really much more un-simple (and likely very costly).
Maybe separate patch + test for IRem?
Not sure if needed, since this fold “tests” it actually..