https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84786
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Simplified testcase for the testsuite: /* PR target/84786 */ /* { dg-do run } */ /* { dg-options "-mavx512f -mno-avx512vl -O2" } */ /* { dg-require-effective-target avx512f } */ #include "avx512f-check.h" typedef double V __attribute__((vector_size (16))); __attribute__((noipa)) V foo (V x, double y) { register double z __asm ("xmm18"); asm volatile ("" : "=v" (z) : "0" (y)); x[1] = z; return x; } static void avx512f_test (void) { V a = foo ((V) { 1.0, 2.0 }, 3.0); if (a[0] != 1.0 || a[1] != 3.0) abort (); } Now, the hard part is look around for similar issues (I've done it already at some point, but this case apparently went unnoticed).