/* { dg-do run } */ /* { dg-require-effective-target avx512er } */ /* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx512er" } */ #include "avx512er-check.h" #define MAX 1000 #define EPS 0.00001 __attribute__ ((noinline, optimize (0))) void static compute_rcp_ref (float *a, float *b, float *r) { for (int i = 0; i < MAX; i++) r[i] = a[i] / b[i]; } __attribute__ ((noinline)) void static compute_rcp_exp (float *a, float *b, float *r) { for (int i = 0; i < MAX; i++) r[i] = a[i] / b[i]; } void static avx512er_test (void) { float a[MAX]; float b[MAX]; float ref[MAX]; float exp[MAX]; for (int i = 0; i < MAX; i++) { a[i] = 179.345 - 6.5645 * i; b[i] = 8765.987 - 8.6756 * i; } compute_rcp_ref (a, b, ref); compute_rcp_exp (a, b, exp); for (int i = 0; i < MAX; i++) { float rel_err = (ref[i] - exp[i]) / ref[i]; rel_err = rel_err > 0.0 ? rel_err : -rel_err; if (rel_err > EPS) abort (); } }