https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116372
--- Comment #2 from Stefan Schulze Frielinghaus <stefansf at gcc dot gnu.org>
---
Finally a more manageable reproducer:
long x = -0x7fffffff - 1;
int main (void)
{
long y = x % (-0xf - 1);
if (-0x7fffffff - 1 + y == x == 0)
__builtin_abort ();
}
If compiled with -O1 -march=z13 and r15-2889 execution is successful and fails
with r15-2890 with r15-2903 manually applied on top. I haven't looked much
into it but at least they deviate in ce1 where I see
if-conversion succeeded through noce_convert_multiple_sets
Of course, might be still a latent bug/something else.