/* Test the correct application of masking to autovectorized math function calls. Test is currently set to xfail pending the release of the relevant lmvec support. */ /* { dg-do compile { target { aarch64*-*-* } } } */ /* { dg-additional-options "-march=armv8.2-a+sve -fdump-tree-ifcvt-raw -Ofast" { target { aarch64*-*-* } } } */ #include <math.h> const int N = 20; const float lim = 101.0; const float cst = -1.0; float tot = 0.0; float b[20]; float a[20] = { [0 ... 9] = 1.7014118e39, /* If branch. */ [10 ... 19] = 100.0 }; /* Else branch. */ int main (void) { #pragma omp simd for (int i = 0; i < N; i += 1) { if (a[i] > lim) b[i] = cst; else b[i] = expf (a[i]); tot += b[i]; } return (0); } /* { dg-final { scan-tree-dump-not { gimple_call <expf, _2, _1>} ifcvt { xfail { aarch64*-*-* } } } } */ /* { dg-final { scan-tree-dump { gimple_call <.MASK_CALL, _2, expf, _1, _30>} ifcvt { xfail { aarch64*-*-* } } } } */