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