On Wed, Sep 2, 2026 at 1:18 PM Torbjörn Svensson via Sourceware Forge
<[email protected]> wrote:
>
> From: Torbjörn SVENSSON <[email protected]>
>
> vect_slp_v2qi_store_unalign tests whether the vectorizer handles a V2QI
> store through a byte-aligned base, but some -Wstringop-overflow tests
> instead depend on a V2QI store at a known one-byte misalignment from a
> defined object.
>
> These two variants are not the same on armv7ve with -mfloat-abi=hard.
> Add a separate effective target for the latter case.

Can you again explain why they are not the same?  I'm guessing it's
about knowing the misalignment vs. unknown misalignment but then
vect_slp_v2qi_store_misalign vs. _unalign is not obvious.  Maybe
_unknown_misalign vs. _known_misalign?  But I'm still curious
why a target choses to allow one but not the other (for stores there's
no dr_explicit_realign[_optimized])?

>
>         PR testsuite/124342
>         PR testsuite/124619
>
> gcc/ChangeLog:
>
>         * doc/sourcebuild.texi (vect_slp_v2qi_store_unalign): Document.
>         (vect_slp_v2qi_store_misalign): Likewise.
>
> gcc/testsuite/ChangeLog:
>
>         * lib/target-supports.exp (check_vect_slp_store_usage): Add
>         TEST_V2QI_MISALIGN.  Renamed TEST_V2QI to TEST_V2QI_ALIGN and
>         TEST_V2QI_2 to TEST_V2QI_UNALIGN.
>         (check_effective_target_vect_slp_v2qi_store_misalign): New proc.
>         (check_effective_target_vect_slp_v2qi_store_align): Define
>         TEST_V2QI_ALIGN.
>         (check_effective_target_vect_slp_v2qi_store_unalign): Define
>         TEST_V2QI_UNALIGN.
>         * c-c++-common/Wstringop-overflow-2.c: Use
>         check_effective_target_vect_slp_v2qi_store_misalign.
>         * g++.dg/warn/Wstringop-overflow-3.C: Likewise.
>
> Signed-off-by: Torbjörn SVENSSON <[email protected]>
> ---
> Changes since v1:
>
> - Renamed define TEST_V2QI to TEST_V2QI_ALIGN
> - Renamed define TEST_V2QI_2 to TEST_V2QI_UNALIGN
>
>
> I've tested this change on top of r17-3738-gaaa0f6b1e87bc6 and 
> r16-9620-g04c3e1efd4917e.
>
> Ok for trunk and releases/gcc-16?
>
>
> --
>
>
>
> This is a forge pull request published on the gcc-patches mailing list 
> mailing list
> as requested by Torbjörn Svensson via Sourceware Forge 
> <[email protected]>.
> Forge discussion: https://forge.sourceware.org/gcc/gcc/pulls/215
>
> Get it locally using:
> ```
> git fetch forge-upstream 
> "+refs/versioned_pull/215/*:refs/versioned_pull/215/*"
> git switch -c "pr-215-v2" "refs/versioned_pull/215/2/head"
> ```
> Or, download the patch at: https://forge.sourceware.org/gcc/gcc/pulls/215.diff
> Created on: 2026-08-10 17:42:02+00:00
> Latest update: 2026-09-02 11:17:13+00:00
> Changes: 4 changed files, 81 additions, 51 deletions
> Head revision: azoff/gcc ref pr/Wstringop-overflow commit 
> 3f5592502b2ba71cb4088daeae109915f431b6a9
> Base revision: gcc/gcc ref trunk commit 
> aaa0f6b1e87bc62ea15da6eab431af6dcebf6414 r17-3738-gaaa0f6b1e87bc6
> Merge base: aaa0f6b1e87bc62ea15da6eab431af6dcebf6414
> Requested Reviewers:
>
> Changed files:
> - M: gcc/doc/sourcebuild.texi
> - M: gcc/testsuite/c-c++-common/Wstringop-overflow-2.c
> - M: gcc/testsuite/g++.dg/warn/Wstringop-overflow-3.C
> - M: gcc/testsuite/lib/target-supports.exp
>
>  gcc/doc/sourcebuild.texi                      |  8 +++
>  .../c-c++-common/Wstringop-overflow-2.c       | 50 +++++++++----------
>  .../g++.dg/warn/Wstringop-overflow-3.C        | 44 ++++++++--------
>  gcc/testsuite/lib/target-supports.exp         | 30 +++++++++--
>  4 files changed, 81 insertions(+), 51 deletions(-)
>
> diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
> index aad51550eba40..5215d5a9529d5 100644
> --- a/gcc/doc/sourcebuild.texi
> +++ b/gcc/doc/sourcebuild.texi
> @@ -1946,6 +1946,14 @@ Target supports loop vectorization with partial 
> vectors and
>  Target supports vectorization of 2-byte char stores with 2-byte aligned
>  address at plain @option{-O2}.
>
> +@item vect_slp_v2qi_store_unalign
> +Target supports vectorization of 2-byte char stores with an unaligned
> +address at plain @option{-O2}.
> +
> +@item vect_slp_v2qi_store_misalign
> +Target supports vectorization of 2-byte char stores at a known one-byte
> +misaligned address at plain @option{-O2}.
> +
>  @item vect_slp_v4qi_store_align
>  Target supports vectorization of 4-byte char stores with 4-byte aligned
>  address at plain @option{-O2}.
> diff --git a/gcc/testsuite/c-c++-common/Wstringop-overflow-2.c 
> b/gcc/testsuite/c-c++-common/Wstringop-overflow-2.c
> index 3f9171947c252..4b0e443f28852 100644
> --- a/gcc/testsuite/c-c++-common/Wstringop-overflow-2.c
> +++ b/gcc/testsuite/c-c++-common/Wstringop-overflow-2.c
> @@ -19,7 +19,7 @@ struct Ax ax_;
>  void gax_ (void)
>  {
>    ax_.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" }
> -  ax_.a[1] = 1;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  ax_.a[1] = 1;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    ax_.a[2] = 2;                 // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -30,7 +30,7 @@ struct Ax ax0 = { 0 };
>  void gax0 (void)
>  {
>    ax0.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" }
> -  ax0.a[1] = 1;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  ax0.a[1] = 1;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    ax0.a[2] = 2;                 // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -41,7 +41,7 @@ struct Ax ax0_ = { 0, { } };
>  void gax0_ (void)
>  {
>    ax0_.a[0] = 0;                // { dg-warning "\\\[-Wstringop-overflow" }
> -  ax0_.a[1] = 1;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  ax0_.a[1] = 1;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    ax0_.a[2] = 2;                // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -51,8 +51,8 @@ struct Ax ax1 = { 1, { 0 } };
>
>  void gax1 (void)
>  {
> -  ax1.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_unalign } } }
> -  ax1.a[1] = 1;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  ax1.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_misalign } } }
> +  ax1.a[1] = 1;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    ax1.a[2] = 2;                 // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -100,7 +100,7 @@ struct A0 a0_;
>  void ga0_ (void)
>  {
>    a0_.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" }
> -  a0_.a[1] = 1;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a0_.a[1] = 1;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a0_.a[2] = 2;                 // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -111,7 +111,7 @@ struct A0 a00 = { 0 };
>  void ga00 (void)
>  {
>    a00.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" }
> -  a00.a[1] = 1;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a00.a[1] = 1;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a00.a[2] = 2;                 // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -122,7 +122,7 @@ struct A0 a00_ = { 0, { } };
>  void ga00_ (void)
>  {
>    a00_.a[0] = 0;                // { dg-warning "\\\[-Wstringop-overflow" }
> -  a00_.a[1] = 1;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a00_.a[1] = 1;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a00_.a[2] = 2;                // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -166,13 +166,13 @@ struct A1 a1_;
>
>  void ga1_ (void)
>  {
> -  a1_.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_unalign } } }
> -  a1_.a[1] = 1;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a1_.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_misalign } } }
> +  a1_.a[1] = 1;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a1_.a[2] = 2;                 // { dg-warning "\\\[-Wstringop-overflow" }
>
>    struct A1 a;
> -  a.a[0] = 0;                   // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_unalign } } }
> -  a.a[1] = 1;                   // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a.a[0] = 0;                   // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_misalign } } }
> +  a.a[1] = 1;                   // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a.a[2] = 2;                   // { dg-warning "\\\[-Wstringop-overflow" }
>    sink (&a);
>  }
> @@ -183,8 +183,8 @@ struct A1 a1__ = { 0 };
>
>  void ga1__ (void)
>  {
> -  a1__.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" 
> "" { target { vect_slp_v2qi_store_unalign } } }
> -  a1__.a[1] = 1;                 // { dg-warning "\\\[-Wstringop-overflow" 
> "" { xfail { vect_slp_v2qi_store_unalign } } }
> +  a1__.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" 
> "" { target { vect_slp_v2qi_store_misalign } } }
> +  a1__.a[1] = 1;                 // { dg-warning "\\\[-Wstringop-overflow" 
> "" { xfail { vect_slp_v2qi_store_misalign } } }
>    a1__.a[2] = 2;                 // { dg-warning "\\\[-Wstringop-overflow" }
>
>    struct A1 a = { 1 };
> @@ -200,8 +200,8 @@ struct A1 a1_0 = { 0, { } };
>
>  void ga1_0_ (void)
>  {
> -  a1_0.a[0] = 0;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_unalign } } }
> -  a1_0.a[1] = 1;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a1_0.a[0] = 0;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_misalign } } }
> +  a1_0.a[1] = 1;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a1_0.a[2] = 2;                // { dg-warning "\\\[-Wstringop-overflow" }
>
>    struct A1 a = { 1, { } };
> @@ -217,8 +217,8 @@ struct A1 a1_1 = { 0, { 1 } };
>
>  void ga1_1 (void)
>  {
> -  a1_1.a[0] = 0;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_unalign } } }
> -  a1_1.a[1] = 1;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a1_1.a[0] = 0;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_misalign } } }
> +  a1_1.a[1] = 1;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a1_1.a[2] = 2;                // { dg-warning "\\\[-Wstringop-overflow" }
>
>    struct A1 a = { 0, { 1 } };   // { dg-warning "\\\[-Wstringop-overflow" 
> "pr102706" { target { vect_slp_v4qi_store_align } } }
> @@ -266,12 +266,12 @@ struct A1i a1i_;
>  void ga1i_ (void)
>  {
>    a1i_.a[0] = 0;
> -  a1i_.a[1] = 1;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a1i_.a[1] = 1;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a1i_.a[2] = 2;                // { dg-warning "\\\[-Wstringop-overflow" }
>
>    struct A1i a;
>    a.a[0] = 1;
> -  a.a[1] = 2;                   // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a.a[1] = 2;                   // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a.a[2] = 3;                   // { dg-warning "\\\[-Wstringop-overflow" }
>    sink (&a);
>  }
> @@ -283,7 +283,7 @@ struct A1i a1i__ = { 0 };
>  void ga1i__ (void)
>  {
>    a1i__.a[0] = 0;
> -  a1i__.a[1] = 1;                // { dg-warning "\\\[-Wstringop-overflow" 
> "" { xfail { vect_slp_v2qi_store_unalign } } }
> +  a1i__.a[1] = 1;                // { dg-warning "\\\[-Wstringop-overflow" 
> "" { xfail { vect_slp_v2qi_store_misalign } } }
>    a1i__.a[2] = 2;                // { dg-warning "\\\[-Wstringop-overflow" }
>
>    struct A1i a = { 0 };
> @@ -299,8 +299,8 @@ struct A1 a1i_0 = { 0, { } };
>
>  void ga1i_0_ (void)
>  {
> -  a1i_0.a[0] = 0;               // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_unalign } } }
> -  a1i_0.a[1] = 1;               // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a1i_0.a[0] = 0;               // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_misalign } } }
> +  a1i_0.a[1] = 1;               // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a1i_0.a[2] = 2;               // { dg-warning "\\\[-Wstringop-overflow" }
>
>    struct A1 a = { 0, { } };
> @@ -316,8 +316,8 @@ struct A1 a1i_1 = { 0, { 1 } };
>
>  void ga1i_1 (void)
>  {
> -  a1i_1.a[0] = 0;               // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_unalign } } }
> -  a1i_1.a[1] = 1;               // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a1i_1.a[0] = 0;               // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_misalign } } }
> +  a1i_1.a[1] = 1;               // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a1i_1.a[2] = 2;               // { dg-warning "\\\[-Wstringop-overflow" }
>
>    struct A1 a = { 0, { 1 } };   // { dg-warning "\\\[-Wstringop-overflow" 
> "pr102462" { target { vect_slp_v4qi_store_align } } }
> diff --git a/gcc/testsuite/g++.dg/warn/Wstringop-overflow-3.C 
> b/gcc/testsuite/g++.dg/warn/Wstringop-overflow-3.C
> index e1d547fe4d40c..0e8523b8ed182 100644
> --- a/gcc/testsuite/g++.dg/warn/Wstringop-overflow-3.C
> +++ b/gcc/testsuite/g++.dg/warn/Wstringop-overflow-3.C
> @@ -21,7 +21,7 @@ Ax ax_;
>  NOIPA void gax_ ()
>  {
>    ax_.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" }
> -  ax_.a[1] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  ax_.a[1] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    ax_.a[2] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -32,7 +32,7 @@ Ax ax0 = { 0 };
>  NOIPA void gax0 ()
>  {
>    ax0.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" }
> -  ax0.a[1] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  ax0.a[1] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    ax0.a[2] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -43,7 +43,7 @@ Ax ax0_ = { 0, { } };
>  NOIPA void gax0_ ()
>  {
>    ax0_.a[0] = 0;                // { dg-warning "\\\[-Wstringop-overflow" }
> -  ax0_.a[1] = 0;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  ax0_.a[1] = 0;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    ax0_.a[2] = 0;                // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -53,8 +53,8 @@ Ax ax1 = { 1, { 0 } };
>
>  NOIPA void gax1 ()
>  {
> -  ax1.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_unalign } } }
> -  ax1.a[1] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  ax1.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_misalign } } }
> +  ax1.a[1] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    ax1.a[2] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -102,7 +102,7 @@ A0 a0_;
>  NOIPA void ga0_ ()
>  {
>    a0_.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" }
> -  a0_.a[1] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a0_.a[1] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a0_.a[2] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -113,7 +113,7 @@ A0 a00 = { 0 };
>  NOIPA void ga00 ()
>  {
>    a00.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" }
> -  a00.a[1] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a00.a[1] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a00.a[2] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -124,7 +124,7 @@ A0 a00_ = { 0, { } };
>  NOIPA void ga00_ ()
>  {
>    a00_.a[0] = 0;                // { dg-warning "\\\[-Wstringop-overflow" }
> -  a00_.a[1] = 0;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a00_.a[1] = 0;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a00_.a[2] = 0;                // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -168,8 +168,8 @@ A1 a1_;
>
>  NOIPA void ga1_ ()
>  {
> -  a1_.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_unalign } } }
> -  a1_.a[1] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a1_.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_misalign } } }
> +  a1_.a[1] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a1_.a[2] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -179,8 +179,8 @@ A1 a1__ = { 0 };
>
>  NOIPA void ga1__ ()
>  {
> -  a1__.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" 
> "" { target { vect_slp_v2qi_store_unalign } } }
> -  a1__.a[1] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" 
> "" { xfail { vect_slp_v2qi_store_unalign } } }
> +  a1__.a[0] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" 
> "" { target { vect_slp_v2qi_store_misalign } } }
> +  a1__.a[1] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" 
> "" { xfail { vect_slp_v2qi_store_misalign } } }
>    a1__.a[2] = 0;                 // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -190,8 +190,8 @@ A1 a1_0 = { 0, { } };
>
>  NOIPA void ga1_0_ ()
>  {
> -  a1_0.a[0] = 0;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_unalign } } }
> -  a1_0.a[1] = 0;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a1_0.a[0] = 0;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_misalign } } }
> +  a1_0.a[1] = 0;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a1_0.a[2] = 0;                // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -201,8 +201,8 @@ A1 a1_1 = { 0, { 1 } };
>
>  NOIPA void ga1_1 ()
>  {
> -  a1_1.a[0] = 0;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_unalign } } }
> -  a1_1.a[1] = 0;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a1_1.a[0] = 0;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_misalign } } }
> +  a1_1.a[1] = 0;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a1_1.a[2] = 0;                // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -244,7 +244,7 @@ A1i a1i_;
>  NOIPA void ga1i_ ()
>  {
>    a1i_.a[0] = 0;
> -  a1i_.a[1] = 0;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a1i_.a[1] = 0;                // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a1i_.a[2] = 0;                // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -255,7 +255,7 @@ A1i a1i__ = { 0 };
>  NOIPA void ga1i__ ()
>  {
>    a1i__.a[0] = 0;
> -  a1i__.a[1] = 0;                // { dg-warning "\\\[-Wstringop-overflow" 
> "" { xfail { vect_slp_v2qi_store_unalign } } }
> +  a1i__.a[1] = 0;                // { dg-warning "\\\[-Wstringop-overflow" 
> "" { xfail { vect_slp_v2qi_store_misalign } } }
>    a1i__.a[2] = 0;                // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -265,8 +265,8 @@ A1 a1i_0 = { 0, { } };
>
>  NOIPA void ga1i_0_ ()
>  {
> -  a1i_0.a[0] = 0;               // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_unalign } } }
> -  a1i_0.a[1] = 0;               // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a1i_0.a[0] = 0;               // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_misalign } } }
> +  a1i_0.a[1] = 0;               // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a1i_0.a[2] = 0;               // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> @@ -276,8 +276,8 @@ A1 a1i_1 = { 0, { 1 } };
>
>  NOIPA void ga1i_1 ()
>  {
> -  a1i_1.a[0] = 0;               // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_unalign } } }
> -  a1i_1.a[1] = 0;               // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_unalign } } }
> +  a1i_1.a[0] = 0;               // { dg-warning "\\\[-Wstringop-overflow" "" 
> { target { vect_slp_v2qi_store_misalign } } }
> +  a1i_1.a[1] = 0;               // { dg-warning "\\\[-Wstringop-overflow" "" 
> { xfail { vect_slp_v2qi_store_misalign } } }
>    a1i_1.a[2] = 0;               // { dg-warning "\\\[-Wstringop-overflow" }
>  }
>
> diff --git a/gcc/testsuite/lib/target-supports.exp 
> b/gcc/testsuite/lib/target-supports.exp
> index d467e9fa3b7fd..e752532298901 100644
> --- a/gcc/testsuite/lib/target-supports.exp
> +++ b/gcc/testsuite/lib/target-supports.exp
> @@ -9696,7 +9696,7 @@ proc check_vect_slp_store_usage { pattern macro } {
>         {
>             *(AC4*)a = Ac4;
>         }
> -       #elif TEST_V2QI
> +       #elif TEST_V2QI_ALIGN
>         struct A2
>         {
>             char a[2];
> @@ -9709,7 +9709,7 @@ proc check_vect_slp_store_usage { pattern macro } {
>             a.a[1] = 4;
>             sink (&a);
>         }
> -       #elif TEST_V2QI_2
> +       #elif TEST_V2QI_UNALIGN
>         extern char p[2];
>         void
>         foo3_2 ()
> @@ -9717,6 +9717,19 @@ proc check_vect_slp_store_usage { pattern macro } {
>             p[0] = 0;
>             p[1] = 1;
>         }
> +       #elif TEST_V2QI_MISALIGN
> +       struct A2
> +       {
> +           char n;
> +           char a[2];
> +       };
> +       struct A2 p __attribute__ ((aligned (2)));
> +       void
> +       foo3_misalign ()
> +       {
> +           p.a[0] = 0;
> +           p.a[1] = 1;
> +       }
>         #elif TEST_V4HI
>         struct Ax
>         {
> @@ -9812,7 +9825,7 @@ proc check_vect_slp_store_usage { pattern macro } {
>  # is the exact match of relative testcases
>  proc check_effective_target_vect_slp_v2qi_store_align { } {
>      set pattern {add new stmt: MEM <vector\(2\) char>}
> -    set macro "TEST_V2QI"
> +    set macro "TEST_V2QI_ALIGN"
>      return [check_cached_effective_target vect_slp_v2qi_store_align {
>         expr [check_vect_slp_store_usage $pattern $macro] }]
>  }
> @@ -9821,11 +9834,20 @@ proc check_effective_target_vect_slp_v2qi_store_align 
> { } {
>  # with unaligned address at plain O2.
>  proc check_effective_target_vect_slp_v2qi_store_unalign { } {
>      set pattern {add new stmt: MEM <vector\(2\) char>}
> -    set macro "TEST_V2QI_2"
> +    set macro "TEST_V2QI_UNALIGN"
>      return [check_cached_effective_target vect_slp_v2qi_store_unalign {
>         expr [check_vect_slp_store_usage $pattern $macro ] }]
>  }
>
> +# Return the true if target support vectorization of 2-byte char stores
> +# with a known one-byte misaligned address at plain O2.
> +proc check_effective_target_vect_slp_v2qi_store_misalign { } {
> +    set pattern {add new stmt: MEM <vector\(2\) char>}
> +    set macro "TEST_V2QI_MISALIGN"
> +    return [check_cached_effective_target vect_slp_v2qi_store_misalign {
> +       expr [check_vect_slp_store_usage $pattern $macro ] }]
> +}
> +
>  # Return the true if target support vectorization of 4-byte char stores
>  # with 4-byte aligned address at plain O2.
>  # NB: This target should be removed after real issues are fixed for
>
> Range-diff against v1:
> 1:  1a3f4342b3ffa ! 1:  3f5592502b2ba testsuite: Split out known-misaligned 
> V2QI store target [PR124342] [PR124619]
>     @@ Commit message
>          gcc/testsuite/ChangeLog:
>
>                  * lib/target-supports.exp (check_vect_slp_store_usage): Add
>     -            TEST_V2QI_MISALIGN.
>     +            TEST_V2QI_MISALIGN.  Renamed TEST_V2QI to TEST_V2QI_ALIGN and
>     +            TEST_V2QI_2 to TEST_V2QI_UNALIGN.
>                  (check_effective_target_vect_slp_v2qi_store_misalign): New 
> proc.
>     -            * c-c++-common/Wstringop-overflow-2.c: Use it.
>     +            (check_effective_target_vect_slp_v2qi_store_align): Define
>     +            TEST_V2QI_ALIGN.
>     +            (check_effective_target_vect_slp_v2qi_store_unalign): Define
>     +            TEST_V2QI_UNALIGN.
>     +            * c-c++-common/Wstringop-overflow-2.c: Use
>     +            check_effective_target_vect_slp_v2qi_store_misalign.
>                  * g++.dg/warn/Wstringop-overflow-3.C: Likewise.
>
>          Signed-off-by: Torbjörn SVENSSON <[email protected]>
>     @@ gcc/testsuite/g++.dg/warn/Wstringop-overflow-3.C: A1 a1i_1 = { 0, { 1 
> } };
>
>
>       ## gcc/testsuite/lib/target-supports.exp ##
>     +@@ gcc/testsuite/lib/target-supports.exp: proc 
> check_vect_slp_store_usage { pattern macro } {
>     +   {
>     +       *(AC4*)a = Ac4;
>     +   }
>     +-  #elif TEST_V2QI
>     ++  #elif TEST_V2QI_ALIGN
>     +   struct A2
>     +   {
>     +       char a[2];
>     +@@ gcc/testsuite/lib/target-supports.exp: proc 
> check_vect_slp_store_usage { pattern macro } {
>     +       a.a[1] = 4;
>     +       sink (&a);
>     +   }
>     +-  #elif TEST_V2QI_2
>     ++  #elif TEST_V2QI_UNALIGN
>     +   extern char p[2];
>     +   void
>     +   foo3_2 ()
>      @@ gcc/testsuite/lib/target-supports.exp: proc 
> check_vect_slp_store_usage { pattern macro } {
>             p[0] = 0;
>             p[1] = 1;
>     @@ gcc/testsuite/lib/target-supports.exp: proc check_vect_slp_store_usage 
> { pattern
>         #elif TEST_V4HI
>         struct Ax
>         {
>     -@@ gcc/testsuite/lib/target-supports.exp: proc 
> check_effective_target_vect_slp_v2qi_store_unalign { } {
>     +@@ gcc/testsuite/lib/target-supports.exp: proc 
> check_vect_slp_store_usage { pattern macro } {
>     + # is the exact match of relative testcases
>     + proc check_effective_target_vect_slp_v2qi_store_align { } {
>     +     set pattern {add new stmt: MEM <vector\(2\) char>}
>     +-    set macro "TEST_V2QI"
>     ++    set macro "TEST_V2QI_ALIGN"
>     +     return [check_cached_effective_target vect_slp_v2qi_store_align {
>     +   expr [check_vect_slp_store_usage $pattern $macro] }]
>     + }
>     +@@ gcc/testsuite/lib/target-supports.exp: proc 
> check_effective_target_vect_slp_v2qi_store_align { } {
>     + # with unaligned address at plain O2.
>     + proc check_effective_target_vect_slp_v2qi_store_unalign { } {
>     +     set pattern {add new stmt: MEM <vector\(2\) char>}
>     +-    set macro "TEST_V2QI_2"
>     ++    set macro "TEST_V2QI_UNALIGN"
>     +     return [check_cached_effective_target vect_slp_v2qi_store_unalign {
>         expr [check_vect_slp_store_usage $pattern $macro ] }]
>       }
>
> --
> 2.54.0
>

Reply via email to