2018-03-08 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / avx512vl-pack-2.c
blob05820065e9fb90c5a2ace5d662a2a11170efae80
1 /* { dg-do compile { target { ! ia32 } } } */
2 /* { dg-options "-O2 -mavx512vl -mno-avx512bw" } */
4 #include <x86intrin.h>
6 __m128i
7 f1 (__m128i a, __m128i b)
9 register __m128i c __asm ("xmm16") = a;
10 asm volatile ("" : "+v" (c));
11 c = _mm_packs_epi16 (c, b);
12 asm volatile ("" : "+v" (c));
13 return c;
16 /* { dg-final { scan-assembler-times "vpacksswb\[^\n\r\]*xmm\[0-9\]" 1 } } */
17 /* { dg-final { scan-assembler-not "vpacksswb\[^\n\r\]*xmm16" } } */
19 __m128i
20 f2 (__m128i a, __m128i b)
22 register __m128i c __asm ("xmm16") = a;
23 asm volatile ("" : "+v" (c));
24 c = _mm_packs_epi32 (c, b);
25 asm volatile ("" : "+v" (c));
26 return c;
29 /* { dg-final { scan-assembler-times "vpackssdw\[^\n\r\]*xmm\[0-9\]" 1 } } */
30 /* { dg-final { scan-assembler-not "vpackssdw\[^\n\r\]*xmm16" } } */
32 __m128i
33 f3 (__m128i a, __m128i b)
35 register __m128i c __asm ("xmm16") = a;
36 asm volatile ("" : "+v" (c));
37 c = _mm_packus_epi16 (c, b);
38 asm volatile ("" : "+v" (c));
39 return c;
42 /* { dg-final { scan-assembler-times "vpackuswb\[^\n\r\]*xmm\[0-9\]" 1 } } */
43 /* { dg-final { scan-assembler-not "vpackuswb\[^\n\r\]*xmm16" } } */
45 __m128i
46 f4 (__m128i a, __m128i b)
48 register __m128i c __asm ("xmm16") = a;
49 asm volatile ("" : "+v" (c));
50 c = _mm_packus_epi32 (c, b);
51 asm volatile ("" : "+v" (c));
52 return c;
55 /* { dg-final { scan-assembler-times "vpackusdw\[^\n\r\]*xmm\[0-9\]" 1 } } */
56 /* { dg-final { scan-assembler-not "vpackusdw\[^\n\r\]*xmm16" } } */
58 __m256i
59 f5 (__m256i a, __m256i b)
61 register __m256i c __asm ("xmm16") = a;
62 asm volatile ("" : "+v" (c));
63 c = _mm256_packs_epi16 (c, b);
64 asm volatile ("" : "+v" (c));
65 return c;
68 /* { dg-final { scan-assembler-times "vpacksswb\[^\n\r\]*ymm\[0-9\]" 1 } } */
69 /* { dg-final { scan-assembler-not "vpacksswb\[^\n\r\]*ymm16" } } */
71 __m256i
72 f6 (__m256i a, __m256i b)
74 register __m256i c __asm ("xmm16") = a;
75 asm volatile ("" : "+v" (c));
76 c = _mm256_packs_epi32 (c, b);
77 asm volatile ("" : "+v" (c));
78 return c;
81 /* { dg-final { scan-assembler-times "vpackssdw\[^\n\r\]*ymm\[0-9\]" 1 } } */
82 /* { dg-final { scan-assembler-not "vpackssdw\[^\n\r\]*ymm16" } } */
84 __m256i
85 f7 (__m256i a, __m256i b)
87 register __m256i c __asm ("xmm16") = a;
88 asm volatile ("" : "+v" (c));
89 c = _mm256_packus_epi16 (c, b);
90 asm volatile ("" : "+v" (c));
91 return c;
94 /* { dg-final { scan-assembler-times "vpackuswb\[^\n\r\]*ymm\[0-9\]" 1 } } */
95 /* { dg-final { scan-assembler-not "vpackuswb\[^\n\r\]*ymm16" } } */
97 __m256i
98 f8 (__m256i a, __m256i b)
100 register __m256i c __asm ("xmm16") = a;
101 asm volatile ("" : "+v" (c));
102 c = _mm256_packus_epi32 (c, b);
103 asm volatile ("" : "+v" (c));
104 return c;
107 /* { dg-final { scan-assembler-times "vpackusdw\[^\n\r\]*ymm\[0-9\]" 1 } } */
108 /* { dg-final { scan-assembler-not "vpackusdw\[^\n\r\]*ymm16" } } */