https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96262
--- Comment #2 from Hongtao.liu <crazylht at gmail dot com> --- 2268inline wi::storage_ref 2269wi::int_traits <rtx_mode_t>::decompose (HOST_WIDE_INT *, 2270 unsigned int precision, 2271 const rtx_mode_t &x) 2272{ 2273 gcc_checking_assert (precision == get_precision (x)); 2274 switch (GET_CODE (x.first)) 2275 { 2276 case CONST_INT: 2277 if (precision < HOST_BITS_PER_WIDE_INT) 2278 /* Nonzero BImodes are stored as STORE_FLAG_VALUE, which on many 2279 targets is 1 rather than -1. */ B228=> gcc_checking_assert (INTVAL (x.first) 2281 == sext_hwi (INTVAL (x.first), precision) 2282 || (x.second == BImode && INTVAL (x.first) == (gdb) p debug_rtx (x.first) (const_int 254 [0xfe]) (gdb) p INTVAL(x.first) $48 = 254 (gdb) p sext_hwi (INTVAL (x.first), precision) $49 = -2 (gdb) p precision $50 = 8 For E_QImode const_int 254 is equivilent to -2, Should this condition be relaxed? Or it could be fixed by --- - unsigned int and_constant, xor_constant; + char and_constant, xor_constant; ---- > used by GEN_INT, be promoted to HOST_WID_INT. ---