Viewing file: vect-fmin-3.c (1.79 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#include "tree-vect.h"
void __attribute__((noipa)) test (double x0, double x1, double *restrict res, double *restrict ptr, int n) { for (int i = 0; i < n; i += 2) { x0 = __builtin_fmin (x0, ptr[i + 0]); x1 = __builtin_fmin (x1, ptr[i + 1]); } res[0] = x0; res[1] = x1; }
#define N 128 #define HALF (N / 2)
int main (void) { check_vect ();
double res[2], a[N];
for (int i = 0; i < N; i += 2) { a[i] = i < HALF ? HALF - i : 0; a[i + 1] = -i / 8; }
test (N, N, res, a, 2); if (res[0] != HALF || res[1] != 0) __builtin_abort ();
test (N, N, res, a, 6); if (res[0] != HALF - 4 || res[1] != 0) __builtin_abort ();
test (N, N, res, a, 8); if (res[0] != HALF - 6 || res[1] != 0) __builtin_abort ();
test (N, N, res, a, 10); if (res[0] != HALF - 8 || res[1] != -1) __builtin_abort ();
test (N, N, res, a, HALF - 2); if (res[0] != 4 || res[1] != -HALF / 8 + 1) __builtin_abort ();
test (N, N, res, a, HALF); if (res[0] != 2 || res[1] != -HALF / 8 + 1) __builtin_abort ();
test (N, N, res, a, HALF + 2); if (res[0] != 0 || res[1] != -HALF / 8) __builtin_abort ();
test (N, N, res, a, HALF + 8); if (res[0] != 0 || res[1] != -HALF / 8) __builtin_abort ();
test (N, N, res, a, HALF + 10); if (res[0] != 0 || res[1] != -HALF / 8 - 1) __builtin_abort ();
test (N, N, res, a, N); if (res[0] != 0 || res[1] != -N / 8 + 1) __builtin_abort ();
test (-1, N, res, a, N); if (res[0] != -1 || res[1] != -N / 8 + 1) __builtin_abort ();
test (-1, -N / 8, res, a, N); if (res[0] != -1 || res[1] != -N / 8) __builtin_abort ();
return 0; }
/* { dg-final { scan-tree-dump "Detected reduction" "vect" } } */ /* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" { target vect_max_reduc } } } */
|