[PR81647][AARCH64] Fix handling of Unordered Comparisons in aarch64-simd.md
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / pr81647.c
blobf60dfba49d538e3b2164b11392ab8dbfdba6546e
1 /* { dg-do run } */
2 /* { dg-options "-O3 -fdump-tree-ssa" } */
4 #include <fenv.h>
6 double x[28], y[28];
7 int res[28];
9 int
10 main (void)
12 int i;
13 for (i = 0; i < 28; ++i)
15 x[i] = __builtin_nan ("");
16 y[i] = i;
18 __asm__ volatile ("" ::: "memory");
19 feclearexcept (FE_ALL_EXCEPT);
20 for (i = 0; i < 4; ++i)
21 res[i] = __builtin_isgreater (x[i], y[i]);
22 for (i = 4; i < 8; ++i)
23 res[i] = __builtin_isgreaterequal (x[i], y[i]);
24 for (i = 8; i < 12; ++i)
25 res[i] = __builtin_isless (x[i], y[i]);
26 for (i = 12; i < 16; ++i)
27 res[i] = __builtin_islessequal (x[i], y[i]);
28 for (i = 16; i < 20; ++i)
29 res[i] = __builtin_islessgreater (x[i], y[i]);
30 for (i = 20; i < 24; ++i)
31 res[i] = __builtin_isunordered (x[i], y[i]);
32 for (i = 24; i < 28; ++i)
33 res[i] = !(__builtin_isunordered (x[i], y[i]));
34 __asm__ volatile ("" ::: "memory");
35 return fetestexcept (FE_ALL_EXCEPT) != 0;
38 /* { dg-final { scan-tree-dump " u> " "ssa" } } */
39 /* { dg-final { scan-tree-dump " u>= " "ssa" } } */
40 /* { dg-final { scan-tree-dump " u< " "ssa" } } */
41 /* { dg-final { scan-tree-dump " u<= " "ssa" } } */
42 /* { dg-final { scan-tree-dump " u== " "ssa" } } */
43 /* { dg-final { scan-tree-dump " unord " "ssa" } } */
44 /* { dg-final { scan-tree-dump " ord " "ssa" } } */