https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79197
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Actually, it ICEs for me only if auto-host.h doesn't have HAVE_POPCNTD defined. And the problem is in mismatch of the conditions: (define_expand "fixuns_trunc<mode>di2" [(set (match_operand:DI 0 "register_operand" "") (unsigned_fix:DI (match_operand:SFDF 1 "register_operand" "")))] "TARGET_HARD_FLOAT && (TARGET_FCTIDUZ || VECTOR_UNIT_VSX_P (<MODE>mode))" "") (define_insn "*fixuns_trunc<mode>di2_fctiduz" [(set (match_operand:DI 0 "gpc_reg_operand" "=d,wi") (unsigned_fix:DI (match_operand:SFDF 1 "gpc_reg_operand" "<Ff>,<Fv>")))] "TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT && TARGET_FPRS && TARGET_FCTIDUZ" "@ fctiduz %0,%1 xscvdpuxds %x0,%x1" [(set_attr "type" "fp")]) If TARGET_FCTIDUZ is 0, then the second insn isn't enabled at all, while VECTOR_UNIT_VSX_P (DFmode) can still be true and then there is no insn to actually satisfy that. So, shall there be another define_insn like *fixuns_trunc<mode>di2_fctiduz for the !TARGET_FCTIDUZ case that will handle the VECTOR_UNIT_VSX_P (<MODE>mode) cases otherwise? Or just enable it under the same condition as the expander and if not TARGET_FCTIDUZ disable the first alternative? Also, why doesn't the define_expand have && TARGET_DOUBLE_FLOAT && TARGET_FPRS conditions?