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

--- Comment #2 from Hongtao.liu <crazylht at gmail dot com> ---
When mask is integer_cst, it not safe to replace_uses_by (use_lhs, lhs); since
integer_cst has type signed int, but lhs has type unsigned int, and will issue
ICE for type mismatch
_7 = _1 & 8;

_1 is signed int, and 8 is unsigged int CST.


The problem is exposed only on aarch64 since the backend doesn't have
corresponding optab and failed, but the original gimple has been changed.

  switch (fn)
    {
    case IFN_ATOMIC_BIT_TEST_AND_SET:
      optab = atomic_bit_test_and_set_optab;
      break;
    case IFN_ATOMIC_BIT_TEST_AND_COMPLEMENT:
      optab = atomic_bit_test_and_complement_optab;
      break;
    case IFN_ATOMIC_BIT_TEST_AND_RESET:
      optab = atomic_bit_test_and_reset_optab;
      break;
    default:
      return;
    }

  if (optab_handler (optab, TYPE_MODE (TREE_TYPE (lhs))) == CODE_FOR_nothing)

Reply via email to