Bumping the cost of vec_to_scalar made the .s loop in gcc.target/aarch64/sve2/whilerw_1.c use a runtime profitability check, like the .d version already did. Since the cost model isn't really being tested here, the most robust fix seemed to be to disable it, which I should really have done from the outset.
Tested on aarch64-linux-gnu and applied as r278549. Richard 2019-11-21 Richard Sandiford <richard.sandif...@arm.com> gcc/testsuite/ * gcc.target/aarch64/sve2/whilerw_1.c: Add -fno-vect-cost-model. Require x0 in the .d test too. Index: gcc/testsuite/gcc.target/aarch64/sve2/whilerw_1.c =================================================================== --- gcc/testsuite/gcc.target/aarch64/sve2/whilerw_1.c 2019-11-18 15:36:04.869884903 +0000 +++ gcc/testsuite/gcc.target/aarch64/sve2/whilerw_1.c 2019-11-21 12:02:54.170171205 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -ftree-vectorize" } */ +/* { dg-options "-O2 -ftree-vectorize -fno-vect-cost-model" } */ /* { dg-require-effective-target lp64 } */ #include <stdint.h> @@ -26,5 +26,5 @@ TEST_LOOP (int64_t); /* { dg-final { scan-assembler-times {\twhilerw\tp[0-9]+\.b, x0, x1\n} 1 } } */ /* { dg-final { scan-assembler-times {\twhilerw\tp[0-9]+\.h, x0, x1\n} 1 } } */ /* { dg-final { scan-assembler-times {\twhilerw\tp[0-9]+\.s, x0, x1\n} 1 } } */ -/* { dg-final { scan-assembler-times {\twhilerw\tp[0-9]+\.d, x[0-9]+, x1\n} 1 } } */ +/* { dg-final { scan-assembler-times {\twhilerw\tp[0-9]+\.d, x0, x1\n} 1 } } */ /* { dg-final { scan-assembler-not {\twhilewr\t} } } */