On Fri, Jan 09, 2026 at 11:26:51AM -0800, Pengxuan Zheng wrote:
> PR tree-optimization/123109
> * gcc.dg/pr123109.c: New test.
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pr123109.c
> @@ -0,0 +1,25 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O2 -fdump-tree-optimized" } */
> +
> +typedef int v4si __attribute__((vector_size(4 * sizeof(int))));
> +typedef unsigned int v4usi __attribute__((vector_size(4 * sizeof(unsigned
> int))));
> +
> +#define TEST_NE(type) \
> + type test_ne_##type (type a) { return (a >> 31) != 0; }
> +
> +#define TEST_EQ(type) \
> + type test_eq_##type (type a) { return (a >> 31) == 0; }
> +
> +TEST_NE(int)
> +TEST_NE(unsigned)
> +TEST_NE(v4si)
> +TEST_NE(v4usi)
> +TEST_EQ(int)
> +TEST_EQ(unsigned)
> +TEST_EQ(v4si)
> +TEST_EQ(v4usi)
> +
> +/* { dg-final { scan-tree-dump-times ">= 0" 2 optimized } } */
> +/* { dg-final { scan-tree-dump-times "< 0" 2 optimized } } */
> +/* { dg-final { scan-tree-dump-times ">= { 0, 0, 0, 0 }" 2 optimized } } */
> +/* { dg-final { scan-tree-dump-times ">> 31" 2 optimized } } */
This test FAILs on i686-linux and I bet lots of other targets.
There are 2 problems. One is -Wpsabi warnings are emitted on
some targets and the more important one, as this is scanning the
optimized dump, if the selected ISA doesn't support V4SImode
(or V4HImode for 16-bit int targets) vectors natively, vector
lowering will lower it to something that will certainly not
match the scan-tree-dump-times counts.
So, either add -Wpsabi to dg-options and scan some dump before
veclower, or the test should be limited to targets with 4x int vector
hw support. Though e.g. vect_int effective target is I think only
usable within vect.exp guarded tests because it relies on extra
options added for vect.exp tests. I think you can't
invoke check_vect_support_and_set_flags in other tests.
Another option is to enable the test on selected targets which
are known to include that support by default or dg-additional-options
add whatever is needed on the selected targets, e.g.
/* { dg-additional-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */
would do for ia32.
And/or split the test to test scalar stuff separately from vector stuff,
and do whatever solution you use for the vector stuff only on the
vector test and keep the scalar one on all targets.
Jakub