https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87555

--- Comment #12 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Hongtao.liu from comment #10)
> > 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.

Yes.  This situation will happen when I push the SLP pattern detection
for addsub - we then no longer detect FMA on the GIMPLE level (we might
want to improve that as well, of course, exposing standard pattern names
for fmaddsub and fmsubadd).

Reply via email to