/* { dg-do run } */ /* { dg-options "-O2 -ffast-math -mfpmath=sse -mavx2 -ftree-vectorize" } */ /* { dg-require-effective-target avx2 } */ #include "avx2-check.h" extern void abort (void); int l; static void __attribute__((noclone,noinline)) test1 (double *in1, double *in2, double *out, int l1, int l2, int *n) { double sum; int na = n[0]; int nb = n[1]; int i; _Bool ic, jc; jc = (l > na) && (l > nb); for (int i = 0; i < l2; i++) { ic = (i <= na) && (i <= nb); sum = 0; if (ic && jc) sum = in1[i] + in2[i]; out[i] = sum; } } static void avx2_test (void) { double in1[40], in2[40], out[40], sum; int n[2],l1,l2,i,na,nb; _Bool ic, jc; l = 0; l1 = 8; l2 = 40; n[0] = 14; n[1] = 13; for (i = 0; i < l2; i++) { in1[i] = i; in2[i] = i; out[i] = 0; } test1 (in1, in2, out, l1, l2, n); na = n[0]; nb = n[1]; jc = (l > na) && (l > nb); for (int i = 0; i < l2; i++) { ic = (i <= na) && (i <= nb); sum = 0; if (ic && jc) sum = in1[i] + in2[i]; if (out[i] != sum) abort (); } }