1  /* { dg-do compile { target { ! ia32 } } } */
       2  /* { dg-options "-O2 -mavx512vl" } */
       3  /* { dg-final { scan-assembler-times "vpord\[^\n\r\]*ymm16" 1 } } */
       4  /* { dg-final { scan-assembler-times "vpord\[^\n\r\]*xmm16" 1 } } */
       5  /* { dg-final { scan-assembler-times "vporq\[^\n\r\]*ymm16" 1 } } */
       6  /* { dg-final { scan-assembler-times "vporq\[^\n\r\]*xmm16" 1 } } */
       7  /* { dg-final { scan-assembler-times "vpxord\[^\n\r\]*ymm16" 1 } } */
       8  /* { dg-final { scan-assembler-times "vpxord\[^\n\r\]*xmm16" 1 } } */
       9  /* { dg-final { scan-assembler-times "vpxorq\[^\n\r\]*ymm16" 1 } } */
      10  /* { dg-final { scan-assembler-times "vpxorq\[^\n\r\]*xmm16" 1 } } */
      11  
      12  #include <immintrin.h>
      13  
      14  __m256i
      15  foo1 (__m256i x, __m256i y)
      16  {
      17    register __m256i z __asm ("xmm16") = y;
      18    asm volatile ("" : "+v" (z));
      19    return _mm256_or_epi32 (x, z);
      20  }
      21  
      22  __m256i
      23  foo2 (__m256i x, __m256i y)
      24  {
      25    register __m256i z __asm ("xmm16") = y;
      26    asm volatile ("" : "+v" (z));
      27    return _mm256_xor_epi32 (x, z);
      28  }
      29  
      30  __m128i
      31  foo3 (__m128i x, __m128i y)
      32  {
      33    register __m128i z __asm ("xmm16") = y;
      34    asm volatile ("" : "+v" (z));
      35    return _mm_or_epi32 (x, z);
      36  }
      37  
      38  __m128i
      39  foo4 (__m128i x, __m128i y)
      40  {
      41    register __m128i z __asm ("xmm16") = y;
      42    asm volatile ("" : "+v" (z));
      43    return _mm_xor_epi32 (x, z);
      44  }
      45  
      46  __m256i
      47  foo5 (__m256i x, __m256i y)
      48  {
      49    register __m256i z __asm ("xmm16") = y;
      50    asm volatile ("" : "+v" (z));
      51    return _mm256_or_epi64 (x, z);
      52  }
      53  
      54  __m256i
      55  foo6 (__m256i x, __m256i y)
      56  {
      57    register __m256i z __asm ("xmm16") = y;
      58    asm volatile ("" : "+v" (z));
      59    return _mm256_xor_epi64 (x, z);
      60  }
      61  
      62  __m128i
      63  foo7 (__m128i x, __m128i y)
      64  {
      65    register __m128i z __asm ("xmm16") = y;
      66    asm volatile ("" : "+v" (z));
      67    return _mm_or_epi64 (x, z);
      68  }
      69  
      70  __m128i
      71  foo8 (__m128i x, __m128i y)
      72  {
      73    register __m128i z __asm ("xmm16") = y;
      74    asm volatile ("" : "+v" (z));
      75    return _mm_xor_epi64 (x, z);
      76  }