152
|
1 /* PR target/92658 */
|
|
2 /* { dg-do compile } */
|
|
3 /* { dg-options "-O2 -ftree-vectorize -mavx2" } */
|
|
4
|
|
5 typedef unsigned char v32qi __attribute__((vector_size (32)));
|
|
6 typedef unsigned short v16hi __attribute__((vector_size (32)));
|
|
7 typedef unsigned int v8si __attribute__((vector_size (32)));
|
|
8 typedef unsigned long long v4di __attribute__((vector_size (32)));
|
|
9
|
|
10 void
|
|
11 foo_u8_u16 (v16hi * dst, v32qi * __restrict src)
|
|
12 {
|
|
13 unsigned short tem[16];
|
|
14 tem[0] = (*src)[0];
|
|
15 tem[1] = (*src)[1];
|
|
16 tem[2] = (*src)[2];
|
|
17 tem[3] = (*src)[3];
|
|
18 tem[4] = (*src)[4];
|
|
19 tem[5] = (*src)[5];
|
|
20 tem[6] = (*src)[6];
|
|
21 tem[7] = (*src)[7];
|
|
22 tem[8] = (*src)[8];
|
|
23 tem[9] = (*src)[9];
|
|
24 tem[10] = (*src)[10];
|
|
25 tem[11] = (*src)[11];
|
|
26 tem[12] = (*src)[12];
|
|
27 tem[13] = (*src)[13];
|
|
28 tem[14] = (*src)[14];
|
|
29 tem[15] = (*src)[15];
|
|
30 dst[0] = *(v16hi *) tem;
|
|
31 }
|
|
32
|
|
33 void
|
|
34 bar_u8_u16 (v16hi * dst, v32qi src)
|
|
35 {
|
|
36 unsigned short tem[16];
|
|
37 tem[0] = src[0];
|
|
38 tem[1] = src[1];
|
|
39 tem[2] = src[2];
|
|
40 tem[3] = src[3];
|
|
41 tem[4] = src[4];
|
|
42 tem[5] = src[5];
|
|
43 tem[6] = src[6];
|
|
44 tem[7] = src[7];
|
|
45 tem[8] = src[8];
|
|
46 tem[9] = src[9];
|
|
47 tem[10] = src[10];
|
|
48 tem[11] = src[11];
|
|
49 tem[12] = src[12];
|
|
50 tem[13] = src[13];
|
|
51 tem[14] = src[14];
|
|
52 tem[15] = src[15];
|
|
53 dst[0] = *(v16hi *) tem;
|
|
54 }
|
|
55
|
|
56 /* { dg-final { scan-assembler-times "pmovzxbw" 2 } } */
|
|
57
|
|
58 void
|
|
59 foo_u8_u32 (v8si * dst, v32qi * __restrict src)
|
|
60 {
|
|
61 unsigned int tem[8];
|
|
62 tem[0] = (*src)[0];
|
|
63 tem[1] = (*src)[1];
|
|
64 tem[2] = (*src)[2];
|
|
65 tem[3] = (*src)[3];
|
|
66 tem[4] = (*src)[4];
|
|
67 tem[5] = (*src)[5];
|
|
68 tem[6] = (*src)[6];
|
|
69 tem[7] = (*src)[7];
|
|
70 dst[0] = *(v8si *) tem;
|
|
71 }
|
|
72
|
|
73 void
|
|
74 bar_u8_u32 (v8si * dst, v32qi src)
|
|
75 {
|
|
76 unsigned int tem[8];
|
|
77 tem[0] = src[0];
|
|
78 tem[1] = src[1];
|
|
79 tem[2] = src[2];
|
|
80 tem[3] = src[3];
|
|
81 tem[4] = src[4];
|
|
82 tem[5] = src[5];
|
|
83 tem[6] = src[6];
|
|
84 tem[7] = src[7];
|
|
85 dst[0] = *(v8si *) tem;
|
|
86 }
|
|
87
|
|
88 /* { dg-final { scan-assembler-times "pmovzxbd" 2 } } */
|
|
89
|
|
90 void
|
|
91 foo_u8_u64 (v4di * dst, v32qi * __restrict src)
|
|
92 {
|
|
93 unsigned long long tem[4];
|
|
94 tem[0] = (*src)[0];
|
|
95 tem[1] = (*src)[1];
|
|
96 tem[2] = (*src)[2];
|
|
97 tem[3] = (*src)[3];
|
|
98 dst[0] = *(v4di *) tem;
|
|
99 }
|
|
100
|
|
101 void
|
|
102 bar_u8_u64 (v4di * dst, v32qi src)
|
|
103 {
|
|
104 unsigned long long tem[4];
|
|
105 tem[0] = src[0];
|
|
106 tem[1] = src[1];
|
|
107 tem[2] = src[2];
|
|
108 tem[3] = src[3];
|
|
109 dst[0] = *(v4di *) tem;
|
|
110 }
|
|
111
|
|
112 /* { dg-final { scan-assembler-times "pmovzxbq" 2 { xfail *-*-* } } } */
|
|
113
|
|
114 void
|
|
115 foo_u16_u32 (v8si * dst, v16hi * __restrict src)
|
|
116 {
|
|
117 unsigned int tem[8];
|
|
118 tem[0] = (*src)[0];
|
|
119 tem[1] = (*src)[1];
|
|
120 tem[2] = (*src)[2];
|
|
121 tem[3] = (*src)[3];
|
|
122 tem[4] = (*src)[4];
|
|
123 tem[5] = (*src)[5];
|
|
124 tem[6] = (*src)[6];
|
|
125 tem[7] = (*src)[7];
|
|
126 dst[0] = *(v8si *) tem;
|
|
127 }
|
|
128
|
|
129 void
|
|
130 bar_u16_u32 (v8si * dst, v16hi src)
|
|
131 {
|
|
132 unsigned int tem[8];
|
|
133 tem[0] = src[0];
|
|
134 tem[1] = src[1];
|
|
135 tem[2] = src[2];
|
|
136 tem[3] = src[3];
|
|
137 tem[4] = src[4];
|
|
138 tem[5] = src[5];
|
|
139 tem[6] = src[6];
|
|
140 tem[7] = src[7];
|
|
141 dst[0] = *(v8si *) tem;
|
|
142 }
|
|
143
|
|
144 /* { dg-final { scan-assembler-times "pmovzxwd" 2 } } */
|
|
145
|
|
146 void
|
|
147 foo_u16_u64 (v4di * dst, v16hi * __restrict src)
|
|
148 {
|
|
149 unsigned long long tem[4];
|
|
150 tem[0] = (*src)[0];
|
|
151 tem[1] = (*src)[1];
|
|
152 tem[2] = (*src)[2];
|
|
153 tem[3] = (*src)[3];
|
|
154 dst[0] = *(v4di *) tem;
|
|
155 }
|
|
156
|
|
157 void
|
|
158 bar_u16_u64 (v4di * dst, v16hi src)
|
|
159 {
|
|
160 unsigned long long tem[4];
|
|
161 tem[0] = src[0];
|
|
162 tem[1] = src[1];
|
|
163 tem[2] = src[2];
|
|
164 tem[3] = src[3];
|
|
165 dst[0] = *(v4di *) tem;
|
|
166 }
|
|
167
|
|
168 /* { dg-final { scan-assembler-times "pmovzxwq" 2 } } */
|
|
169
|
|
170 void
|
|
171 foo_u32_u64 (v4di * dst, v8si * __restrict src)
|
|
172 {
|
|
173 unsigned long long tem[4];
|
|
174 tem[0] = (*src)[0];
|
|
175 tem[1] = (*src)[1];
|
|
176 tem[2] = (*src)[2];
|
|
177 tem[3] = (*src)[3];
|
|
178 dst[0] = *(v4di *) tem;
|
|
179 }
|
|
180
|
|
181 void
|
|
182 bar_u32_u64 (v4di * dst, v8si src)
|
|
183 {
|
|
184 unsigned long long tem[4];
|
|
185 tem[0] = src[0];
|
|
186 tem[1] = src[1];
|
|
187 tem[2] = src[2];
|
|
188 tem[3] = src[3];
|
|
189 dst[0] = *(v4di *) tem;
|
|
190 }
|
|
191
|
|
192 /* { dg-final { scan-assembler-times "pmovzxdq" 2 } } */
|