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?