On Fri, 18 Jun 2021, Uros Bizjak wrote:

> On Fri, Jun 18, 2021 at 11:13 AM Richard Biener <rguent...@suse.de> wrote:
> >
> > This merges the vec_addsub<mode>3 patterns using a mode attribute
> > for the vec_merge merge operand.
> >
> > Bootstrapped and tested on x86_64-unknown-linux-gnu.
> >
> > I'd appreciate an extra eye since this is the first time I'm
> > doing such.
> 
> The calculation of attributes is a bit more complex, please see inline.
> 
> > OK as a followup to the addsub pattern renaming?
> 
> OK with fixed attribute calculation.
> 
> Thanks,
> Uros.
> 
> >
> > Thanks,
> > Richard.
> >
> > 2021-06-18  Richard Biener  <rguent...@suse.de>
> >
> >         * config/i386/sse.md (vec_addsubv4df3, vec_addsubv2df3,
> >         vec_addsubv8sf3, vec_addsubv4sf3): Merge into ...
> >         (vec_addsub<mode>3): ... using a new addsub_cst mode attribute.
> > ---
> >  gcc/config/i386/sse.md | 72 ++++++++----------------------------------
> >  1 file changed, 14 insertions(+), 58 deletions(-)
> >
> > diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
> > index 038e2cd90d4..930e777ec08 100644
> > --- a/gcc/config/i386/sse.md
> > +++ b/gcc/config/i386/sse.md
> > @@ -2396,69 +2396,25 @@
> >     (set_attr "prefix" "<round_saeonly_scalar_prefix>")
> >     (set_attr "mode" "<ssescalarmode>")])
> >
> > -(define_insn "vec_addsubv4df3"
> > -  [(set (match_operand:V4DF 0 "register_operand" "=x")
> > -       (vec_merge:V4DF
> > -         (minus:V4DF
> > -           (match_operand:V4DF 1 "register_operand" "x")
> > -           (match_operand:V4DF 2 "nonimmediate_operand" "xm"))
> > -         (plus:V4DF (match_dup 1) (match_dup 2))
> > -         (const_int 5)))]
> > -  "TARGET_AVX"
> > -  "vaddsubpd\t{%2, %1, %0|%0, %1, %2}"
> > -  [(set_attr "type" "sseadd")
> > -   (set_attr "prefix" "vex")
> > -   (set_attr "mode" "V4DF")])
> > -
> > -(define_insn "vec_addsubv2df3"
> > -  [(set (match_operand:V2DF 0 "register_operand" "=x,x")
> > -       (vec_merge:V2DF
> > -         (minus:V2DF
> > -           (match_operand:V2DF 1 "register_operand" "0,x")
> > -           (match_operand:V2DF 2 "vector_operand" "xBm,xm"))
> > -         (plus:V2DF (match_dup 1) (match_dup 2))
> > -         (const_int 1)))]
> > -  "TARGET_SSE3"
> > -  "@
> > -   addsubpd\t{%2, %0|%0, %2}
> > -   vaddsubpd\t{%2, %1, %0|%0, %1, %2}"
> > -  [(set_attr "isa" "noavx,avx")
> > -   (set_attr "type" "sseadd")
> > -   (set_attr "atom_unit" "complex")
> > -   (set_attr "prefix" "orig,vex")
> > -   (set_attr "mode" "V2DF")])
> > -
> > -(define_insn "vec_addsubv8sf3"
> > -  [(set (match_operand:V8SF 0 "register_operand" "=x")
> > -       (vec_merge:V8SF
> > -         (minus:V8SF
> > -           (match_operand:V8SF 1 "register_operand" "x")
> > -           (match_operand:V8SF 2 "nonimmediate_operand" "xm"))
> > -         (plus:V8SF (match_dup 1) (match_dup 2))
> > -         (const_int 85)))]
> > -  "TARGET_AVX"
> > -  "vaddsubps\t{%2, %1, %0|%0, %1, %2}"
> > -  [(set_attr "type" "sseadd")
> > -   (set_attr "prefix" "vex")
> > -   (set_attr "mode" "V8SF")])
> > -
> > -(define_insn "vec_addsubv4sf3"
> > -  [(set (match_operand:V4SF 0 "register_operand" "=x,x")
> > -       (vec_merge:V4SF
> > -         (minus:V4SF
> > -           (match_operand:V4SF 1 "register_operand" "0,x")
> > -           (match_operand:V4SF 2 "vector_operand" "xBm,xm"))
> > -         (plus:V4SF (match_dup 1) (match_dup 2))
> > -         (const_int 5)))]
> > +(define_mode_attr addsub_cst [(V4DF "5") (V2DF "1")
> > +                              (V4SF "5") (V8SF "85")])
> 
> space here, please
> 
> > +(define_insn "vec_addsub<mode>3"
> > +  [(set (match_operand:VF_128_256 0 "register_operand" "=x,x")
> > +        (vec_merge:VF_128_256
> > +         (minus:VF_128_256
> > +           (match_operand:VF_128_256 1 "register_operand" "0,x")
> > +           (match_operand:VF_128_256 2 "vector_operand" "xBm, xm"))
> > +         (plus:VF_128_256 (match_dup 1) (match_dup 2))
> > +         (const_int <addsub_cst>)))]
> >    "TARGET_SSE3"
> >    "@
> > -   addsubps\t{%2, %0|%0, %2}
> > -   vaddsubps\t{%2, %1, %0|%0, %1, %2}"
> > +   addsub<ssemodesuffix>\t{%2, %0|%0, %2}
> > +   vaddsub<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
> >    [(set_attr "isa" "noavx,avx")
> >     (set_attr "type" "sseadd")
> > +   (set_attr "atom_unit" "other,complex")
> 
>    (set (attr "atom_unit")
>        (if_then_else
>       (match_test "<MODE>mode == V2DFmode")
>         (const_string "complex")
>         (const_string "*")))
> 
> >     (set_attr "prefix" "orig,vex")
> > -   (set_attr "prefix_rep" "1,*")
> 
>    (set (attr "prefix_rep")
>     (if_then_else
>       (and (match_test "<MODE>mode == V4SFmode")
>            (eq_attr "alternative" "0"))
>       (const_string "1")
>       (const_string "*")))

Oops, missed that one.

Thanks for the fixes, I have queued the updated patch.

Richard.

> > -   (set_attr "mode" "V4SF")])
> > +   (set_attr "mode" "<MODE>")])
> >
> >  (define_split
> >    [(set (match_operand:VF_128_256 0 "register_operand")
> > --
> > 2.26.2
> 

Reply via email to