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.