https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87555
Bug ID: 87555 Summary: There is no need for UNSPEC_FMADDSUB Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: hjl.tools at gmail dot com Target Milestone: --- Target: i386,x86-64 sse.md has ;; It would be possible to represent these without the UNSPEC as ;; ;; (vec_merge ;; (fma op1 op2 op3) ;; (fma op1 op2 (neg op3)) ;; (merge-const)) ;; ;; But this doesn't seem useful in practice. (define_expand "fmaddsub_<mode>" [(set (match_operand:VF 0 "register_operand") (unspec:VF [(match_operand:VF 1 "nonimmediate_operand") (match_operand:VF 2 "nonimmediate_operand") (match_operand:VF 3 "nonimmediate_operand")] UNSPEC_FMADDSUB))] "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512F") There is no need for UNSPEC_FMADDSUB.