https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87555
--- Comment #10 from Hongtao.liu <crazylht at gmail dot com> --- > Note I'm not sure that doing fmaddsub as merge of fma and fms will be > optimal since that most definitely will preclude combine from recognizing > fmaddsub from (addsub (mul ..) x) which would be another goal to support > (PR81904) I guess you're talking about #include <x86intrin.h> __m128d f(__m128d x, __m128d y, __m128d z){ return _mm_addsub_pd(_mm_mul_pd(x,y),z); } which pass_combine tries Failed to match this instruction: (set (reg:V2DF 88) (vec_merge:V2DF (minus:V2DF (mult:V2DF (reg:V2DF 90) (reg:V2DF 91)) (reg:V2DF 92)) (plus:V2DF (mult:V2DF (reg:V2DF 90) (reg:V2DF 91)) (reg:V2DF 92)) (const_int 1 [0x1]))) but doesn't realize fisrt merge operand is fms and second is fma.