llvm.org GIT mirror llvm / 6b892ee
[AVX512] ISD::MUL v2i64/v4i64 should only be legal if DQI and VLX features are enabled. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@266554 91177308-0d34-0410-b5e6-96231b3b80d8 Craig Topper 4 years ago
2 changed file(s) with 126 addition(s) and 2 deletion(s). Raw diff Collapse all Expand all
14381438 } // Subtarget.hasCDI()
14391439
14401440 if (Subtarget.hasDQI()) {
1441 setOperationAction(ISD::MUL, MVT::v2i64, Legal);
1442 setOperationAction(ISD::MUL, MVT::v4i64, Legal);
1441 if (Subtarget.hasVLX()) {
1442 setOperationAction(ISD::MUL, MVT::v2i64, Legal);
1443 setOperationAction(ISD::MUL, MVT::v4i64, Legal);
1444 }
14431445 setOperationAction(ISD::MUL, MVT::v8i64, Legal);
14441446 }
14451447 // Custom lower several nodes.
139139 ret <8 x i64>%z
140140 }
141141
142 define <4 x i64> @imulq256(<4 x i64> %y, <4 x i64> %x) {
143 ; AVX512F-LABEL: imulq256:
144 ; AVX512F: ## BB#0:
145 ; AVX512F-NEXT: vpmuludq %ymm0, %ymm1, %ymm2
146 ; AVX512F-NEXT: vpsrlq $32, %ymm0, %ymm3
147 ; AVX512F-NEXT: vpmuludq %ymm3, %ymm1, %ymm3
148 ; AVX512F-NEXT: vpsllq $32, %ymm3, %ymm3
149 ; AVX512F-NEXT: vpaddq %ymm3, %ymm2, %ymm2
150 ; AVX512F-NEXT: vpsrlq $32, %ymm1, %ymm1
151 ; AVX512F-NEXT: vpmuludq %ymm0, %ymm1, %ymm0
152 ; AVX512F-NEXT: vpsllq $32, %ymm0, %ymm0
153 ; AVX512F-NEXT: vpaddq %ymm0, %ymm2, %ymm0
154 ; AVX512F-NEXT: retq
155 ;
156 ; AVX512VL-LABEL: imulq256:
157 ; AVX512VL: ## BB#0:
158 ; AVX512VL-NEXT: vpmuludq %ymm0, %ymm1, %ymm2
159 ; AVX512VL-NEXT: vpsrlq $32, %ymm0, %ymm3
160 ; AVX512VL-NEXT: vpmuludq %ymm3, %ymm1, %ymm3
161 ; AVX512VL-NEXT: vpsllq $32, %ymm3, %ymm3
162 ; AVX512VL-NEXT: vpaddq %ymm3, %ymm2, %ymm2
163 ; AVX512VL-NEXT: vpsrlq $32, %ymm1, %ymm1
164 ; AVX512VL-NEXT: vpmuludq %ymm0, %ymm1, %ymm0
165 ; AVX512VL-NEXT: vpsllq $32, %ymm0, %ymm0
166 ; AVX512VL-NEXT: vpaddq %ymm0, %ymm2, %ymm0
167 ; AVX512VL-NEXT: retq
168 ;
169 ; AVX512BW-LABEL: imulq256:
170 ; AVX512BW: ## BB#0:
171 ; AVX512BW-NEXT: vpmuludq %ymm0, %ymm1, %ymm2
172 ; AVX512BW-NEXT: vpsrlq $32, %ymm0, %ymm3
173 ; AVX512BW-NEXT: vpmuludq %ymm3, %ymm1, %ymm3
174 ; AVX512BW-NEXT: vpsllq $32, %ymm3, %ymm3
175 ; AVX512BW-NEXT: vpaddq %ymm3, %ymm2, %ymm2
176 ; AVX512BW-NEXT: vpsrlq $32, %ymm1, %ymm1
177 ; AVX512BW-NEXT: vpmuludq %ymm0, %ymm1, %ymm0
178 ; AVX512BW-NEXT: vpsllq $32, %ymm0, %ymm0
179 ; AVX512BW-NEXT: vpaddq %ymm0, %ymm2, %ymm0
180 ; AVX512BW-NEXT: retq
181 ;
182 ; AVX512DQ-LABEL: imulq256:
183 ; AVX512DQ: ## BB#0:
184 ; AVX512DQ-NEXT: vpmuludq %ymm0, %ymm1, %ymm2
185 ; AVX512DQ-NEXT: vpsrlq $32, %ymm0, %ymm3
186 ; AVX512DQ-NEXT: vpmuludq %ymm3, %ymm1, %ymm3
187 ; AVX512DQ-NEXT: vpsllq $32, %ymm3, %ymm3
188 ; AVX512DQ-NEXT: vpaddq %ymm3, %ymm2, %ymm2
189 ; AVX512DQ-NEXT: vpsrlq $32, %ymm1, %ymm1
190 ; AVX512DQ-NEXT: vpmuludq %ymm0, %ymm1, %ymm0
191 ; AVX512DQ-NEXT: vpsllq $32, %ymm0, %ymm0
192 ; AVX512DQ-NEXT: vpaddq %ymm0, %ymm2, %ymm0
193 ; AVX512DQ-NEXT: retq
194 ;
195 ; SKX-LABEL: imulq256:
196 ; SKX: ## BB#0:
197 ; SKX-NEXT: vpmullq %ymm0, %ymm1, %ymm0
198 ; SKX-NEXT: retq
199 %z = mul <4 x i64>%x, %y
200 ret <4 x i64>%z
201 }
202
203 define <2 x i64> @imulq128(<2 x i64> %y, <2 x i64> %x) {
204 ; AVX512F-LABEL: imulq128:
205 ; AVX512F: ## BB#0:
206 ; AVX512F-NEXT: vpmuludq %xmm0, %xmm1, %xmm2
207 ; AVX512F-NEXT: vpsrlq $32, %xmm0, %xmm3
208 ; AVX512F-NEXT: vpmuludq %xmm3, %xmm1, %xmm3
209 ; AVX512F-NEXT: vpsllq $32, %xmm3, %xmm3
210 ; AVX512F-NEXT: vpaddq %xmm3, %xmm2, %xmm2
211 ; AVX512F-NEXT: vpsrlq $32, %xmm1, %xmm1
212 ; AVX512F-NEXT: vpmuludq %xmm0, %xmm1, %xmm0
213 ; AVX512F-NEXT: vpsllq $32, %xmm0, %xmm0
214 ; AVX512F-NEXT: vpaddq %xmm0, %xmm2, %xmm0
215 ; AVX512F-NEXT: retq
216 ;
217 ; AVX512VL-LABEL: imulq128:
218 ; AVX512VL: ## BB#0:
219 ; AVX512VL-NEXT: vpmuludq %xmm0, %xmm1, %xmm2
220 ; AVX512VL-NEXT: vpsrlq $32, %xmm0, %xmm3
221 ; AVX512VL-NEXT: vpmuludq %xmm3, %xmm1, %xmm3
222 ; AVX512VL-NEXT: vpsllq $32, %xmm3, %xmm3
223 ; AVX512VL-NEXT: vpaddq %xmm3, %xmm2, %xmm2
224 ; AVX512VL-NEXT: vpsrlq $32, %xmm1, %xmm1
225 ; AVX512VL-NEXT: vpmuludq %xmm0, %xmm1, %xmm0
226 ; AVX512VL-NEXT: vpsllq $32, %xmm0, %xmm0
227 ; AVX512VL-NEXT: vpaddq %xmm0, %xmm2, %xmm0
228 ; AVX512VL-NEXT: retq
229 ;
230 ; AVX512BW-LABEL: imulq128:
231 ; AVX512BW: ## BB#0:
232 ; AVX512BW-NEXT: vpmuludq %xmm0, %xmm1, %xmm2
233 ; AVX512BW-NEXT: vpsrlq $32, %xmm0, %xmm3
234 ; AVX512BW-NEXT: vpmuludq %xmm3, %xmm1, %xmm3
235 ; AVX512BW-NEXT: vpsllq $32, %xmm3, %xmm3
236 ; AVX512BW-NEXT: vpaddq %xmm3, %xmm2, %xmm2
237 ; AVX512BW-NEXT: vpsrlq $32, %xmm1, %xmm1
238 ; AVX512BW-NEXT: vpmuludq %xmm0, %xmm1, %xmm0
239 ; AVX512BW-NEXT: vpsllq $32, %xmm0, %xmm0
240 ; AVX512BW-NEXT: vpaddq %xmm0, %xmm2, %xmm0
241 ; AVX512BW-NEXT: retq
242 ;
243 ; AVX512DQ-LABEL: imulq128:
244 ; AVX512DQ: ## BB#0:
245 ; AVX512DQ-NEXT: vpmuludq %xmm0, %xmm1, %xmm2
246 ; AVX512DQ-NEXT: vpsrlq $32, %xmm0, %xmm3
247 ; AVX512DQ-NEXT: vpmuludq %xmm3, %xmm1, %xmm3
248 ; AVX512DQ-NEXT: vpsllq $32, %xmm3, %xmm3
249 ; AVX512DQ-NEXT: vpaddq %xmm3, %xmm2, %xmm2
250 ; AVX512DQ-NEXT: vpsrlq $32, %xmm1, %xmm1
251 ; AVX512DQ-NEXT: vpmuludq %xmm0, %xmm1, %xmm0
252 ; AVX512DQ-NEXT: vpsllq $32, %xmm0, %xmm0
253 ; AVX512DQ-NEXT: vpaddq %xmm0, %xmm2, %xmm0
254 ; AVX512DQ-NEXT: retq
255 ;
256 ; SKX-LABEL: imulq128:
257 ; SKX: ## BB#0:
258 ; SKX-NEXT: vpmullq %xmm0, %xmm1, %xmm0
259 ; SKX-NEXT: retq
260 %z = mul <2 x i64>%x, %y
261 ret <2 x i64>%z
262 }
263
142264 define <8 x double> @mulpd512(<8 x double> %y, <8 x double> %x) {
143265 ; CHECK-LABEL: mulpd512:
144266 ; CHECK: ## BB#0: ## %entry