| #include "tree-vect.h" |
| |
| #ifndef TYPE |
| #define TYPE float |
| #define FN __builtin_fmaxf |
| #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 (-60, 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] = i; |
| a[HALF + i] = HALF - i; |
| } |
| |
| if (test (0, a, HALF - 16) != HALF - 17) |
| __builtin_abort (); |
| if (test (0, a, HALF - 2) != HALF - 3) |
| __builtin_abort (); |
| if (test (0, a, HALF - 1) != HALF - 2) |
| __builtin_abort (); |
| if (test (0, a, HALF) != HALF - 1) |
| __builtin_abort (); |
| if (test (0, a, HALF + 1) != HALF) |
| __builtin_abort (); |
| if (test (0, a, HALF + 2) != HALF) |
| __builtin_abort (); |
| if (test (0, a, HALF + 3) != HALF) |
| __builtin_abort (); |
| if (test (0, a, HALF + 16) != HALF) |
| __builtin_abort (); |
| |
| return 0; |
| } |
| |
| /* { dg-final { scan-tree-dump "Detected reduction" "vect" } } */ |
| /* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" { target vect_max_reduc } } } */ |