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