Re: [PATCH] Adjust testcase for O2 vectorization.
On Thu, Oct 21, 2021 at 10:06 AM Hongtao Liu wrote: > > On Thu, Oct 21, 2021 at 9:20 AM Hongtao Liu wrote: > > > > On Wed, Oct 20, 2021 at 7:34 PM Christophe Lyon via Gcc-patches > > wrote: > > > > > > Hi, > > > > > > > > > On Tue, Oct 19, 2021 at 11:03 AM liuhongt via Gcc-patches < > > > gcc-patches@gcc.gnu.org> wrote: > > > > > > > updated patch: > > > > 1. Add documents in doc/sourcebuild.texi (Effective-Target Keywords). > > > > 2. Reduce -novec.c testcases to contain only new failed parted which > > > > is caused by O2 vectorization. > > > > 3. Add PR in dg-warning comment. > > > > > > > > As discussed in [1], this patch add xfail/target selector to those > > > > testcases, also make a copy of them so that they can be tested w/o > > > > vectorization. > > > > > > > > Newly added xfail/target selectors are used to check the vectorization > > > > capability of continuous byte/double bytes storage, these scenarios > > > > are exactly the part of the testcases that regressed after O2 > > > > vectorization. > > > > > > > > [1] https://gcc.gnu.org/pipermail/gcc-patches/2021-October/581456.html. > > > > > > > > gcc/ChangeLog > > > > > > > > * doc/sourcebuild.texi (Effective-Target Keywords): Document > > > > vect_slp_v2qi_store, vect_slp_v4qi_store, vect_slp_v8qi_store, > > > > vect_slp_v16qi_store, vect_slp_v2hi_store, > > > > vect_slp_v4hi_store, vect_slp_v2si_store, vect_slp_v4si_store. > > > > > > > > gcc/testsuite/ChangeLog > > > > > > > > PR middle-end/102722 > > > > PR middle-end/102697 > > > > PR middle-end/102462 > > > > PR middle-end/102706 > > > > PR middle-end/102744 > > > > * c-c++-common/Wstringop-overflow-2.c: Adjust testcase with new > > > > xfail/target selector. > > > > * gcc.dg/Warray-bounds-51.c: Ditto. > > > > * gcc.dg/Warray-parameter-3.c: Ditto. > > > > * gcc.dg/Wstringop-overflow-14.c: Ditto. > > > > * gcc.dg/Wstringop-overflow-21.c: Ditto. > > > > * gcc.dg/Wstringop-overflow-68.c: Ditto. > > > > * gcc.dg/Wstringop-overflow-76.c: Ditto. > > > > * gcc.dg/Warray-bounds-48.c: Ditto. > > > > * gcc.dg/Wzero-length-array-bounds-2.c: Ditto. > > > > > > > > > > Some of these adjustments cause regressions on arm / aarch64, the exact > > > list depends on the target/flags. > > > See > > > https://people.linaro.org/~christophe.lyon/cross-validation/gcc/trunk/r12-4525-gf36240f8c835d792f788b6724e272fc0a4a4f26f/report-build-info.html > > > for more on details on several combinations. > > > > > > Can you have a look? > > Yes. > Testcase in target-support doesn't match real testcase, .i.e. for v4qi > vectorization, it's > char a[4]; > void foo () > { > a[0] = 0; > a[1] = 1; > a[2] = 2; > a[3] = 3; > } > > vs > > typedef struct AC2 { char a[2]; } AC2; > typedef struct AC4 { char a[4]; } AC4; > #define Ac4 (AC4){ 0, 1, 2, 3 } > extern char a2[2]; > extern char a4[4]; > void > foo () > { > *(AC4*)a2 = Ac4; > } > > The former can be vectorized by aarch64-linux-gcc, but the latter > can't be which cause ned FAIL, similar for other XPASS cases. > > Guess we need exact match for testcase in target-supports.exp. If that, those efficient target would be too special to be used by others, maybe just as a temporary solution, and should be removed after Martin fixed those regression. > > > > > > Christophe > > > > > > * lib/target-supports.exp (check_vect_slp_aligned_store_usage): > > > > New function. > > > > (check_effective_target_vect_slp_v2qi_store): Ditto. > > > > (check_effective_target_vect_slp_v4qi_store): Ditto. > > > > (check_effective_target_vect_slp_v8qi_store): Ditto. > > > > (check_effective_target_vect_slp_v16qi_store): Ditto. > > > > (check_effective_target_vect_slp_v2hi_store): Ditto. > > > > (check_effective_target_vect_slp_v4hi_store): Ditto. > > > > (check_effective_target_vect_slp_v2si_store): Ditto. > > > > (check_effective_target_vect_slp_v4si_store): Ditto. > > > > * c-c++-common/Wstringop-overflow-2-novec.c: New test. > > > > * gcc.dg/Warray-bounds-51-novec.c: New test. > > > > * gcc.dg/Warray-bounds-48-novec.c: New test. > > > > * gcc.dg/Warray-parameter-3-novec.c: New test. > > > > * gcc.dg/Wstringop-overflow-14-novec.c: New test. > > > > * gcc.dg/Wstringop-overflow-21-novec.c: New test. > > > > * gcc.dg/Wstringop-overflow-76-novec.c: New test. > > > > * gcc.dg/Wzero-length-array-bounds-2-novec.c: New test. > > > > --- > > > > gcc/doc/sourcebuild.texi | 32 ++ > > > > .../c-c++-common/Wstringop-overflow-2-novec.c | 126 ++ > > > > .../c-c++-common/Wstringop-overflow-2.c | 20 +- > > > > gcc/testsuite/gcc.dg/Warray-bounds-48-novec.c | 364 ++ > > > > gcc/testsuite/gcc.dg/Warray-bounds-48.c | 4 +- > > > > gcc/testsuite/g
Re: [PATCH] Adjust testcase for O2 vectorization.
On Thu, Oct 21, 2021 at 9:20 AM Hongtao Liu wrote: > > On Wed, Oct 20, 2021 at 7:34 PM Christophe Lyon via Gcc-patches > wrote: > > > > Hi, > > > > > > On Tue, Oct 19, 2021 at 11:03 AM liuhongt via Gcc-patches < > > gcc-patches@gcc.gnu.org> wrote: > > > > > updated patch: > > > 1. Add documents in doc/sourcebuild.texi (Effective-Target Keywords). > > > 2. Reduce -novec.c testcases to contain only new failed parted which > > > is caused by O2 vectorization. > > > 3. Add PR in dg-warning comment. > > > > > > As discussed in [1], this patch add xfail/target selector to those > > > testcases, also make a copy of them so that they can be tested w/o > > > vectorization. > > > > > > Newly added xfail/target selectors are used to check the vectorization > > > capability of continuous byte/double bytes storage, these scenarios > > > are exactly the part of the testcases that regressed after O2 > > > vectorization. > > > > > > [1] https://gcc.gnu.org/pipermail/gcc-patches/2021-October/581456.html. > > > > > > gcc/ChangeLog > > > > > > * doc/sourcebuild.texi (Effective-Target Keywords): Document > > > vect_slp_v2qi_store, vect_slp_v4qi_store, vect_slp_v8qi_store, > > > vect_slp_v16qi_store, vect_slp_v2hi_store, > > > vect_slp_v4hi_store, vect_slp_v2si_store, vect_slp_v4si_store. > > > > > > gcc/testsuite/ChangeLog > > > > > > PR middle-end/102722 > > > PR middle-end/102697 > > > PR middle-end/102462 > > > PR middle-end/102706 > > > PR middle-end/102744 > > > * c-c++-common/Wstringop-overflow-2.c: Adjust testcase with new > > > xfail/target selector. > > > * gcc.dg/Warray-bounds-51.c: Ditto. > > > * gcc.dg/Warray-parameter-3.c: Ditto. > > > * gcc.dg/Wstringop-overflow-14.c: Ditto. > > > * gcc.dg/Wstringop-overflow-21.c: Ditto. > > > * gcc.dg/Wstringop-overflow-68.c: Ditto. > > > * gcc.dg/Wstringop-overflow-76.c: Ditto. > > > * gcc.dg/Warray-bounds-48.c: Ditto. > > > * gcc.dg/Wzero-length-array-bounds-2.c: Ditto. > > > > > > > Some of these adjustments cause regressions on arm / aarch64, the exact > > list depends on the target/flags. > > See > > https://people.linaro.org/~christophe.lyon/cross-validation/gcc/trunk/r12-4525-gf36240f8c835d792f788b6724e272fc0a4a4f26f/report-build-info.html > > for more on details on several combinations. > > > > Can you have a look? > Yes. Testcase in target-support doesn't match real testcase, .i.e. for v4qi vectorization, it's char a[4]; void foo () { a[0] = 0; a[1] = 1; a[2] = 2; a[3] = 3; } vs typedef struct AC2 { char a[2]; } AC2; typedef struct AC4 { char a[4]; } AC4; #define Ac4 (AC4){ 0, 1, 2, 3 } extern char a2[2]; extern char a4[4]; void foo () { *(AC4*)a2 = Ac4; } The former can be vectorized by aarch64-linux-gcc, but the latter can't be which cause ned FAIL, similar for other XPASS cases. Guess we need exact match for testcase in target-supports.exp. > > > > Christophe > > > > * lib/target-supports.exp (check_vect_slp_aligned_store_usage): > > > New function. > > > (check_effective_target_vect_slp_v2qi_store): Ditto. > > > (check_effective_target_vect_slp_v4qi_store): Ditto. > > > (check_effective_target_vect_slp_v8qi_store): Ditto. > > > (check_effective_target_vect_slp_v16qi_store): Ditto. > > > (check_effective_target_vect_slp_v2hi_store): Ditto. > > > (check_effective_target_vect_slp_v4hi_store): Ditto. > > > (check_effective_target_vect_slp_v2si_store): Ditto. > > > (check_effective_target_vect_slp_v4si_store): Ditto. > > > * c-c++-common/Wstringop-overflow-2-novec.c: New test. > > > * gcc.dg/Warray-bounds-51-novec.c: New test. > > > * gcc.dg/Warray-bounds-48-novec.c: New test. > > > * gcc.dg/Warray-parameter-3-novec.c: New test. > > > * gcc.dg/Wstringop-overflow-14-novec.c: New test. > > > * gcc.dg/Wstringop-overflow-21-novec.c: New test. > > > * gcc.dg/Wstringop-overflow-76-novec.c: New test. > > > * gcc.dg/Wzero-length-array-bounds-2-novec.c: New test. > > > --- > > > gcc/doc/sourcebuild.texi | 32 ++ > > > .../c-c++-common/Wstringop-overflow-2-novec.c | 126 ++ > > > .../c-c++-common/Wstringop-overflow-2.c | 20 +- > > > gcc/testsuite/gcc.dg/Warray-bounds-48-novec.c | 364 ++ > > > gcc/testsuite/gcc.dg/Warray-bounds-48.c | 4 +- > > > gcc/testsuite/gcc.dg/Warray-bounds-51-novec.c | 21 + > > > gcc/testsuite/gcc.dg/Warray-bounds-51.c | 2 +- > > > .../gcc.dg/Warray-parameter-3-novec.c | 16 + > > > gcc/testsuite/gcc.dg/Warray-parameter-3.c | 2 +- > > > .../gcc.dg/Wstringop-overflow-14-novec.c | 16 + > > > gcc/testsuite/gcc.dg/Wstringop-overflow-14.c | 4 +- > > > .../gcc.dg/Wstringop-overflow-21-novec.c | 34 ++ > > > gcc/testsuite/gcc.dg/Wstringop-overflow-2
Re: [PATCH] Adjust testcase for O2 vectorization.
On Wed, Oct 20, 2021 at 7:34 PM Christophe Lyon via Gcc-patches wrote: > > Hi, > > > On Tue, Oct 19, 2021 at 11:03 AM liuhongt via Gcc-patches < > gcc-patches@gcc.gnu.org> wrote: > > > updated patch: > > 1. Add documents in doc/sourcebuild.texi (Effective-Target Keywords). > > 2. Reduce -novec.c testcases to contain only new failed parted which > > is caused by O2 vectorization. > > 3. Add PR in dg-warning comment. > > > > As discussed in [1], this patch add xfail/target selector to those > > testcases, also make a copy of them so that they can be tested w/o > > vectorization. > > > > Newly added xfail/target selectors are used to check the vectorization > > capability of continuous byte/double bytes storage, these scenarios > > are exactly the part of the testcases that regressed after O2 > > vectorization. > > > > [1] https://gcc.gnu.org/pipermail/gcc-patches/2021-October/581456.html. > > > > gcc/ChangeLog > > > > * doc/sourcebuild.texi (Effective-Target Keywords): Document > > vect_slp_v2qi_store, vect_slp_v4qi_store, vect_slp_v8qi_store, > > vect_slp_v16qi_store, vect_slp_v2hi_store, > > vect_slp_v4hi_store, vect_slp_v2si_store, vect_slp_v4si_store. > > > > gcc/testsuite/ChangeLog > > > > PR middle-end/102722 > > PR middle-end/102697 > > PR middle-end/102462 > > PR middle-end/102706 > > PR middle-end/102744 > > * c-c++-common/Wstringop-overflow-2.c: Adjust testcase with new > > xfail/target selector. > > * gcc.dg/Warray-bounds-51.c: Ditto. > > * gcc.dg/Warray-parameter-3.c: Ditto. > > * gcc.dg/Wstringop-overflow-14.c: Ditto. > > * gcc.dg/Wstringop-overflow-21.c: Ditto. > > * gcc.dg/Wstringop-overflow-68.c: Ditto. > > * gcc.dg/Wstringop-overflow-76.c: Ditto. > > * gcc.dg/Warray-bounds-48.c: Ditto. > > * gcc.dg/Wzero-length-array-bounds-2.c: Ditto. > > > > Some of these adjustments cause regressions on arm / aarch64, the exact > list depends on the target/flags. > See > https://people.linaro.org/~christophe.lyon/cross-validation/gcc/trunk/r12-4525-gf36240f8c835d792f788b6724e272fc0a4a4f26f/report-build-info.html > for more on details on several combinations. > > Can you have a look? Yes. > > Christophe > > * lib/target-supports.exp (check_vect_slp_aligned_store_usage): > > New function. > > (check_effective_target_vect_slp_v2qi_store): Ditto. > > (check_effective_target_vect_slp_v4qi_store): Ditto. > > (check_effective_target_vect_slp_v8qi_store): Ditto. > > (check_effective_target_vect_slp_v16qi_store): Ditto. > > (check_effective_target_vect_slp_v2hi_store): Ditto. > > (check_effective_target_vect_slp_v4hi_store): Ditto. > > (check_effective_target_vect_slp_v2si_store): Ditto. > > (check_effective_target_vect_slp_v4si_store): Ditto. > > * c-c++-common/Wstringop-overflow-2-novec.c: New test. > > * gcc.dg/Warray-bounds-51-novec.c: New test. > > * gcc.dg/Warray-bounds-48-novec.c: New test. > > * gcc.dg/Warray-parameter-3-novec.c: New test. > > * gcc.dg/Wstringop-overflow-14-novec.c: New test. > > * gcc.dg/Wstringop-overflow-21-novec.c: New test. > > * gcc.dg/Wstringop-overflow-76-novec.c: New test. > > * gcc.dg/Wzero-length-array-bounds-2-novec.c: New test. > > --- > > gcc/doc/sourcebuild.texi | 32 ++ > > .../c-c++-common/Wstringop-overflow-2-novec.c | 126 ++ > > .../c-c++-common/Wstringop-overflow-2.c | 20 +- > > gcc/testsuite/gcc.dg/Warray-bounds-48-novec.c | 364 ++ > > gcc/testsuite/gcc.dg/Warray-bounds-48.c | 4 +- > > gcc/testsuite/gcc.dg/Warray-bounds-51-novec.c | 21 + > > gcc/testsuite/gcc.dg/Warray-bounds-51.c | 2 +- > > .../gcc.dg/Warray-parameter-3-novec.c | 16 + > > gcc/testsuite/gcc.dg/Warray-parameter-3.c | 2 +- > > .../gcc.dg/Wstringop-overflow-14-novec.c | 16 + > > gcc/testsuite/gcc.dg/Wstringop-overflow-14.c | 4 +- > > .../gcc.dg/Wstringop-overflow-21-novec.c | 34 ++ > > gcc/testsuite/gcc.dg/Wstringop-overflow-21.c | 8 +- > > gcc/testsuite/gcc.dg/Wstringop-overflow-68.c | 17 +- > > .../gcc.dg/Wstringop-overflow-76-novec.c | 88 + > > gcc/testsuite/gcc.dg/Wstringop-overflow-76.c | 18 +- > > .../Wzero-length-array-bounds-2-novec.c | 45 +++ > > .../gcc.dg/Wzero-length-array-bounds-2.c | 2 +- > > gcc/testsuite/lib/target-supports.exp | 182 + > > 19 files changed, 967 insertions(+), 34 deletions(-) > > create mode 100644 gcc/testsuite/c-c++-common/Wstringop-overflow-2-novec.c > > create mode 100644 gcc/testsuite/gcc.dg/Warray-bounds-48-novec.c > > create mode 100644 gcc/testsuite/gcc.dg/Warray-bounds-51-novec.c > > create mode 100644 gcc/testsuite/gcc.dg/Warray-parameter-3-novec.c > > create mode 100644 gcc/testsuite/gcc.dg/Wstringop-o
Re: [PATCH] Adjust testcase for O2 vectorization.
Hi, On Tue, Oct 19, 2021 at 11:03 AM liuhongt via Gcc-patches < gcc-patches@gcc.gnu.org> wrote: > updated patch: > 1. Add documents in doc/sourcebuild.texi (Effective-Target Keywords). > 2. Reduce -novec.c testcases to contain only new failed parted which > is caused by O2 vectorization. > 3. Add PR in dg-warning comment. > > As discussed in [1], this patch add xfail/target selector to those > testcases, also make a copy of them so that they can be tested w/o > vectorization. > > Newly added xfail/target selectors are used to check the vectorization > capability of continuous byte/double bytes storage, these scenarios > are exactly the part of the testcases that regressed after O2 > vectorization. > > [1] https://gcc.gnu.org/pipermail/gcc-patches/2021-October/581456.html. > > gcc/ChangeLog > > * doc/sourcebuild.texi (Effective-Target Keywords): Document > vect_slp_v2qi_store, vect_slp_v4qi_store, vect_slp_v8qi_store, > vect_slp_v16qi_store, vect_slp_v2hi_store, > vect_slp_v4hi_store, vect_slp_v2si_store, vect_slp_v4si_store. > > gcc/testsuite/ChangeLog > > PR middle-end/102722 > PR middle-end/102697 > PR middle-end/102462 > PR middle-end/102706 > PR middle-end/102744 > * c-c++-common/Wstringop-overflow-2.c: Adjust testcase with new > xfail/target selector. > * gcc.dg/Warray-bounds-51.c: Ditto. > * gcc.dg/Warray-parameter-3.c: Ditto. > * gcc.dg/Wstringop-overflow-14.c: Ditto. > * gcc.dg/Wstringop-overflow-21.c: Ditto. > * gcc.dg/Wstringop-overflow-68.c: Ditto. > * gcc.dg/Wstringop-overflow-76.c: Ditto. > * gcc.dg/Warray-bounds-48.c: Ditto. > * gcc.dg/Wzero-length-array-bounds-2.c: Ditto. > Some of these adjustments cause regressions on arm / aarch64, the exact list depends on the target/flags. See https://people.linaro.org/~christophe.lyon/cross-validation/gcc/trunk/r12-4525-gf36240f8c835d792f788b6724e272fc0a4a4f26f/report-build-info.html for more on details on several combinations. Can you have a look? Christophe * lib/target-supports.exp (check_vect_slp_aligned_store_usage): > New function. > (check_effective_target_vect_slp_v2qi_store): Ditto. > (check_effective_target_vect_slp_v4qi_store): Ditto. > (check_effective_target_vect_slp_v8qi_store): Ditto. > (check_effective_target_vect_slp_v16qi_store): Ditto. > (check_effective_target_vect_slp_v2hi_store): Ditto. > (check_effective_target_vect_slp_v4hi_store): Ditto. > (check_effective_target_vect_slp_v2si_store): Ditto. > (check_effective_target_vect_slp_v4si_store): Ditto. > * c-c++-common/Wstringop-overflow-2-novec.c: New test. > * gcc.dg/Warray-bounds-51-novec.c: New test. > * gcc.dg/Warray-bounds-48-novec.c: New test. > * gcc.dg/Warray-parameter-3-novec.c: New test. > * gcc.dg/Wstringop-overflow-14-novec.c: New test. > * gcc.dg/Wstringop-overflow-21-novec.c: New test. > * gcc.dg/Wstringop-overflow-76-novec.c: New test. > * gcc.dg/Wzero-length-array-bounds-2-novec.c: New test. > --- > gcc/doc/sourcebuild.texi | 32 ++ > .../c-c++-common/Wstringop-overflow-2-novec.c | 126 ++ > .../c-c++-common/Wstringop-overflow-2.c | 20 +- > gcc/testsuite/gcc.dg/Warray-bounds-48-novec.c | 364 ++ > gcc/testsuite/gcc.dg/Warray-bounds-48.c | 4 +- > gcc/testsuite/gcc.dg/Warray-bounds-51-novec.c | 21 + > gcc/testsuite/gcc.dg/Warray-bounds-51.c | 2 +- > .../gcc.dg/Warray-parameter-3-novec.c | 16 + > gcc/testsuite/gcc.dg/Warray-parameter-3.c | 2 +- > .../gcc.dg/Wstringop-overflow-14-novec.c | 16 + > gcc/testsuite/gcc.dg/Wstringop-overflow-14.c | 4 +- > .../gcc.dg/Wstringop-overflow-21-novec.c | 34 ++ > gcc/testsuite/gcc.dg/Wstringop-overflow-21.c | 8 +- > gcc/testsuite/gcc.dg/Wstringop-overflow-68.c | 17 +- > .../gcc.dg/Wstringop-overflow-76-novec.c | 88 + > gcc/testsuite/gcc.dg/Wstringop-overflow-76.c | 18 +- > .../Wzero-length-array-bounds-2-novec.c | 45 +++ > .../gcc.dg/Wzero-length-array-bounds-2.c | 2 +- > gcc/testsuite/lib/target-supports.exp | 182 + > 19 files changed, 967 insertions(+), 34 deletions(-) > create mode 100644 gcc/testsuite/c-c++-common/Wstringop-overflow-2-novec.c > create mode 100644 gcc/testsuite/gcc.dg/Warray-bounds-48-novec.c > create mode 100644 gcc/testsuite/gcc.dg/Warray-bounds-51-novec.c > create mode 100644 gcc/testsuite/gcc.dg/Warray-parameter-3-novec.c > create mode 100644 gcc/testsuite/gcc.dg/Wstringop-overflow-14-novec.c > create mode 100644 gcc/testsuite/gcc.dg/Wstringop-overflow-21-novec.c > create mode 100644 gcc/testsuite/gcc.dg/Wstringop-overflow-76-novec.c > create mode 100644 > gcc/testsuite/gcc.dg/Wzero-length-array-bounds-2-novec.c > > diff --git a/gcc/doc/sourceb
Re: [PATCH] Adjust testcase for O2 vectorization.
On 10/17/21 10:38 PM, Hongtao Liu wrote: On Fri, Oct 15, 2021 at 11:37 PM Martin Sebor wrote: On 10/14/21 1:11 AM, liuhongt wrote: Hi Kewen: Cound you help to verify if this patch fix those regressions for rs6000 port. As discussed in [1], this patch add xfail/target selector to those testcases, also make a copy of them so that they can be tested w/o vectorization. Just to make sure I understand what's happening with the tests: the new -N-novec.c tests consist of just the casses xfailed due to vectorizartion in the corresponding -N.c tests? Or are there Wstringop-overflow-2-novec.c is the same as Wstringop-overflow-2.c before O2 vectorization adjustment. Do you want me to reduce them to only contain cases for new xfail/target? That would be helpful, thank you. Are the others also full copies? (If yes, then copying just the failing cases into the new tests would be good as well.) some other differences (e.g., new cases in them, etc.)? I'd hope to eventually remove the -novec.c tests once all warnings behave as expected with vectorization as without it (maybe keeping just one case both ways as a sanity check). For the target-supports selectors, I confess I don't know enough about vectorization to find their names quite intuitive enough to know when to use each. For instance, for vect_slp_v4qi_store: It's 4-byte char stores with address being 4-bytes aligned. .i.e. +# Return the true if target support vectorization of v4qi store. +proc check_effective_target_vect_slp_v4qi_store { } { +set pattern {add new stmt: MEM } +return [expr { [check_vect_slp_vnqihi_store_usage $pattern ] != 0 }] +} When should this selector be used? In cases involving 4-byte char stores? Only naturally aligned 4-bytes stores (i.e., on a 4 byte boundary, as the check_vect_slp_vnqihi_store_usage suggests?) Or 4-byte stores of any types (e.g., four chars as well as two 16-bit shorts), etc.? Hopefully once all the warnings handle vectorization we won't need to use them, but until then it would be good to document this in more detail in the .exp file. Finally, thank you for adding comments to the xfailed tests referencing the corresponding bugs! Can you please mention the PR in the comment in each of the new xfails? Like so: index 7d29b5f48c7..cb687c69324 100644 --- a/gcc/testsuite/c-c++-common/Wstringop-overflow-2.c +++ b/gcc/testsuite/c-c++-common/Wstringop-overflow-2.c @@ -189,8 +189,9 @@ void ga1__ (void) struct A1 a = { 1 }; a.a[0] = 0; + // O2 vectorization regress Wstringop-overflow case (1), refer to pr102462. a.a[1] = 1;// { dg-warning "\\\[-Wstringop-overflow" } - a.a[2] = 2;// { dg-warning "\\\[-Wstringop-overflow" "" { xfail { i?86-*-* x86_64-*-* } } } + a.a[2] = 2;// { dg-warning "\\\[-Wstringop-overflow" "pr102462" { xfail { vect_slp_v2qi_store } } } PR in dg-warning comment. This should make it easier to deal with the XFAILs once the warnings have improved to handle vectorization. Will do. Great, thank you! Martin
Re: [PATCH] Adjust testcase for O2 vectorization.
On Fri, Oct 15, 2021 at 3:11 PM Kewen.Lin via Gcc-patches wrote: > > on 2021/10/14 下午6:56, Kewen.Lin via Gcc-patches wrote: > > Hi Hongtao, > > > > on 2021/10/14 下午3:11, liuhongt wrote: > >> Hi Kewen: > >> Cound you help to verify if this patch fix those regressions > >> for rs6000 port. > >> > > > > The ppc64le run just finished, there are still some regresssions: > > > > NA->XPASS: c-c++-common/Wstringop-overflow-2.c -Wc++-compat (test for > > warnings, line 194) > > NA->XPASS: c-c++-common/Wstringop-overflow-2.c -Wc++-compat (test for > > warnings, line 212) > > NA->XPASS: c-c++-common/Wstringop-overflow-2.c -Wc++-compat (test for > > warnings, line 296) > > NA->XPASS: c-c++-common/Wstringop-overflow-2.c -Wc++-compat (test for > > warnings, line 314) > > NA->FAIL: gcc.dg/Wstringop-overflow-21-novec.c (test for excess errors) > > NA->FAIL: gcc.dg/Wstringop-overflow-21-novec.c (test for warnings, line 18) > > NA->FAIL: gcc.dg/Wstringop-overflow-21-novec.c (test for warnings, line 29) > > NA->FAIL: gcc.dg/Wstringop-overflow-21-novec.c (test for warnings, line 45) > > NA->FAIL: gcc.dg/Wstringop-overflow-21-novec.c (test for warnings, line 55) > > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c note (test for warnings, > > line 104) > > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c note (test for warnings, > > line 137) > > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c note (test for warnings, > > line 19) > > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c note (test for warnings, > > line 39) > > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c note (test for warnings, > > line 56) > > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c note (test for warnings, > > line 70) > > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for excess errors) > > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line > > 116) > > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line > > 131) > > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line > > 146) > > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 33) > > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 50) > > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 64) > > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 78) > > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 97) > > PASS->FAIL: c-c++-common/Wstringop-overflow-2.c -std=gnu++14 (test for > > excess errors) > > NA->FAIL: c-c++-common/Wstringop-overflow-2.c -std=gnu++14 (test for > > warnings, line 229) > > NA->FAIL: c-c++-common/Wstringop-overflow-2.c -std=gnu++14 (test for > > warnings, line 230) > > NA->FAIL: c-c++-common/Wstringop-overflow-2.c -std=gnu++14 (test for > > warnings, line 331) > > NA->FAIL: c-c++-common/Wstringop-overflow-2.c -std=gnu++14 (test for > > warnings, line 332) > > // omitting -std=gnu++17, -std=gnu++2a, -std=gnu++98 > > > > I'll have a look and get back to you tomorrow. > > > > The failure c-c++-common/Wstringop-overflow-2.c is due to that the > current proc check_vect_slp_vnqihi_store_usage is made as "cache" > but it can vary for different input patterns. For rs6000 the test > for v2qi fails, the cached test result makes v4qi check fail > unexpectedly (should pass). I adjusted caching for the following users > check_effective_target_vect_slp_v*_store, also refactored a bit. > One trivial change is to add one new argument macro then we can just > compile the corresponding foo* function instead of all, hope it helps > to make the debugging outputs compact. > > For the failure Wstringop-overflow-76-novec.c, there is one typo > comparing to the original Wstringop-overflow-76.c. Guess it failed > on x86 too? It would be surprising if it passes on x86. > As to the failure Wstringop-overflow-21-novec.c, I confirmed it's > just noise, patching typos caused this failure. Thanks for the explanation for those failures and the typo, i'll adjust the patch. > > One new round ppc64le testing just finished with below diff and all > previous regressions are fixed without any new regressions. > > > diff --git a/gcc/testsuite/gcc.dg/Wstringop-overflow-76-novec.c > b/gcc/testsuite/gcc.dg/Wstringop-overflow-76-novec.c > index d000b587a65..1132348c5f4 100644 > --- a/gcc/testsuite/gcc.dg/Wstringop-overflow-76-novec.c > +++ b/gcc/testsuite/gcc.dg/Wstringop-overflow-76-novec.c > @@ -82,7 +82,7 @@ void max_d8_p (char *q, int i) > struct A3_5 > { >char a3[3]; // { dg-message "at offset 3 into destination object 'a3' of > size 3" "pr??" { xfail *-*-* } } > - char a5[5]; > + char a5[5]; // { dg-message "at offset 5 into destination object 'a5' of > size 5" "note" } > }; > > void max_A3_A5 (int i, struct A3_5 *pa3_5) > diff --git a/gcc/testsuite/lib/target-supports.exp > b/gcc/testsuite/lib/target-supports.exp > index 530c5769614..8736b908ec7 100644 > --- a/gc
Re: [PATCH] Adjust testcase for O2 vectorization.
On Fri, Oct 15, 2021 at 11:37 PM Martin Sebor wrote: > > On 10/14/21 1:11 AM, liuhongt wrote: > > Hi Kewen: > >Cound you help to verify if this patch fix those regressions > > for rs6000 port. > > > > As discussed in [1], this patch add xfail/target selector to those > > testcases, also make a copy of them so that they can be tested w/o > > vectorization. > > Just to make sure I understand what's happening with the tests: > the new -N-novec.c tests consist of just the casses xfailed due > to vectorizartion in the corresponding -N.c tests? Or are there Wstringop-overflow-2-novec.c is the same as Wstringop-overflow-2.c before O2 vectorization adjustment. Do you want me to reduce them to only contain cases for new xfail/target? > some other differences (e.g., new cases in them, etc.)? I'd > hope to eventually remove the -novec.c tests once all warnings > behave as expected with vectorization as without it (maybe > keeping just one case both ways as a sanity check). > > For the target-supports selectors, I confess I don't know enough > about vectorization to find their names quite intuitive enough > to know when to use each. For instance, for vect_slp_v4qi_store: It's 4-byte char stores with address being 4-bytes aligned. .i.e. > > +# Return the true if target support vectorization of v4qi store. > +proc check_effective_target_vect_slp_v4qi_store { } { > +set pattern {add new stmt: MEM } > +return [expr { [check_vect_slp_vnqihi_store_usage $pattern ] != 0 }] > +} > > When should this selector be used? In cases involving 4-byte > char stores? Only naturally aligned 4-bytes stores (i.e., on > a 4 byte boundary, as the check_vect_slp_vnqihi_store_usage > suggests?) Or 4-byte stores of any types (e.g., four chars > as well as two 16-bit shorts), etc.? > > Hopefully once all the warnings handle vectorization we won't > need to use them, but until then it would be good to document > this in more detail in the .exp file. > > Finally, thank you for adding comments to the xfailed tests > referencing the corresponding bugs! Can you please mention > the PR in the comment in each of the new xfails? Like so: > > index 7d29b5f48c7..cb687c69324 100644 > --- a/gcc/testsuite/c-c++-common/Wstringop-overflow-2.c > +++ b/gcc/testsuite/c-c++-common/Wstringop-overflow-2.c > @@ -189,8 +189,9 @@ void ga1__ (void) > > struct A1 a = { 1 }; > a.a[0] = 0; > + // O2 vectorization regress Wstringop-overflow case (1), refer to > pr102462. > a.a[1] = 1;// { dg-warning > "\\\[-Wstringop-overflow" } > - a.a[2] = 2;// { dg-warning > "\\\[-Wstringop-overflow" "" { xfail { i?86-*-* x86_64-*-* } } } > + a.a[2] = 2;// { dg-warning > "\\\[-Wstringop-overflow" "pr102462" { xfail { vect_slp_v2qi_store } } } > > PR in dg-warning comment. > > This should make it easier to deal with the XFAILs once > the warnings have improved to handle vectorization. Will do. > > Martin -- BR, Hongtao
Re: [PATCH] Adjust testcase for O2 vectorization.
On 10/14/21 1:11 AM, liuhongt wrote: Hi Kewen: Cound you help to verify if this patch fix those regressions for rs6000 port. As discussed in [1], this patch add xfail/target selector to those testcases, also make a copy of them so that they can be tested w/o vectorization. Just to make sure I understand what's happening with the tests: the new -N-novec.c tests consist of just the casses xfailed due to vectorizartion in the corresponding -N.c tests? Or are there some other differences (e.g., new cases in them, etc.)? I'd hope to eventually remove the -novec.c tests once all warnings behave as expected with vectorization as without it (maybe keeping just one case both ways as a sanity check). For the target-supports selectors, I confess I don't know enough about vectorization to find their names quite intuitive enough to know when to use each. For instance, for vect_slp_v4qi_store: +# Return the true if target support vectorization of v4qi store. +proc check_effective_target_vect_slp_v4qi_store { } { +set pattern {add new stmt: MEM } +return [expr { [check_vect_slp_vnqihi_store_usage $pattern ] != 0 }] +} When should this selector be used? In cases involving 4-byte char stores? Only naturally aligned 4-bytes stores (i.e., on a 4 byte boundary, as the check_vect_slp_vnqihi_store_usage suggests?) Or 4-byte stores of any types (e.g., four chars as well as two 16-bit shorts), etc.? Hopefully once all the warnings handle vectorization we won't need to use them, but until then it would be good to document this in more detail in the .exp file. Finally, thank you for adding comments to the xfailed tests referencing the corresponding bugs! Can you please mention the PR in the comment in each of the new xfails? Like so: index 7d29b5f48c7..cb687c69324 100644 --- a/gcc/testsuite/c-c++-common/Wstringop-overflow-2.c +++ b/gcc/testsuite/c-c++-common/Wstringop-overflow-2.c @@ -189,8 +189,9 @@ void ga1__ (void) struct A1 a = { 1 }; a.a[0] = 0; + // O2 vectorization regress Wstringop-overflow case (1), refer to pr102462. a.a[1] = 1;// { dg-warning "\\\[-Wstringop-overflow" } - a.a[2] = 2;// { dg-warning "\\\[-Wstringop-overflow" "" { xfail { i?86-*-* x86_64-*-* } } } + a.a[2] = 2;// { dg-warning "\\\[-Wstringop-overflow" "pr102462" { xfail { vect_slp_v2qi_store } } } PR in dg-warning comment. This should make it easier to deal with the XFAILs once the warnings have improved to handle vectorization. Martin
Re: [PATCH] Adjust testcase for O2 vectorization.
on 2021/10/14 下午6:56, Kewen.Lin via Gcc-patches wrote: > Hi Hongtao, > > on 2021/10/14 下午3:11, liuhongt wrote: >> Hi Kewen: >> Cound you help to verify if this patch fix those regressions >> for rs6000 port. >> > > The ppc64le run just finished, there are still some regresssions: > > NA->XPASS: c-c++-common/Wstringop-overflow-2.c -Wc++-compat (test for > warnings, line 194) > NA->XPASS: c-c++-common/Wstringop-overflow-2.c -Wc++-compat (test for > warnings, line 212) > NA->XPASS: c-c++-common/Wstringop-overflow-2.c -Wc++-compat (test for > warnings, line 296) > NA->XPASS: c-c++-common/Wstringop-overflow-2.c -Wc++-compat (test for > warnings, line 314) > NA->FAIL: gcc.dg/Wstringop-overflow-21-novec.c (test for excess errors) > NA->FAIL: gcc.dg/Wstringop-overflow-21-novec.c (test for warnings, line 18) > NA->FAIL: gcc.dg/Wstringop-overflow-21-novec.c (test for warnings, line 29) > NA->FAIL: gcc.dg/Wstringop-overflow-21-novec.c (test for warnings, line 45) > NA->FAIL: gcc.dg/Wstringop-overflow-21-novec.c (test for warnings, line 55) > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c note (test for warnings, line > 104) > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c note (test for warnings, line > 137) > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c note (test for warnings, line > 19) > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c note (test for warnings, line > 39) > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c note (test for warnings, line > 56) > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c note (test for warnings, line > 70) > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for excess errors) > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 116) > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 131) > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 146) > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 33) > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 50) > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 64) > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 78) > NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 97) > PASS->FAIL: c-c++-common/Wstringop-overflow-2.c -std=gnu++14 (test for > excess errors) > NA->FAIL: c-c++-common/Wstringop-overflow-2.c -std=gnu++14 (test for > warnings, line 229) > NA->FAIL: c-c++-common/Wstringop-overflow-2.c -std=gnu++14 (test for > warnings, line 230) > NA->FAIL: c-c++-common/Wstringop-overflow-2.c -std=gnu++14 (test for > warnings, line 331) > NA->FAIL: c-c++-common/Wstringop-overflow-2.c -std=gnu++14 (test for > warnings, line 332) > // omitting -std=gnu++17, -std=gnu++2a, -std=gnu++98 > > I'll have a look and get back to you tomorrow. > The failure c-c++-common/Wstringop-overflow-2.c is due to that the current proc check_vect_slp_vnqihi_store_usage is made as "cache" but it can vary for different input patterns. For rs6000 the test for v2qi fails, the cached test result makes v4qi check fail unexpectedly (should pass). I adjusted caching for the following users check_effective_target_vect_slp_v*_store, also refactored a bit. One trivial change is to add one new argument macro then we can just compile the corresponding foo* function instead of all, hope it helps to make the debugging outputs compact. For the failure Wstringop-overflow-76-novec.c, there is one typo comparing to the original Wstringop-overflow-76.c. Guess it failed on x86 too? It would be surprising if it passes on x86. As to the failure Wstringop-overflow-21-novec.c, I confirmed it's just noise, patching typos caused this failure. One new round ppc64le testing just finished with below diff and all previous regressions are fixed without any new regressions. diff --git a/gcc/testsuite/gcc.dg/Wstringop-overflow-76-novec.c b/gcc/testsuite/gcc.dg/Wstringop-overflow-76-novec.c index d000b587a65..1132348c5f4 100644 --- a/gcc/testsuite/gcc.dg/Wstringop-overflow-76-novec.c +++ b/gcc/testsuite/gcc.dg/Wstringop-overflow-76-novec.c @@ -82,7 +82,7 @@ void max_d8_p (char *q, int i) struct A3_5 { char a3[3]; // { dg-message "at offset 3 into destination object 'a3' of size 3" "pr??" { xfail *-*-* } } - char a5[5]; + char a5[5]; // { dg-message "at offset 5 into destination object 'a5' of size 5" "note" } }; void max_A3_A5 (int i, struct A3_5 *pa3_5) diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 530c5769614..8736b908ec7 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -7584,12 +7584,13 @@ proc check_effective_target_vect_element_align_preferred { } { # Return zero if the desirable pattern isn't found. # It's used by Warray-bounds/Wstringop-overflow testcases which are # regressed by O2 vectorization, refer to PR102697/PR102462/PR102
Re: [PATCH] Adjust testcase for O2 vectorization.
Hi Hongtao, on 2021/10/14 下午3:11, liuhongt wrote: > Hi Kewen: > Cound you help to verify if this patch fix those regressions > for rs6000 port. > The ppc64le run just finished, there are still some regresssions: NA->XPASS: c-c++-common/Wstringop-overflow-2.c -Wc++-compat (test for warnings, line 194) NA->XPASS: c-c++-common/Wstringop-overflow-2.c -Wc++-compat (test for warnings, line 212) NA->XPASS: c-c++-common/Wstringop-overflow-2.c -Wc++-compat (test for warnings, line 296) NA->XPASS: c-c++-common/Wstringop-overflow-2.c -Wc++-compat (test for warnings, line 314) NA->FAIL: gcc.dg/Wstringop-overflow-21-novec.c (test for excess errors) NA->FAIL: gcc.dg/Wstringop-overflow-21-novec.c (test for warnings, line 18) NA->FAIL: gcc.dg/Wstringop-overflow-21-novec.c (test for warnings, line 29) NA->FAIL: gcc.dg/Wstringop-overflow-21-novec.c (test for warnings, line 45) NA->FAIL: gcc.dg/Wstringop-overflow-21-novec.c (test for warnings, line 55) NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c note (test for warnings, line 104) NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c note (test for warnings, line 137) NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c note (test for warnings, line 19) NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c note (test for warnings, line 39) NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c note (test for warnings, line 56) NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c note (test for warnings, line 70) NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for excess errors) NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 116) NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 131) NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 146) NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 33) NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 50) NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 64) NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 78) NA->FAIL: gcc.dg/Wstringop-overflow-76-novec.c (test for warnings, line 97) PASS->FAIL: c-c++-common/Wstringop-overflow-2.c -std=gnu++14 (test for excess errors) NA->FAIL: c-c++-common/Wstringop-overflow-2.c -std=gnu++14 (test for warnings, line 229) NA->FAIL: c-c++-common/Wstringop-overflow-2.c -std=gnu++14 (test for warnings, line 230) NA->FAIL: c-c++-common/Wstringop-overflow-2.c -std=gnu++14 (test for warnings, line 331) NA->FAIL: c-c++-common/Wstringop-overflow-2.c -std=gnu++14 (test for warnings, line 332) // omitting -std=gnu++17, -std=gnu++2a, -std=gnu++98 I'll have a look and get back to you tomorrow. BR, Kewen > As discussed in [1], this patch add xfail/target selector to those > testcases, also make a copy of them so that they can be tested w/o > vectorization. > > Newly added xfail/target selectors are used to check the vectorization > capability of continuous byte/double bytes storage, these scenarios > are exactly the part of the testcases that regressed after O2 > vectorization. > > [1] https://gcc.gnu.org/pipermail/gcc-patches/2021-October/581456.html. > > gcc/testsuite/ChangeLog > > PR middle-end/102722 > PR middle-end/102697 > PR middle-end/102462 > PR middle-end/102706 > * c-c++-common/Wstringop-overflow-2.c: Adjust testcase with new > xfail/target selector. > * gcc.dg/Warray-bounds-51.c: Ditto. > * gcc.dg/Warray-parameter-3.c: Ditto. > * gcc.dg/Wstringop-overflow-14.c: Ditto. > * gcc.dg/Wstringop-overflow-21.c: Ditto. > * gcc.dg/Wstringop-overflow-68.c: Ditto. > * gcc.dg/Wstringop-overflow-76.c: Ditto. > * gcc.dg/Warray-bounds-48.c: Ditto. > * lib/target-supports.exp (check_vect_slp_vnqihi_store_usage): > New function. > (check_effective_target_vect_slp_v2qi_store): Ditto. > (check_effective_target_vect_slp_v4qi_store): Ditto. > (check_effective_target_vect_slp_v8qi_store): Ditto. > (check_effective_target_vect_slp_v16qi_store): Ditto. > (check_effective_target_vect_slp_v2hi_store): Ditto. > (check_effective_target_vect_slp_v4hi_store): Ditto. > * c-c++-common/Wstringop-overflow-2-novec.c: New test. > * gcc.dg/Warray-bounds-51-novec.c: New test. > * gcc.dg/Warray-bounds-48-novec.c: New test. > * gcc.dg/Warray-parameter-3-novec.c: New test. > * gcc.dg/Wstringop-overflow-14-novec.c: New test. > * gcc.dg/Wstringop-overflow-21-novec.c: New test. > * gcc.dg/Wstringop-overflow-76-novec.c: New test. > --- > .../c-c++-common/Wstringop-overflow-2-novec.c | 348 + > .../c-c++-common/Wstringop-overflow-2.c | 26 +- > gcc/testsuite/gcc.dg/Warray-bounds-48-novec.c | 364 ++ > gcc/testsuite/gcc.dg/Warray-bounds-48.c | 6 +- > gcc/testsuite/gcc.dg/Warray-bounds-51-novec.c | 61 +++ > gcc/testsuite/gcc.dg/Warray-bounds-51.c
Re: [PATCH] Adjust testcase for O2 vectorization.
On Thu, 14 Oct 2021 15:11:41 +0800 liuhongt via Gcc-patches wrote: > * lib/target-supports.exp (check_vect_slp_vnqihi_store_usage): > New function. > (check_effective_target_vect_slp_v2qi_store): Ditto. > (check_effective_target_vect_slp_v4qi_store): Ditto. > (check_effective_target_vect_slp_v8qi_store): Ditto. > (check_effective_target_vect_slp_v16qi_store): Ditto. > (check_effective_target_vect_slp_v2hi_store): Ditto. > (check_effective_target_vect_slp_v4hi_store): Ditto. ISTM the doc bits are missing from doc/sourcebuild.texi (Effective-Target Keywords). thanks,
Re: [PATCH] Adjust testcase for O2 vectorization enabling.
On Sun, Oct 10, 2021 at 10:19 PM liuhongt wrote: > > gcc/testsuite/ChangeLog: > > PR middle-end/102669 > * gnat.dg/unroll1.adb: Add -fno-tree-vectorize. > --- > gcc/testsuite/gnat.dg/unroll1.adb | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/gcc/testsuite/gnat.dg/unroll1.adb > b/gcc/testsuite/gnat.dg/unroll1.adb > index 34d8a8f3f38..8b732dd8f44 100644 > --- a/gcc/testsuite/gnat.dg/unroll1.adb > +++ b/gcc/testsuite/gnat.dg/unroll1.adb > @@ -1,5 +1,5 @@ > -- { dg-do compile } > --- { dg-options "-O2 -funroll-all-loops -fdump-rtl-loop2_unroll-details > -fdump-tree-cunrolli-details" } > +-- { dg-options "-O2 -funroll-all-loops -fno-tree-vectorize > -fdump-rtl-loop2_unroll-details -fdump-tree-cunrolli-details" } > > package body Unroll1 is Should no-unroll pragma work with -ftree-vectorize? -- H.J.
Re: [PATCH] Adjust testcase for O2 vectorization enabling
On Mon, Oct 11, 2021 at 10:23 AM Kewen.Lin via Gcc-patches wrote: > > Hi Hongtao, > > on 2021/10/11 上午10:10, liuhongt via Gcc-patches wrote: > > libgomp/ChangeLog: > > > > * testsuite/libgomp.graphite/force-parallel-8.c: Add > > -fno-tree-vectorize. > > --- > > libgomp/testsuite/libgomp.graphite/force-parallel-8.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/libgomp/testsuite/libgomp.graphite/force-parallel-8.c > > b/libgomp/testsuite/libgomp.graphite/force-parallel-8.c > > index f9e07039172..0f3d138cebd 100644 > > --- a/libgomp/testsuite/libgomp.graphite/force-parallel-8.c > > +++ b/libgomp/testsuite/libgomp.graphite/force-parallel-8.c > > @@ -1,4 +1,4 @@ > > -/* { dg-additional-options "-fdisable-tree-thread1 > > -fdisable-tree-vrp-thread1" } */ > > +/* { dg-additional-options "-fdisable-tree-thread1 > > -fdisable-tree-vrp-thread1 -fno-tree-vectorize" } */ > > > > #define N 1500 > > > > > > Thanks for doing this! > > This issue was observed in rs6000 specific PR102658 as well. > > I've looked into it a bit, it's caused by the "conditional store replacement" > which > is originally disabled without vectorization as below code. > > /* If either vectorization or if-conversion is disabled then do > not sink any stores. */ > if (param_max_stores_to_sink == 0 > || (!flag_tree_loop_vectorize && !flag_tree_slp_vectorize) > || !flag_tree_loop_if_convert) > return false; > > The new change makes the innermost loop look like > > for (int c1 = 0; c1 <= 1499; c1 += 1) { > if (c1 <= 500) { > S_10(c0, c1); > } else { > S_9(c0, c1); > } > S_11(c0, c1); > } > > and can not be splitted as: > > for (int c1 = 0; c1 <= 500; c1 += 1) > S_10(c0, c1); > > for (int c1 = 501; c1 <= 1499; c1 += 1) > S_9(c0, c1); > > So instead of disabling vectorization, could we just disable this cs > replacement > with parameter "--param max-stores-to-sink=0"? > > I tested this proposal on ppc64le, it should work as well. > > What do you think of it? I can confirm it also works for x86, I'll adjust the patch. Thank you for the analysis. > > BR, > Kewen -- BR, Hongtao
Re: [PATCH] Adjust testcase for O2 vectorization enabling
Hi Hongtao, on 2021/10/11 上午10:10, liuhongt via Gcc-patches wrote: > libgomp/ChangeLog: > > * testsuite/libgomp.graphite/force-parallel-8.c: Add > -fno-tree-vectorize. > --- > libgomp/testsuite/libgomp.graphite/force-parallel-8.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/libgomp/testsuite/libgomp.graphite/force-parallel-8.c > b/libgomp/testsuite/libgomp.graphite/force-parallel-8.c > index f9e07039172..0f3d138cebd 100644 > --- a/libgomp/testsuite/libgomp.graphite/force-parallel-8.c > +++ b/libgomp/testsuite/libgomp.graphite/force-parallel-8.c > @@ -1,4 +1,4 @@ > -/* { dg-additional-options "-fdisable-tree-thread1 > -fdisable-tree-vrp-thread1" } */ > +/* { dg-additional-options "-fdisable-tree-thread1 > -fdisable-tree-vrp-thread1 -fno-tree-vectorize" } */ > > #define N 1500 > > Thanks for doing this! This issue was observed in rs6000 specific PR102658 as well. I've looked into it a bit, it's caused by the "conditional store replacement" which is originally disabled without vectorization as below code. /* If either vectorization or if-conversion is disabled then do not sink any stores. */ if (param_max_stores_to_sink == 0 || (!flag_tree_loop_vectorize && !flag_tree_slp_vectorize) || !flag_tree_loop_if_convert) return false; The new change makes the innermost loop look like for (int c1 = 0; c1 <= 1499; c1 += 1) { if (c1 <= 500) { S_10(c0, c1); } else { S_9(c0, c1); } S_11(c0, c1); } and can not be splitted as: for (int c1 = 0; c1 <= 500; c1 += 1) S_10(c0, c1); for (int c1 = 501; c1 <= 1499; c1 += 1) S_9(c0, c1); So instead of disabling vectorization, could we just disable this cs replacement with parameter "--param max-stores-to-sink=0"? I tested this proposal on ppc64le, it should work as well. What do you think of it? BR, Kewen