On Tue, Sep 29, 2026 at 9:52 AM Torbjorn SVENSSON <[email protected]> wrote: > > > > On 2026-09-24 15:56, Richard Biener wrote: > > On Thu, Sep 24, 2026 at 3:34 PM Torbjorn SVENSSON > > <[email protected]> wrote: > >> > >> > >> > >> On 2026-09-24 15:25, Richard Biener wrote: > >>> On Thu, Sep 24, 2026 at 2:24 PM Torbjorn SVENSSON > >>> <[email protected]> wrote: > >>>> > >>>> > >>>> > >>>> On 2026-09-23 15:40, Richard Biener wrote: > >>>>> 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])? > >>>> > >>>> Unless I've completly missunderstood the sequence, it should stem from > >>>> https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/config/arm/arm.cc;hb=refs/heads/trunk#l30984 > >>>> > >>>> After another bisect, I identified that the first failing commit is > >>>> r16-4314-g5e9eecc6686 (for r16-4315 and later, r16-4355-g53085a46e7f162 > >>>> is also needed to build). > >>>> > >>>> I think the reason for the regression is that the value of "align" is > >>>> not the same for TYPE_ALIGN_UNIT(type) and GET_MODE_UNIT_SIZE(mode). > >>>> > >>>> In the v2qi tests, mode would match HImode, thus: > >>>> > >>>> - GET_MODE_UNIT_SIZE(HImode) would return 2. > >>>> - TYPE_ALIGN_UNIT(type) would return 1 for char. > >>>> > >>>> So, maybe my patch is not correct and instead the function should > >>>> simply be like this since NEON apparently accepts unknown alignment: > >>>> > >>>> static bool > >>>> arm_builtin_support_vector_misalignment (machine_mode mode, > >>>> int misalignment, > >>>> bool is_packed, > >>>> bool is_gather_scatter) > >>>> { > >>>> if (TARGET_NEON && !BYTES_BIG_ENDIAN && unaligned_access) > >>>> { > >>>> HOST_WIDE_INT align = GET_MODE_UNIT_SIZE (mode); > >>>> > >>>> if (is_gather_scatter) > >>>> return true; > >>>> > >>>> if (is_packed) > >>>> return align == 1; > >>>> > >>>> /* NEON supports access regardless of the alignment. */ > >>>> return true; > >>>> } > >>>> > >>>> return default_builtin_support_vector_misalignment (mode, > >>>> misalignment, > >>>> is_packed, > >>>> > >>>> is_gather_scatter); > >>>> } > >>>> > >>>> > >>>> WDYT? > >>> > >>> Yeah, the current code is > >>> > >>> /* If the misalignment is unknown, we should be able to handle > >>> the access > >>> so long as it is not to a member of a packed data structure. > >>> */ > >>> if (misalignment == -1) > >>> return true; > >>> > >>> /* Return true if the misalignment is a multiple of the natural > >>> alignment > >>> of the vector's element type. This is probably always going > >>> to be > >>> true in practice, since we've already established that this > >>> isn't a > >>> packed access. */ > >>> return ((misalignment % align) == 0); > >>> > >>> which says it accepts any misalignment (misalignment == -1) but not > >>> a known misalignment, of say 3. That's just odd. > >>> > >>>> Also, the check "align == 1" in the is_packed branch is probably not > >>>> doing the right thing since the value in "align" is the size(?) and not > >>>> the alignment. > >>> > >>> yeah, a vector mode of size 1 probably does not exist. Iff we > >>> accept misalignment == -1 there's no reason to reject "is_packed". > >>> is_packed just means we cannot reach alignment by peeling. > >>> There's no good reason to check is_packed. > >> > >> So, based on this, maybe the function body could be reduced to: > >> > >> { > >> if (TARGET_NEON && !BYTES_BIG_ENDIAN && unaligned_access) > >> return true; > >> > >> return default_builtin_support_vector_misalignment (mode, misalignment, > >> is_packed, > >> > >> is_gather_scatter); > >> } > >> > >> I can do this change and do a regression test run on it to see if it causes > >> any regressions if you think this is better. > > > > Looks reasonable. Note the aarch64 variant does > > > > if (TARGET_SIMD && STRICT_ALIGNMENT) > > { > > if (is_gather_scatter) > > return true; > > > > /* Return if movmisalign pattern is not supported for this mode. */ > > if (optab_handler (movmisalign_optab, mode) == CODE_FOR_nothing) > > return false; > > > > /* Misalignment factor is unknown at compile time. */ > > if (misalignment == -1) > > return false; > > } > > return default_builtin_support_vector_misalignment (mode, misalignment, > > is_packed, > > is_gather_scatter); > > > > so basically defaults for !STRICT_ALIGNMENT. I suppose the equivalent > > is unaligned_access > > on the arm side. Compared to your variant with 'return true' it falls > > through to the > > default (which tests for movmisalign support of the mode). So if arm > > can do that for all > > vector modes a return true sounds good, if not, fallthru to the > > default hook looks safer. > > I tried to use the aarch64 approach, but replaced TARGET_SIMD with > TARGET_NEON. > This works for the test in question, but it causes other regressions for the > vect-early-break. > Then I tried to simply return true for any TARGET_NEON, same result. > > After having tried all these ways, I got lazy and simply asked AI if it was > possible to solve this without having the "type" parameter and the conclusion > it gave me was: > > There is no generic way for this hook to exactly reproduce > `TYPE_ALIGN_UNIT(type)` from only `mode`, `misalignment`, and the flags: two > accesses can have the same hook arguments but different element-type > alignment. > The broad NEON `return true` passes `Wstringop-overflow-2.c` but adds four > `vect-early-break` failures. The mode-unit rule with an HImode adjustment > still > adds those failures; the full comparison is also affected by different non-GCC > components in the prebuilt baseline versus this build. > > > I think it's safe to say that this might be an unsolvable problem.
But what matters for the target is the mode, not the type. So IMO the AI is misleading here or the vectorizer asks for a non-natural aligned vector type which it should not. > Should we consider to revert the "type" parameter removal in > r16-4314-g5e9eecc6686 > and r16-4355-g53085a46e7f162? No. > Kind regards, > Torbjörn > > > >> > >>> > >>> The arm hook should probably be a copy of the aarch64 one unless > >>> MVE has different constraints > >> > >> I have no idea if there is a difference for MWE and/or aarch64 regarding > >> this > >> hook. Earnshaw might have insight on this...? > >> > >> > >> Kind regards, > >> Torbjörn > >> > >>>>> > >>>>>> > >>>>>> 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 > >>>>>> > >>>> > >> >
