Viewing file: vect-fmin-1.c (1.83 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#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 } } } */
|