| #include "tree-vect.h" |
| |
| #ifndef TYPE |
| #define TYPE float |
| #define FN __builtin_fminf |
| #endif |
| |
| TYPE __attribute__((noipa)) |
| test (TYPE x, TYPE *ptr, int n) |
| { |
| for (int i = 0; i < n; ++i) |
| x = FN (x, ptr[i]); |
| return x; |
| } |
| |
| #define N 128 |
| #define HALF (N / 2) |
| |
| int |
| main (void) |
| { |
| check_vect (); |
| |
| TYPE a[N]; |
| |
| for (int i = 0; i < N; ++i) |
| a[i] = -i; |
| |
| if (test (1, a, 1) != 0) |
| __builtin_abort (); |
| if (test (1, a, 64) != -63) |
| __builtin_abort (); |
| if (test (1, a, 65) != -64) |
| __builtin_abort (); |
| if (test (1, a, 66) != -65) |
| __builtin_abort (); |
| if (test (1, a, 67) != -66) |
| __builtin_abort (); |
| if (test (1, a, 128) != -127) |
| __builtin_abort (); |
| if (test (-127, a, 128) != -127) |
| __builtin_abort (); |
| if (test (-128, a, 128) != -128) |
| __builtin_abort (); |
| |
| for (int i = 0; i < N; ++i) |
| a[i] = i; |
| |
| if (test (1, a, 4) != 0) |
| __builtin_abort (); |
| if (test (0, a, 4) != 0) |
| __builtin_abort (); |
| if (test (-1, a, 4) != -1) |
| __builtin_abort (); |
| |
| for (int i = 0; i < HALF; ++i) |
| { |
| a[i] = HALF - i; |
| a[HALF + i] = i; |
| } |
| |
| if (test (N, a, HALF - 16) != 17) |
| __builtin_abort (); |
| if (test (N, a, HALF - 2) != 3) |
| __builtin_abort (); |
| if (test (N, a, HALF - 1) != 2) |
| __builtin_abort (); |
| if (test (N, a, HALF) != 1) |
| __builtin_abort (); |
| if (test (N, a, HALF + 1) != 0) |
| __builtin_abort (); |
| if (test (N, a, HALF + 2) != 0) |
| __builtin_abort (); |
| if (test (N, a, HALF + 3) != 0) |
| __builtin_abort (); |
| if (test (N, a, HALF + 16) != 0) |
| __builtin_abort (); |
| |
| return 0; |
| } |
| |
| /* { dg-final { scan-tree-dump "Detected reduction" "vect" } } */ |
| /* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" { target vect_max_reduc } } } */ |
| |
| /* { dg-final { scan-tree-dump "Detected reduction" "vect" } } */ |
| /* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" { target vect_max_reduc } } } */ |