As noticed by Jakub in the discussion about yesterday's bswap changes.
The change should be a no-op in practice since AND and XOR don't have
libgcc2 functions; we'd always split into word-mode operations instead.
Even so, it doesn't make conceptual sense for can_open_code_p to call
can_implement_p.
The fact that this seems to be a recurring blind spot for me suggests
that I didn't choose good names...
gcc/
* optabs-query.cc (can_open_code_p): Use can_open_code_p rather
than can_implement_p when testing for AND and XOR.
if ((op == neg_optab || op == abs_optab)
&& is_a<scalar_float_mode> (GET_MODE_INNER (mode), &fmode)
&& get_absneg_bit_mode (op, mode, fmode, &bitpos).exists (&new_mode)
- && can_implement_p (op == neg_optab ? xor_optab : and_optab, new_mode))
+ && can_open_code_p (op == neg_optab ? xor_optab : and_optab, new_mode))
return true;
scalar_int_mode int_mode;