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

--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Another testcase (reduced from hdf5) that ICEs even with -O2 -mcpu=power8 when
assembler has popcntd etc. (power7/power8) support:

unsigned long b;

unsigned long
foo (float *a, float *x)
{
  __builtin_memcpy (a, x, sizeof (float));
  return *a;
}

But as it affects the same buggy expander, I think it is not worth filing yet
another PR about it.

Here the expander emits:
(insn 10 9 11 2 (set (reg:DI 160)
        (unsigned_fix:DI (subreg:SF (reg:SI 161) 0))) "hdf5.i":7 -1
     (nil))
where (subreg:SF (reg:S 161) 0) is valid register_operand (the predicate the
expander uses).
Except that the pattern actually uses a very different predicate,
gpc_reg_operand, which refuses to accept such a subreg.

Reply via email to