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.
---

Reply via email to