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
foo1(__m256i x,__m256i y)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
foo2(__m256i x,__m256i y)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
foo3(__m128i x,__m128i y)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
foo4(__m128i x,__m128i y)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
foo5(__m256i x,__m256i y)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
foo6(__m256i x,__m256i y)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
foo7(__m128i x,__m128i y)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
foo8(__m128i x,__m128i y)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 }
77