]>
git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.target/powerpc/pr92132-fp-1.c
1023e8cd9d8fda7ea3535b18cc77689f58a42e5a
2 /* { dg-require-effective-target vsx_hw } */
3 /* { dg-options "-O2 -ftree-vectorize -mvsx -fno-vect-cost-model -fdump-tree-vect-details" } */
5 /* To test condition reduction vectorization, where comparison operands are of
6 double type and condition true/false values are integer type. Cover all
7 float point comparison codes. */
12 abort (void) __attribute__ ((noreturn
));
15 #define FP_TYPE double
17 #define LTGT(a, b) (__builtin_islessgreater ((a), (b)))
18 #define UNORD(a, b) (__builtin_isunordered ((a), (b)))
19 #define ORD(a, b) (!__builtin_isunordered ((a), (b)))
20 #define UNEQ(a, b) (!__builtin_islessgreater ((a), (b)))
21 #define UNGT(a, b) (!__builtin_islessequal ((a), (b)))
22 #define UNGE(a, b) (!__builtin_isless ((a), (b)))
23 #define UNLT(a, b) (!__builtin_isgreaterequal ((a), (b)))
24 #define UNLE(a, b) (!__builtin_isgreater ((a), (b)))
26 __attribute__ ((noinline
)) int
27 test_eq (FP_TYPE
*a
, FP_TYPE min_v
)
31 for (int i
= 0; i
< N
; i
++)
38 __attribute__ ((noinline
)) int
39 test_ne (FP_TYPE
*a
, FP_TYPE min_v
)
43 for (int i
= 0; i
< N
; i
++)
50 __attribute__ ((noinline
)) int
51 test_gt (FP_TYPE
*a
, FP_TYPE min_v
)
55 for (int i
= 0; i
< N
; i
++)
62 __attribute__ ((noinline
)) int
63 test_ge (FP_TYPE
*a
, FP_TYPE min_v
)
67 for (int i
= 0; i
< N
; i
++)
74 __attribute__ ((noinline
)) int
75 test_lt (FP_TYPE
*a
, FP_TYPE min_v
)
79 for (int i
= 0; i
< N
; i
++)
86 __attribute__ ((noinline
)) int
87 test_le (FP_TYPE
*a
, FP_TYPE min_v
)
91 for (int i
= 0; i
< N
; i
++)
98 __attribute__ ((noinline
)) int
99 test_ltgt (FP_TYPE
*a
, FP_TYPE min_v
)
103 for (int i
= 0; i
< N
; i
++)
104 if (LTGT (a
[i
], min_v
))
110 __attribute__ ((noinline
)) int
111 test_ord (FP_TYPE
*a
, FP_TYPE min_v
)
115 for (int i
= 0; i
< N
; i
++)
116 if (ORD (a
[i
], min_v
))
122 __attribute__ ((noinline
)) int
123 test_unord (FP_TYPE
*a
, FP_TYPE min_v
)
127 for (int i
= 0; i
< N
; i
++)
128 if (UNORD (a
[i
], min_v
))
134 __attribute__ ((noinline
)) int
135 test_uneq (FP_TYPE
*a
, FP_TYPE min_v
)
139 for (int i
= 0; i
< N
; i
++)
140 if (UNEQ (a
[i
], min_v
))
146 __attribute__ ((noinline
)) int
147 test_ungt (FP_TYPE
*a
, FP_TYPE min_v
)
151 for (int i
= 0; i
< N
; i
++)
152 if (UNGT (a
[i
], min_v
))
158 __attribute__ ((noinline
)) int
159 test_unge (FP_TYPE
*a
, FP_TYPE min_v
)
163 for (int i
= 0; i
< N
; i
++)
164 if (UNGE (a
[i
], min_v
))
170 __attribute__ ((noinline
)) int
171 test_unlt (FP_TYPE
*a
, FP_TYPE min_v
)
175 for (int i
= 0; i
< N
; i
++)
176 if (UNLT (a
[i
], min_v
))
182 __attribute__ ((noinline
)) int
183 test_unle (FP_TYPE
*a
, FP_TYPE min_v
)
187 for (int i
= 0; i
< N
; i
++)
188 if (UNLE (a
[i
], min_v
))
199 FP_TYPE a1
[N
] = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 1, 2, 3, 4,
200 5, 6, 7, 8, 9, 10, 21, 22, 23, 24, 25, 26, 27};
202 FP_TYPE a2
[N
] = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 1, 2, 3, 4,
203 5, 6, 7, 8, 9, 10, 21, 22, 23, NAN
, 25, 26, 27};
205 FP_TYPE a3
[N
] = {21, 22, 23, 24, 25, 26, 27, 28, 29, 10, 11, 12, 13, 14,
206 15, 16, 17, 18, 19, 20, 1, 2, 3, 4, 5, 6, 7};
208 FP_TYPE a4
[N
] = {21, 22, 23, 24, 25, 26, 27, 28, 29, 10, 11, 12, 13, 14,
209 15, 16, 17, 18, 19, 20, 1, 2, 3, 4, NAN
, 6, 7};
211 FP_TYPE a5
[N
] = {21, 22, 23, 24, 25, 26, 27, 28, 29, 10, 11, 12, 13, 14,
212 15, 16, 17, 18, 19, 20, 1, 2, 3, 4, NAN
, 10, 10};
214 ret
= test_eq (a1
, 10);
218 ret
= test_ne (a1
, 10);
222 ret
= test_gt (a3
, 10);
226 ret
= test_ge (a3
, 10);
230 ret
= test_lt (a1
, 10);
234 ret
= test_le (a1
, 10);
238 ret
= test_ltgt (a3
, 10);
242 ret
= test_ltgt (a5
, 10);
246 ret
= test_unord (a5
, 10);
250 ret
= test_ord (a5
, 10);
254 ret
= test_uneq (a1
, 10);
258 ret
= test_uneq (a4
, 10);
262 ret
= test_ungt (a3
, 10);
266 ret
= test_ungt (a4
, 10);
270 ret
= test_unge (a3
, 10);
274 ret
= test_ungt (a4
, 10);
278 ret
= test_unlt (a1
, 10);
282 ret
= test_unlt (a2
, 10);
286 ret
= test_unle (a1
, 10);
290 ret
= test_unle (a2
, 10);
297 /* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 14 "vect" } } */