blob: 3d5f843a9db377e834886ae145c6346596ceb7c8 [file] [log] [blame]
#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 } } } */