From: "Kewen.Lin" <linkw@linux.ibm.com>
To: Carl Love <cel@us.ibm.com>
Cc: Peter Bergner <bergner@linux.ibm.com>,
David Edelsohn <dje.gcc@gmail.com>,
Segher Boessenkool <segher@kernel.crashing.org>,
gcc-patches@gcc.gnu.org
Subject: Re: [PATCH 2/2 ver 5] rs6000, fix vec_replace_unaligned built-in arguments
Date: Mon, 24 Jul 2023 10:13:15 +0800 [thread overview]
Message-ID: <62048ca6-cfc8-e0fe-a739-27d72f3a74f7@linux.ibm.com> (raw)
In-Reply-To: <5597532f97f3fcb977e8153c0185e97acf0be8b1.camel@us.ibm.com>
Hi Carl,
on 2023/7/22 07:38, Carl Love wrote:
> GCC maintainers:
>
> Version 5, Fixed patch description, the first argument should be of
> type vector. Fixed comment in vsx.md to say "Vector and scalar
> extract_elt iterator/attr ....". Removed a few of the changes in
> version 4. Specifically, reverted the names of REPLACE_ELT_V_sh back
> to REPLACE_ELT_sh and REPLACE_ELT_V_max back to REPLACE_ELT_V_max.
> Combined the REPLACE_ELT_char and REPLACE_ELT_V_char mode attributes
> into REPLACE_ELT_char. Put the "dg-do link" directive back into the
> vec-replace-word-runnable_1.c test file. The patch was tested with the
> updated patch 1 in the series on Power 8 LE/BE, Power 9 LE/BE and Power
> 10 with no regressions.
>
snip...
> --------------------------------
> rs6000, fix vec_replace_unaligned built-in arguments
>
> The first argument of the vec_replace_unaligned built-in should always be
> of type vector unsigned char, as specified in gcc/doc/extend.texi.
>
> This patch fixes the builtin definitions and updates the test cases to use
> the correct arguments. The original test file is renamed and a second test
> file is added for a new test case.
>
> gcc/ChangeLog:
> * config/rs6000/rs6000-builtins.def: Rename
> __builtin_altivec_vreplace_un_uv2di as __builtin_altivec_vreplace_un_udi
> __builtin_altivec_vreplace_un_uv4si as __builtin_altivec_vreplace_un_usi
> __builtin_altivec_vreplace_un_v2df as __builtin_altivec_vreplace_un_df
> __builtin_altivec_vreplace_un_v2di as __builtin_altivec_vreplace_un_di
> __builtin_altivec_vreplace_un_v4sf as __builtin_altivec_vreplace_un_sf
> __builtin_altivec_vreplace_un_v4si as __builtin_altivec_vreplace_un_si.
> Rename VREPLACE_UN_UV2DI as VREPLACE_UN_UDI, VREPLACE_UN_UV4SI as
> VREPLACE_UN_USI, VREPLACE_UN_V2DF as VREPLACE_UN_DF,
> VREPLACE_UN_V2DI as VREPLACE_UN_DI, VREPLACE_UN_V4SF as
> VREPLACE_UN_SF, VREPLACE_UN_V4SI as VREPLACE_UN_SI.
> Rename vreplace_un_v2di as vreplace_un_di, vreplace_un_v4si as
> vreplace_un_si, vreplace_un_v2df as vreplace_un_df,
> vreplace_un_v2di as vreplace_un_di, vreplace_un_v4sf as
> vreplace_un_sf, vreplace_un_v4si as vreplace_un_si.
> * config/rs6000/rs6000-c.cc (find_instance): Add case
> RS6000_OVLD_VEC_REPLACE_UN.
> * config/rs6000/rs6000-overload.def (__builtin_vec_replace_un):
> Fix first argument type. Rename VREPLACE_UN_UV4SI as
> VREPLACE_UN_USI, VREPLACE_UN_V4SI as VREPLACE_UN_SI,
> VREPLACE_UN_UV2DI as VREPLACE_UN_UDI, VREPLACE_UN_V2DI as
> VREPLACE_UN_DI, VREPLACE_UN_V4SF as VREPLACE_UN_SF,
> VREPLACE_UN_V2DF as VREPLACE_UN_DF.
> * config/rs6000/vsx.md (REPLACE_ELT): Renamed the mode_iterator
Nit: s/Renamed/Rename/
> REPLACE_ELT_V for vector modes.
> (REPLACE_ELT): New scalar mode iterator.
> (REPLACE_ELT_char): Add scalar attributes.
> (vreplace_un_<mode>): Change iterator and mode attribute.
>
> gcc/testsuite/ChangeLog:
> * gcc.target/powerpc/vec-replace-word-runnable.c: Renamed
> vec-replace-word-runnable_1.c.
Ditto.
> * gcc.target/powerpc/vec-replace-word-runnable_1.c
> (dg-options): add -flax-vector-conversions.
> (vec_replace_unaligned) Fix first argument type.
> (vresult_uchar): Fix expected results.
> (vec_replace_unaligned): Update for loop to check uchar results.
> Remove extra spaces in if statements. Insert missing spaces in
> for statements.
> * gcc.target/powerpc/vec-replace-word-runnable_2.c: New test file.
> ---
[snip...]
>
> [VEC_REVB, vec_revb, __builtin_vec_revb]
> vss __builtin_vec_revb (vss);
> diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md
> index 0c269e4e8d9..7a4cf492ea5 100644
> --- a/gcc/config/rs6000/vsx.md
> +++ b/gcc/config/rs6000/vsx.md
> @@ -380,10 +380,13 @@ (define_int_attr xvcvbf16 [(UNSPEC_VSX_XVCVSPBF16 "xvcvspbf16")
> ;; Like VI, defined in vector.md, but add ISA 2.07 integer vector ops
> (define_mode_iterator VI2 [V4SI V8HI V16QI V2DI])
>
> -;; Vector extract_elt iterator/attr for 32-bit and 64-bit elements
> -(define_mode_iterator REPLACE_ELT [V4SI V4SF V2DI V2DF])
> +;; Vector and scalar extract_elt iterator/attr for 32-bit and 64-bit elements
Nit: Since you touched this comment line, extract_elt is wrong before.
Maybe s/extract_elt/vector replace/?
> +(define_mode_iterator REPLACE_ELT_V [V4SI V4SF V2DI V2DF])
> +(define_mode_iterator REPLACE_ELT [SI SF DI DF])
> (define_mode_attr REPLACE_ELT_char [(V4SI "w") (V4SF "w")
> - (V2DI "d") (V2DF "d")])
> + (V2DI "d") (V2DF "d")
> + (SI "w") (SF "w")
> + (DI "d") (DF "d")])
> (define_mode_attr REPLACE_ELT_sh [(V4SI "2") (V4SF "2")
> (V2DI "3") (V2DF "3")])
> (define_mode_attr REPLACE_ELT_max [(V4SI "12") (V4SF "12")
> @@ -4183,11 +4186,11 @@ (define_insn "vinsertgr_internal_<mode>"
> [(set_attr "type" "vecsimple")])
>
> (define_expand "vreplace_elt_<mode>"
> - [(set (match_operand:REPLACE_ELT 0 "register_operand")
> - (unspec:REPLACE_ELT [(match_operand:REPLACE_ELT 1 "register_operand")
> - (match_operand:<VEC_base> 2 "register_operand")
> - (match_operand:QI 3 "const_0_to_3_operand")]
> - UNSPEC_REPLACE_ELT))]
> + [(set (match_operand:REPLACE_ELT_V 0 "register_operand")
> + (unspec:REPLACE_ELT_V [(match_operand:REPLACE_ELT_V 1 "register_operand")
> + (match_operand:<VEC_base> 2 "register_operand")
> + (match_operand:QI 3 "const_0_to_3_operand")]
> + UNSPEC_REPLACE_ELT))]
> "TARGET_POWER10"
> {
> int index;
> @@ -4207,19 +4210,19 @@ (define_expand "vreplace_elt_<mode>"
> [(set_attr "type" "vecsimple")])
>
> (define_insn "vreplace_elt_<mode>_inst"
> - [(set (match_operand:REPLACE_ELT 0 "register_operand" "=v")
> - (unspec:REPLACE_ELT [(match_operand:REPLACE_ELT 1 "register_operand" "0")
> - (match_operand:<VEC_base> 2 "register_operand" "r")
> - (match_operand:QI 3 "const_0_to_12_operand" "n")]
> - UNSPEC_REPLACE_ELT))]
> + [(set (match_operand:REPLACE_ELT_V 0 "register_operand" "=v")
> + (unspec:REPLACE_ELT_V [(match_operand:REPLACE_ELT_V 1 "register_operand" "0")
> + (match_operand:<VEC_base> 2 "register_operand" "r")
> + (match_operand:QI 3 "const_0_to_12_operand" "n")]
> + UNSPEC_REPLACE_ELT))]
> "TARGET_POWER10"
> "vins<REPLACE_ELT_char> %0,%2,%3"
> [(set_attr "type" "vecsimple")])
>
> (define_insn "vreplace_un_<mode>"
> [(set (match_operand:V16QI 0 "register_operand" "=v")
> - (unspec:V16QI [(match_operand:REPLACE_ELT 1 "register_operand" "0")
> - (match_operand:<VEC_base> 2 "register_operand" "r")
> + (unspec:V16QI [(match_operand:V16QI 1 "register_operand" "0")
> + (match_operand:REPLACE_ELT 2 "register_operand" "r")
> (match_operand:QI 3 "const_0_to_12_operand" "n")]
> UNSPEC_REPLACE_UN))]
> "TARGET_POWER10"
[snip...]
> }
>
> /* { dg-final { scan-assembler-times {\mvinsw\M} 6 } } */
> /* { dg-final { scan-assembler-times {\mvinsd\M} 6 } } */
> -
> -
> diff --git a/gcc/testsuite/gcc.target/powerpc/vec-replace-word-runnable_2.c b/gcc/testsuite/gcc.target/powerpc/vec-replace-word-runnable_2.c
> new file mode 100644
> index 00000000000..bf0952c029f
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/vec-replace-word-runnable_2.c
> @@ -0,0 +1,50 @@
> +/* { dg-do run { target { power10_hw } } } */
> +/* { dg-require-effective-target power10_ok } */
Nit: I think power10_ok isn't needed, if power10_ok fails, power10_hw would never succeed.
This patch is okay for trunk with some nits above fixed. Thanks!
BR,
Kewen
prev parent reply other threads:[~2023-07-24 2:13 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-21 23:26 [PATCH 0/2 ver 2] " Carl Love
2023-07-21 23:38 ` [PATCH 1/2 ver 2] rs6000, add argument to function find_instance Carl Love
2023-07-24 1:55 ` Kewen.Lin
2023-07-21 23:38 ` [PATCH 2/2 ver 5] rs6000, fix vec_replace_unaligned built-in arguments Carl Love
2023-07-24 2:13 ` Kewen.Lin [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=62048ca6-cfc8-e0fe-a739-27d72f3a74f7@linux.ibm.com \
--to=linkw@linux.ibm.com \
--cc=bergner@linux.ibm.com \
--cc=cel@us.ibm.com \
--cc=dje.gcc@gmail.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=segher@kernel.crashing.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).