https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112941

--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Testcase covering various cases where 2 consecutive casts can't be optimized
away.
This ICEs in multiple ways as well:
void
f1 (_BitInt(4096) *p, int r, _BitInt(115) s, _BitInt(128) t, _BitInt(231) u)
{
  p[0] += (unsigned _BitInt(2048)) r;
  p[1] += (unsigned _BitInt(2048)) s;
  p[2] += (unsigned _BitInt(2048)) t;
  p[3] += (unsigned _BitInt(2048)) u;
}

void
f2 (_BitInt(4096) *p, int r, _BitInt(115) s, _BitInt(128) t, _BitInt(231) u)
{
  p[0] *= (unsigned _BitInt(2048)) r;
  p[1] *= (unsigned _BitInt(2048)) s;
  p[2] *= (unsigned _BitInt(2048)) t;
  p[3] *= (unsigned _BitInt(2048)) u;
}

void
f3 (_BitInt(4096) *p, int r, _BitInt(115) s, _BitInt(128) t, _BitInt(231) u)
{
  p[0] += (unsigned _BitInt(2110)) r;
  p[1] += (unsigned _BitInt(2110)) s;
  p[2] += (unsigned _BitInt(2110)) t;
  p[3] += (unsigned _BitInt(2110)) u;
}

void
f4 (_BitInt(4096) *p, int r, _BitInt(115) s, _BitInt(128) t, _BitInt(231) u)
{
  p[0] *= (unsigned _BitInt(2110)) r;
  p[1] *= (unsigned _BitInt(2110)) s;
  p[2] *= (unsigned _BitInt(2110)) t;
  p[3] *= (unsigned _BitInt(2110)) u;
}

void
f5 (unsigned _BitInt(4096) *p, int r, _BitInt(115) s, _BitInt(128) t,
_BitInt(231) u)
{
  p[0] += (unsigned _BitInt(2048)) r;
  p[1] += (unsigned _BitInt(2048)) s;
  p[2] += (unsigned _BitInt(2048)) t;
  p[3] += (unsigned _BitInt(2048)) u;
}

void
f6 (unsigned _BitInt(4096) *p, int r, _BitInt(115) s, _BitInt(128) t,
_BitInt(231) u)
{
  p[0] *= (unsigned _BitInt(2048)) r;
  p[1] *= (unsigned _BitInt(2048)) s;
  p[2] *= (unsigned _BitInt(2048)) t;
  p[3] *= (unsigned _BitInt(2048)) u;
}

void
f7 (unsigned _BitInt(4096) *p, int r, _BitInt(115) s, _BitInt(128) t,
_BitInt(231) u)
{
  p[0] += (unsigned _BitInt(2110)) r;
  p[1] += (unsigned _BitInt(2110)) s;
  p[2] += (unsigned _BitInt(2110)) t;
  p[3] += (unsigned _BitInt(2110)) u;
}

void
f8 (unsigned _BitInt(4096) *p, int r, _BitInt(115) s, _BitInt(128) t,
_BitInt(231) u)
{
  p[0] *= (unsigned _BitInt(2110)) r;
  p[1] *= (unsigned _BitInt(2110)) s;
  p[2] *= (unsigned _BitInt(2110)) t;
  p[3] *= (unsigned _BitInt(2110)) u;
}

#if __SIZEOF_INT128__
void
f9 (_BitInt(4096) *p, __int128 r)
{
  p[0] += (unsigned _BitInt(2048)) r;
}

void
f10 (_BitInt(4096) *p, __int128 r)
{
  p[0] *= (unsigned _BitInt(2048)) r;
}

void
f11 (_BitInt(4096) *p, __int128 r)
{
  p[0] += (unsigned _BitInt(2110)) r;
}

void
f12 (_BitInt(4096) *p, __int128 r)
{
  p[0] *= (unsigned _BitInt(2110)) r;
}

void
f13 (unsigned _BitInt(4096) *p, __int128 r)
{
  p[0] += (unsigned _BitInt(2048)) r;
}

void
f14 (unsigned _BitInt(4096) *p, __int128 r)
{
  p[0] *= (unsigned _BitInt(2048)) r;
}

void
f15 (unsigned _BitInt(4096) *p, __int128 r)
{
  p[0] += (unsigned _BitInt(2110)) r;
}

void
f16 (unsigned _BitInt(4096) *p, __int128 r)
{
  p[0] *= (unsigned _BitInt(2110)) r;
}
#endif

Reply via email to