1 /* PR target/77476 */
2 /* { dg-do run } */
3 /* { dg-options "-O2 -mavx512f" } */
4 /* { dg-require-effective-target avx512f } */
5 
6 #ifndef PR77476_TEST
7 #include "avx512f-check.h"
8 #define PR77476_TEST avx512f_test
9 #endif
10 
11 unsigned short s;
12 unsigned int i;
13 unsigned long long l;
14 
15 void
f1(void)16 f1 (void)
17 {
18   unsigned char a = 0xff;
19   asm volatile ("" : "+Yk" (a));
20   s = a;
21 }
22 
23 void
f2(void)24 f2 (void)
25 {
26   unsigned char a = 0xff;
27   asm volatile ("" : "+Yk" (a));
28   i = a;
29 }
30 
31 void
f3(void)32 f3 (void)
33 {
34   unsigned char a = 0xff;
35   asm volatile ("" : "+Yk" (a));
36   l = a;
37 }
38 
39 void
f4(void)40 f4 (void)
41 {
42   unsigned short a = 0xffff;
43   asm volatile ("" : "+Yk" (a));
44   i = a;
45 }
46 
47 void
f5(void)48 f5 (void)
49 {
50   unsigned short a = 0xffff;
51   asm volatile ("" : "+Yk" (a));
52   l = a;
53 }
54 
55 #ifdef __AVX512BW__
56 void
f6(void)57 f6 (void)
58 {
59   unsigned int a = 0xffffffff;
60   asm volatile ("" : "+Yk" (a));
61   l = a;
62 }
63 #endif
64 
65 static void
PR77476_TEST()66 PR77476_TEST ()
67 {
68   f1 (); if (s != 0xff) __builtin_abort (); s = 0;
69   f2 (); if (i != 0xff) __builtin_abort (); i = 0;
70   f3 (); if (l != 0xff) __builtin_abort (); l = 0;
71   f4 (); if (i != 0xffff) __builtin_abort (); i = 0;
72   f5 (); if (l != 0xffff) __builtin_abort (); l = 0;
73 #ifdef __AVX512BW__
74   f6 (); if (l != 0xffffffff) __builtin_abort (); l = 0;
75 #endif
76 }
77