Richard Biener <richard.guent...@gmail.com> writes: > On Tue, Nov 17, 2020 at 2:02 PM Richard Sandiford > <richard.sandif...@arm.com> wrote: >> >> Richard Biener via Gcc-patches <gcc-patches@gcc.gnu.org> writes: >> > On Tue, Nov 17, 2020 at 12:24 PM Richard Sandiford via Gcc-patches >> > <gcc-patches@gcc.gnu.org> wrote: >> >> >> >> We're now able to vectorise the set-up loop: >> >> >> >> int p = power2 (fns[i].po2); >> >> for (int j = 0; j < N; j++) >> >> a[j] = ((p << 4) * j) / (N - 1) - (p << 5); >> >> >> >> Rather than adjust the expected output for that, it seemed better >> >> to disable optimisation for the testing code. >> >> >> >> Tested on aarch64-linux-gnu (with and without SVE), arm-linux-gnueabihf >> >> and x86_64-linux-gnu. OK to install? >> > >> > In other places we just add a asm ("" : : : "memory") to the loop body, >> > can you >> > do it like htat? >> >> I wondered about that, but I don't think it's reliable long-term. >> We could (perhaps rightly) decide that it's a win to vectorise the >> rhs of a[j] even if the asm prevents us from doing a vector store. > > But this is about dump-scanning and I'd rather avoid optimize attributes > since that removes coverage gained by people running the testsuite > with random set of options.
Yeah, but I'd argue that getting optimisation coverage of the validity checking isn't really a good thing, since it just increases the chances that the validity code will be misoptimised in the same way as the code that it's testing. Can see it cuts both ways though. > We do have #pragma no_vector support in the middle-end just not > yet in the C FE parser (see where it builds ANNOTATE_EXPRs, > add support for the annot_expr_no_vector_kind). If you want a > future-proof reliable way to disable vectorizing a loop, that is. OK, I went for your original suggestion of using an asm. Thanks, Richard gcc/testsuite/ * gcc.dg/vect/vect-sdiv-pow2-1.c (main): Add an asm to the set-up loop. diff --git a/gcc/testsuite/gcc.dg/vect/vect-sdiv-pow2-1.c b/gcc/testsuite/gcc.dg/vect/vect-sdiv-pow2-1.c index be70bc6c47e..484efb1e8c8 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-sdiv-pow2-1.c +++ b/gcc/testsuite/gcc.dg/vect/vect-sdiv-pow2-1.c @@ -62,7 +62,10 @@ main (void) { int p = power2 (fns[i].po2); for (int j = 0; j < N; j++) - a[j] = ((p << 4) * j) / (N - 1) - (p << 5); + { + a[j] = ((p << 4) * j) / (N - 1) - (p << 5); + asm volatile ("" ::: "memory"); + } fns[i].div (b, a, N); fns[i].mod (c, a, N); -- 2.17.1