On Thu, Oct 10, 2024 at 5:46 AM Hu, Lin1 <[email protected]> wrote:
>
> Hi, all
>
> This is another patch to modify some pattern's type attr from ssemov to
> ssemov2.
>
> Some ssemov pattern's mem attr should be load when their 2 operand is a memory
> operand.
>
> Bootstrapped and regtested on x86-64-linux-pc, OK for trunk?
>
> BRs,
> Lin
>
> gcc/ChangeLog:
>
> * config/i386/sse.md
> (sse_movhlps): Change type attr from ssemov to ssemov2.
> (sse_loadhps): Ditto.
> (*vec_concat<mode>): Ditto.
> (vec_setv2df_0): Ditto.
> (sse_loadlps): Change attr from ssemov to ssemov2 except for 2, 3.
> (sse2_loadhps): Change attr from ssemov to ssemov2 except for 0, 1.
> (sse2_loadlpd): Change attr from ssemov to ssemov2 except for 0, 1,
> 2.
> (sse2_movsd_<mode>): Change attr from ssemov to ssemov2 except for 5.
> (vec_concatv2df): Change attr from ssemov to ssemov2 except for 0, 1,
> 2.
> (*vec_concat<mode>): Change attr from ssemov to ssemov2 for 3, 4.
> (vec_concatv2di): Change attr from ssemov to ssemov2 except for 0, 1,
> 2, 3, 4, 5.
LGTM.
Thanks,
Uros.
> ---
> gcc/config/i386/sse.md | 22 ++++++++++++----------
> 1 file changed, 12 insertions(+), 10 deletions(-)
>
> diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
> index ccef3e063ec..a45b50ad732 100644
> --- a/gcc/config/i386/sse.md
> +++ b/gcc/config/i386/sse.md
> @@ -10995,7 +10995,7 @@ (define_insn "sse_movhlps"
> vmovlps\t{%H2, %1, %0|%0, %1, %H2}
> %vmovhps\t{%2, %0|%q0, %2}"
> [(set_attr "isa" "noavx,avx,noavx,avx,*")
> - (set_attr "type" "ssemov")
> + (set_attr "type" "ssemov2")
> (set_attr "prefix" "orig,maybe_evex,orig,maybe_evex,maybe_vex")
> (set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
>
> @@ -11557,7 +11557,7 @@ (define_insn "sse_loadhps"
> vmovlhps\t{%2, %1, %0|%0, %1, %2}
> %vmovlps\t{%2, %H0|%H0, %2}"
> [(set_attr "isa" "noavx,avx,noavx,avx,*")
> - (set_attr "type" "ssemov")
> + (set_attr "type" "ssemov2")
> (set_attr "prefix" "orig,maybe_evex,orig,maybe_evex,maybe_vex")
> (set_attr "mode" "V2SF,V2SF,V4SF,V4SF,V2SF")])
>
> @@ -11610,7 +11610,7 @@ (define_insn "sse_loadlps"
> vmovlps\t{%2, %1, %0|%0, %1, %q2}
> %vmovlps\t{%2, %0|%q0, %2}"
> [(set_attr "isa" "noavx,avx,noavx,avx,*")
> - (set_attr "type" "sseshuf,sseshuf,ssemov,ssemov,ssemov")
> + (set_attr "type" "sseshuf,sseshuf,ssemov2,ssemov2,ssemov")
> (set (attr "length_immediate")
> (if_then_else (eq_attr "alternative" "0,1")
> (const_string "1")
> @@ -11766,7 +11766,7 @@ (define_insn "*vec_concat<mode>"
> movhps\t{%2, %0|%0, %q2}
> vmovhps\t{%2, %1, %0|%0, %1, %q2}"
> [(set_attr "isa" "noavx,avx,noavx,avx")
> - (set_attr "type" "ssemov")
> + (set_attr "type" "ssemov2")
> (set_attr "prefix" "orig,maybe_evex,orig,maybe_evex")
> (set_attr "mode" "V4SF,V4SF,V2SF,V2SF")])
>
> @@ -12214,7 +12214,7 @@ (define_insn "vec_setv2df_0"
> movlpd\t{%2, %0|%0, %2}
> vmovlpd\t{%2, %1, %0|%0, %1, %2}"
> [(set_attr "isa" "noavx,avx,noavx,avx")
> - (set_attr "type" "ssemov")
> + (set_attr "type" "ssemov2")
> (set_attr "mode" "DF")])
>
> (define_expand "vec_set<mode>"
> @@ -14665,7 +14665,7 @@ (define_insn "sse2_loadhpd"
> #
> #"
> [(set_attr "isa" "noavx,avx,noavx,avx,*,*,*")
> - (set_attr "type" "ssemov,ssemov,sselog,sselog,ssemov,fmov,imov")
> + (set_attr "type" "ssemov2,ssemov2,sselog,sselog,ssemov,fmov,imov")
> (set (attr "prefix_data16")
> (if_then_else (eq_attr "alternative" "0")
> (const_string "1")
> @@ -14735,6 +14735,8 @@ (define_insn "sse2_loadlpd"
> (const_string "fmov")
> (eq_attr "alternative" "10")
> (const_string "imov")
> + (eq_attr "alternative" "0,1,2")
> + (const_string "ssemov2")
> ]
> (const_string "ssemov")))
> (set (attr "prefix_data16")
> @@ -14787,7 +14789,7 @@ (define_insn "sse2_movsd_<mode>"
> (if_then_else
> (eq_attr "alternative" "5")
> (const_string "sselog")
> - (const_string "ssemov")))
> + (const_string "ssemov2")))
> (set (attr "prefix_data16")
> (if_then_else
> (and (eq_attr "alternative" "2,4")
> @@ -14859,7 +14861,7 @@ (define_insn "vec_concatv2df"
> (if_then_else
> (eq_attr "alternative" "0,1,2")
> (const_string "sselog")
> - (const_string "ssemov")))
> + (const_string "ssemov2")))
> (set (attr "prefix_data16")
> (if_then_else (eq_attr "alternative" "3")
> (const_string "1")
> @@ -21545,7 +21547,7 @@ (define_insn "*vec_concat<mode>"
> movhps\t{%2, %0|%0, %q2}
> vmovhps\t{%2, %1, %0|%0, %1, %q2}"
> [(set_attr "isa" "sse2_noavx,avx,noavx,noavx,avx")
> - (set_attr "type" "sselog,sselog,ssemov,ssemov,ssemov")
> + (set_attr "type" "sselog,sselog,ssemov,ssemov2,ssemov2")
> (set_attr "prefix" "orig,maybe_evex,orig,orig,maybe_evex")
> (set_attr "mode" "TI,TI,V4SF,V2SF,V2SF")])
>
> @@ -21653,7 +21655,7 @@ (define_insn "vec_concatv2di"
> (if_then_else
> (eq_attr "alternative" "0,1,2,3,4,5")
> (const_string "sselog")
> - (const_string "ssemov")))
> + (const_string "ssemov2")))
> (set (attr "addr")
> (if_then_else (eq_attr "alternative" "0,1")
> (const_string "gpr16")
> --
> 2.31.1
>