/* PR target/99563 */ /* { dg-do run { target avx } } */ /* { dg-options "-O2 -mavx -mno-vzeroupper" } */ #include "avx-check.h" #include __attribute__((noipa)) float compute_generic (void) { return 0.0f; } static inline __attribute__((always_inline)) float compute_avx (unsigned long block_count) { __m128d mm_res = _mm_set1_pd (256.0); float res = (float) (_mm_cvtsd_f64 (mm_res) / (double) block_count); _mm256_zeroupper (); return res; } __attribute__((noipa)) float compute (unsigned long block_count) { if (block_count >= 64) return compute_avx (block_count); else return compute_generic (); } static void avx_test (void) { if (compute (128) != 2.0f || compute (32) != 0.0f) abort (); }