https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84687
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- This seems to be a general match.pd issue. We have: vect_patt_27.7_52 = exp.simdclone.0 (vect_patt_6.6_50); vect_patt_27.7_53 = exp.simdclone.0 (vect_patt_6.6_51); vect__26.9_57 = exp.simdclone.0 (vect__25.8_55); vect__26.9_58 = exp.simdclone.0 (vect__25.8_56); vect__4.10_59 = vect__26.9_57 * vect_patt_27.7_52; vect__4.10_60 = vect__26.9_58 * vect_patt_27.7_53; and apply the: /* Simplify expN(x) * expN(y) -> expN(x+y). */ (for exps (EXP EXP2 EXP10 POW10) (simplify (mult (exps:s @0) (exps:s @1)) (exps (plus @0 @1)))) rule to it and emit __builtin_exp !! rather than the exp.simdclone.0 calls, but of course __builtin_exp can't handle vector arguments. So, shall simd_clone_create just clear DECL_BUILT_IN_CLASS and DECL_FUNCTION_CODE of the simd clones it creates (thus disabling all further optimizations of it), or do we want to make match.pd generator smarter and allow somehow propagating the actual fndecls used from the original and copy, or both (do the former temporarily and later on undo it and improve match.pd)?