187 unsigned altLLVMIntrinsic,
const char *nameHint,
unsigned modifier,
190 mlir::Location loc = cgf.
getLoc(
expr->getExprLoc());
197 std::optional<llvm::APSInt> neonTypeConst = arg->getIntegerConstantExpr(ctx);
212 cir::VectorType vTy =
getNeonType(&cgf, neonType, loc, hasLegalHalfType,
213 false, allowBFloatArgsAndRet);
219 case NEON::BI__builtin_neon_splat_lane_v:
220 case NEON::BI__builtin_neon_splat_laneq_v:
221 case NEON::BI__builtin_neon_splatq_lane_v:
222 case NEON::BI__builtin_neon_splatq_laneq_v: {
223 uint64_t numElements = vTy.getSize();
224 if (builtinID == NEON::BI__builtin_neon_splatq_lane_v)
226 if (builtinID == NEON::BI__builtin_neon_splat_laneq_v)
231 case NEON::BI__builtin_neon_vpadd_v:
232 case NEON::BI__builtin_neon_vpaddq_v:
233 case NEON::BI__builtin_neon_vabs_v:
234 case NEON::BI__builtin_neon_vabsq_v:
235 case NEON::BI__builtin_neon_vadd_v:
236 case NEON::BI__builtin_neon_vaddq_v:
237 case NEON::BI__builtin_neon_vaddhn_v:
238 case NEON::BI__builtin_neon_vcale_v:
239 case NEON::BI__builtin_neon_vcaleq_v:
240 case NEON::BI__builtin_neon_vcalt_v:
241 case NEON::BI__builtin_neon_vcaltq_v:
242 case NEON::BI__builtin_neon_vcage_v:
243 case NEON::BI__builtin_neon_vcageq_v:
244 case NEON::BI__builtin_neon_vcagt_v:
245 case NEON::BI__builtin_neon_vcagtq_v:
247 std::string(
"unimplemented AArch64 builtin call: ") +
249 return mlir::Value{};
250 case NEON::BI__builtin_neon_vceqz_v:
251 case NEON::BI__builtin_neon_vceqzq_v:
253 vTy, cir::CmpOpKind::eq);
254 case NEON::BI__builtin_neon_vcgez_v:
255 case NEON::BI__builtin_neon_vcgezq_v:
256 case NEON::BI__builtin_neon_vclez_v:
257 case NEON::BI__builtin_neon_vclezq_v:
258 case NEON::BI__builtin_neon_vcgtz_v:
259 case NEON::BI__builtin_neon_vcgtzq_v:
260 case NEON::BI__builtin_neon_vcltz_v:
261 case NEON::BI__builtin_neon_vcltzq_v:
262 case NEON::BI__builtin_neon_vclz_v:
263 case NEON::BI__builtin_neon_vclzq_v:
264 case NEON::BI__builtin_neon_vcvt_f32_v:
265 case NEON::BI__builtin_neon_vcvtq_f32_v:
266 case NEON::BI__builtin_neon_vcvt_f16_s16:
267 case NEON::BI__builtin_neon_vcvt_f16_u16:
268 case NEON::BI__builtin_neon_vcvtq_f16_s16:
269 case NEON::BI__builtin_neon_vcvtq_f16_u16:
270 case NEON::BI__builtin_neon_vcvt_n_f16_s16:
271 case NEON::BI__builtin_neon_vcvt_n_f16_u16:
272 case NEON::BI__builtin_neon_vcvtq_n_f16_s16:
273 case NEON::BI__builtin_neon_vcvtq_n_f16_u16:
274 case NEON::BI__builtin_neon_vcvt_n_f32_v:
275 case NEON::BI__builtin_neon_vcvt_n_f64_v:
276 case NEON::BI__builtin_neon_vcvtq_n_f32_v:
277 case NEON::BI__builtin_neon_vcvtq_n_f64_v:
278 case NEON::BI__builtin_neon_vcvt_n_s16_f16:
279 case NEON::BI__builtin_neon_vcvt_n_s32_v:
280 case NEON::BI__builtin_neon_vcvt_n_u16_f16:
281 case NEON::BI__builtin_neon_vcvt_n_u32_v:
282 case NEON::BI__builtin_neon_vcvt_n_s64_v:
283 case NEON::BI__builtin_neon_vcvt_n_u64_v:
284 case NEON::BI__builtin_neon_vcvtq_n_s16_f16:
285 case NEON::BI__builtin_neon_vcvtq_n_s32_v:
286 case NEON::BI__builtin_neon_vcvtq_n_u16_f16:
287 case NEON::BI__builtin_neon_vcvtq_n_u32_v:
288 case NEON::BI__builtin_neon_vcvtq_n_s64_v:
289 case NEON::BI__builtin_neon_vcvtq_n_u64_v:
290 case NEON::BI__builtin_neon_vcvt_s32_v:
291 case NEON::BI__builtin_neon_vcvt_u32_v:
292 case NEON::BI__builtin_neon_vcvt_s64_v:
293 case NEON::BI__builtin_neon_vcvt_u64_v:
294 case NEON::BI__builtin_neon_vcvt_s16_f16:
295 case NEON::BI__builtin_neon_vcvt_u16_f16:
296 case NEON::BI__builtin_neon_vcvtq_s32_v:
297 case NEON::BI__builtin_neon_vcvtq_u32_v:
298 case NEON::BI__builtin_neon_vcvtq_s64_v:
299 case NEON::BI__builtin_neon_vcvtq_u64_v:
300 case NEON::BI__builtin_neon_vcvtq_s16_f16:
301 case NEON::BI__builtin_neon_vcvtq_u16_f16:
302 case NEON::BI__builtin_neon_vcvta_s16_f16:
303 case NEON::BI__builtin_neon_vcvta_s32_v:
304 case NEON::BI__builtin_neon_vcvta_s64_v:
305 case NEON::BI__builtin_neon_vcvta_u16_f16:
306 case NEON::BI__builtin_neon_vcvta_u32_v:
307 case NEON::BI__builtin_neon_vcvta_u64_v:
308 case NEON::BI__builtin_neon_vcvtaq_s16_f16:
309 case NEON::BI__builtin_neon_vcvtaq_s32_v:
310 case NEON::BI__builtin_neon_vcvtaq_s64_v:
311 case NEON::BI__builtin_neon_vcvtaq_u16_f16:
312 case NEON::BI__builtin_neon_vcvtaq_u32_v:
313 case NEON::BI__builtin_neon_vcvtaq_u64_v:
314 case NEON::BI__builtin_neon_vcvtn_s16_f16:
315 case NEON::BI__builtin_neon_vcvtn_s32_v:
316 case NEON::BI__builtin_neon_vcvtn_s64_v:
317 case NEON::BI__builtin_neon_vcvtn_u16_f16:
318 case NEON::BI__builtin_neon_vcvtn_u32_v:
319 case NEON::BI__builtin_neon_vcvtn_u64_v:
320 case NEON::BI__builtin_neon_vcvtnq_s16_f16:
321 case NEON::BI__builtin_neon_vcvtnq_s32_v:
322 case NEON::BI__builtin_neon_vcvtnq_s64_v:
323 case NEON::BI__builtin_neon_vcvtnq_u16_f16:
324 case NEON::BI__builtin_neon_vcvtnq_u32_v:
325 case NEON::BI__builtin_neon_vcvtnq_u64_v:
326 case NEON::BI__builtin_neon_vcvtp_s16_f16:
327 case NEON::BI__builtin_neon_vcvtp_s32_v:
328 case NEON::BI__builtin_neon_vcvtp_s64_v:
329 case NEON::BI__builtin_neon_vcvtp_u16_f16:
330 case NEON::BI__builtin_neon_vcvtp_u32_v:
331 case NEON::BI__builtin_neon_vcvtp_u64_v:
332 case NEON::BI__builtin_neon_vcvtpq_s16_f16:
333 case NEON::BI__builtin_neon_vcvtpq_s32_v:
334 case NEON::BI__builtin_neon_vcvtpq_s64_v:
335 case NEON::BI__builtin_neon_vcvtpq_u16_f16:
336 case NEON::BI__builtin_neon_vcvtpq_u32_v:
337 case NEON::BI__builtin_neon_vcvtpq_u64_v:
338 case NEON::BI__builtin_neon_vcvtm_s16_f16:
339 case NEON::BI__builtin_neon_vcvtm_s32_v:
340 case NEON::BI__builtin_neon_vcvtm_s64_v:
341 case NEON::BI__builtin_neon_vcvtm_u16_f16:
342 case NEON::BI__builtin_neon_vcvtm_u32_v:
343 case NEON::BI__builtin_neon_vcvtm_u64_v:
344 case NEON::BI__builtin_neon_vcvtmq_s16_f16:
345 case NEON::BI__builtin_neon_vcvtmq_s32_v:
346 case NEON::BI__builtin_neon_vcvtmq_s64_v:
347 case NEON::BI__builtin_neon_vcvtmq_u16_f16:
348 case NEON::BI__builtin_neon_vcvtmq_u32_v:
349 case NEON::BI__builtin_neon_vcvtmq_u64_v:
350 case NEON::BI__builtin_neon_vcvtx_f32_v:
351 case NEON::BI__builtin_neon_vext_v:
352 case NEON::BI__builtin_neon_vextq_v:
353 case NEON::BI__builtin_neon_vfma_v:
354 case NEON::BI__builtin_neon_vfmaq_v:
355 case NEON::BI__builtin_neon_vld1_v:
356 case NEON::BI__builtin_neon_vld1q_v:
357 case NEON::BI__builtin_neon_vld1_x2_v:
358 case NEON::BI__builtin_neon_vld1q_x2_v:
359 case NEON::BI__builtin_neon_vld1_x3_v:
360 case NEON::BI__builtin_neon_vld1q_x3_v:
361 case NEON::BI__builtin_neon_vld1_x4_v:
362 case NEON::BI__builtin_neon_vld1q_x4_v:
363 case NEON::BI__builtin_neon_vld2_v:
364 case NEON::BI__builtin_neon_vld2q_v:
365 case NEON::BI__builtin_neon_vld3_v:
366 case NEON::BI__builtin_neon_vld3q_v:
367 case NEON::BI__builtin_neon_vld4_v:
368 case NEON::BI__builtin_neon_vld4q_v:
369 case NEON::BI__builtin_neon_vld2_dup_v:
370 case NEON::BI__builtin_neon_vld2q_dup_v:
371 case NEON::BI__builtin_neon_vld3_dup_v:
372 case NEON::BI__builtin_neon_vld3q_dup_v:
373 case NEON::BI__builtin_neon_vld4_dup_v:
374 case NEON::BI__builtin_neon_vld4q_dup_v:
375 case NEON::BI__builtin_neon_vld1_dup_v:
376 case NEON::BI__builtin_neon_vld1q_dup_v:
377 case NEON::BI__builtin_neon_vld2_lane_v:
378 case NEON::BI__builtin_neon_vld2q_lane_v:
379 case NEON::BI__builtin_neon_vld3_lane_v:
380 case NEON::BI__builtin_neon_vld3q_lane_v:
381 case NEON::BI__builtin_neon_vld4_lane_v:
382 case NEON::BI__builtin_neon_vld4q_lane_v:
383 case NEON::BI__builtin_neon_vmovl_v:
384 case NEON::BI__builtin_neon_vmovn_v:
385 case NEON::BI__builtin_neon_vmull_v:
386 case NEON::BI__builtin_neon_vpadal_v:
387 case NEON::BI__builtin_neon_vpadalq_v:
388 case NEON::BI__builtin_neon_vpaddl_v:
389 case NEON::BI__builtin_neon_vpaddlq_v:
390 case NEON::BI__builtin_neon_vqdmlal_v:
391 case NEON::BI__builtin_neon_vqdmlsl_v:
392 case NEON::BI__builtin_neon_vqdmulhq_lane_v:
393 case NEON::BI__builtin_neon_vqdmulh_lane_v:
394 case NEON::BI__builtin_neon_vqrdmulhq_lane_v:
395 case NEON::BI__builtin_neon_vqrdmulh_lane_v:
396 case NEON::BI__builtin_neon_vqdmulhq_laneq_v:
397 case NEON::BI__builtin_neon_vqdmulh_laneq_v:
398 case NEON::BI__builtin_neon_vqrdmulhq_laneq_v:
399 case NEON::BI__builtin_neon_vqrdmulh_laneq_v:
400 case NEON::BI__builtin_neon_vqshl_n_v:
401 case NEON::BI__builtin_neon_vqshlq_n_v:
402 case NEON::BI__builtin_neon_vqshlu_n_v:
403 case NEON::BI__builtin_neon_vqshluq_n_v:
404 case NEON::BI__builtin_neon_vrecpe_v:
405 case NEON::BI__builtin_neon_vrecpeq_v:
406 case NEON::BI__builtin_neon_vrsqrte_v:
407 case NEON::BI__builtin_neon_vrsqrteq_v:
408 case NEON::BI__builtin_neon_vrndi_v:
409 case NEON::BI__builtin_neon_vrndiq_v:
410 case NEON::BI__builtin_neon_vrshr_n_v:
411 case NEON::BI__builtin_neon_vrshrq_n_v:
412 case NEON::BI__builtin_neon_vsha512hq_u64:
413 case NEON::BI__builtin_neon_vsha512h2q_u64:
414 case NEON::BI__builtin_neon_vsha512su0q_u64:
415 case NEON::BI__builtin_neon_vsha512su1q_u64:
416 case NEON::BI__builtin_neon_vshl_n_v:
417 case NEON::BI__builtin_neon_vshlq_n_v:
418 case NEON::BI__builtin_neon_vshll_n_v:
419 case NEON::BI__builtin_neon_vshrn_n_v:
420 case NEON::BI__builtin_neon_vshr_n_v:
421 case NEON::BI__builtin_neon_vshrq_n_v:
422 case NEON::BI__builtin_neon_vst1_v:
423 case NEON::BI__builtin_neon_vst1q_v:
424 case NEON::BI__builtin_neon_vst2_v:
425 case NEON::BI__builtin_neon_vst2q_v:
426 case NEON::BI__builtin_neon_vst3_v:
427 case NEON::BI__builtin_neon_vst3q_v:
428 case NEON::BI__builtin_neon_vst4_v:
429 case NEON::BI__builtin_neon_vst4q_v:
430 case NEON::BI__builtin_neon_vst2_lane_v:
431 case NEON::BI__builtin_neon_vst2q_lane_v:
432 case NEON::BI__builtin_neon_vst3_lane_v:
433 case NEON::BI__builtin_neon_vst3q_lane_v:
434 case NEON::BI__builtin_neon_vst4_lane_v:
435 case NEON::BI__builtin_neon_vst4q_lane_v:
436 case NEON::BI__builtin_neon_vsm3partw1q_u32:
437 case NEON::BI__builtin_neon_vsm3partw2q_u32:
438 case NEON::BI__builtin_neon_vsm3ss1q_u32:
439 case NEON::BI__builtin_neon_vsm4ekeyq_u32:
440 case NEON::BI__builtin_neon_vsm4eq_u32:
441 case NEON::BI__builtin_neon_vsm3tt1aq_u32:
442 case NEON::BI__builtin_neon_vsm3tt1bq_u32:
443 case NEON::BI__builtin_neon_vsm3tt2aq_u32:
444 case NEON::BI__builtin_neon_vsm3tt2bq_u32:
445 case NEON::BI__builtin_neon_vst1_x2_v:
446 case NEON::BI__builtin_neon_vst1q_x2_v:
447 case NEON::BI__builtin_neon_vst1_x3_v:
448 case NEON::BI__builtin_neon_vst1q_x3_v:
449 case NEON::BI__builtin_neon_vst1_x4_v:
450 case NEON::BI__builtin_neon_vst1q_x4_v:
451 case NEON::BI__builtin_neon_vsubhn_v:
452 case NEON::BI__builtin_neon_vtrn_v:
453 case NEON::BI__builtin_neon_vtrnq_v:
454 case NEON::BI__builtin_neon_vtst_v:
455 case NEON::BI__builtin_neon_vtstq_v:
456 case NEON::BI__builtin_neon_vuzp_v:
457 case NEON::BI__builtin_neon_vuzpq_v:
458 case NEON::BI__builtin_neon_vxarq_u64:
459 case NEON::BI__builtin_neon_vzip_v:
460 case NEON::BI__builtin_neon_vzipq_v:
461 case NEON::BI__builtin_neon_vdot_s32:
462 case NEON::BI__builtin_neon_vdot_u32:
463 case NEON::BI__builtin_neon_vdotq_s32:
464 case NEON::BI__builtin_neon_vdotq_u32:
465 case NEON::BI__builtin_neon_vfmlal_low_f16:
466 case NEON::BI__builtin_neon_vfmlalq_low_f16:
467 case NEON::BI__builtin_neon_vfmlsl_low_f16:
468 case NEON::BI__builtin_neon_vfmlslq_low_f16:
469 case NEON::BI__builtin_neon_vfmlal_high_f16:
470 case NEON::BI__builtin_neon_vfmlalq_high_f16:
471 case NEON::BI__builtin_neon_vfmlsl_high_f16:
472 case NEON::BI__builtin_neon_vfmlslq_high_f16:
473 case NEON::BI__builtin_neon_vmmlaq_s32:
474 case NEON::BI__builtin_neon_vmmlaq_u32:
476 std::string(
"unimplemented AArch64 builtin call: ") +
478 return mlir::Value{};
479 case NEON::BI__builtin_neon_vmul_v:
480 case NEON::BI__builtin_neon_vmulq_v:
483 case NEON::BI__builtin_neon_vusmmlaq_s32:
484 case NEON::BI__builtin_neon_vusdot_s32:
485 case NEON::BI__builtin_neon_vusdotq_s32:
486 case NEON::BI__builtin_neon_vbfdot_f32:
487 case NEON::BI__builtin_neon_vbfdotq_f32:
488 case NEON::BI__builtin_neon___a32_vcvt_bf16_f32:
491 std::string(
"unimplemented AArch64 builtin call: ") +
493 return mlir::Value{};
496 std::string(
"unimplemented AArch64 builtin call: ") +
498 return mlir::Value{};
1063 NEON::BI__builtin_neon_splat_lane_bf16,
1064 NEON::BI__builtin_neon_splat_lane_v,
1067 NEON::BI__builtin_neon_splat_laneq_bf16,
1068 NEON::BI__builtin_neon_splat_laneq_v,
1071 NEON::BI__builtin_neon_splatq_lane_bf16,
1072 NEON::BI__builtin_neon_splatq_lane_v,
1075 NEON::BI__builtin_neon_splatq_laneq_bf16,
1076 NEON::BI__builtin_neon_splatq_laneq_v,
1079 NEON::BI__builtin_neon_vabd_f16,
1080 NEON::BI__builtin_neon_vabd_v,
1083 NEON::BI__builtin_neon_vabdq_f16,
1084 NEON::BI__builtin_neon_vabdq_v,
1087 NEON::BI__builtin_neon_vabs_f16,
1088 NEON::BI__builtin_neon_vabs_v,
1091 NEON::BI__builtin_neon_vabsq_f16,
1092 NEON::BI__builtin_neon_vabsq_v,
1095 NEON::BI__builtin_neon_vcage_f16,
1096 NEON::BI__builtin_neon_vcage_v,
1099 NEON::BI__builtin_neon_vcageq_f16,
1100 NEON::BI__builtin_neon_vcageq_v,
1103 NEON::BI__builtin_neon_vcagt_f16,
1104 NEON::BI__builtin_neon_vcagt_v,
1107 NEON::BI__builtin_neon_vcagtq_f16,
1108 NEON::BI__builtin_neon_vcagtq_v,
1111 NEON::BI__builtin_neon_vcale_f16,
1112 NEON::BI__builtin_neon_vcale_v,
1115 NEON::BI__builtin_neon_vcaleq_f16,
1116 NEON::BI__builtin_neon_vcaleq_v,
1119 NEON::BI__builtin_neon_vcalt_f16,
1120 NEON::BI__builtin_neon_vcalt_v,
1123 NEON::BI__builtin_neon_vcaltq_f16,
1124 NEON::BI__builtin_neon_vcaltq_v,
1127 NEON::BI__builtin_neon_vceqz_f16,
1128 NEON::BI__builtin_neon_vceqz_v,
1131 NEON::BI__builtin_neon_vceqzq_f16,
1132 NEON::BI__builtin_neon_vceqzq_v,
1135 NEON::BI__builtin_neon_vcgez_f16,
1136 NEON::BI__builtin_neon_vcgez_v,
1139 NEON::BI__builtin_neon_vcgezq_f16,
1140 NEON::BI__builtin_neon_vcgezq_v,
1143 NEON::BI__builtin_neon_vcgtz_f16,
1144 NEON::BI__builtin_neon_vcgtz_v,
1147 NEON::BI__builtin_neon_vcgtzq_f16,
1148 NEON::BI__builtin_neon_vcgtzq_v,
1151 NEON::BI__builtin_neon_vclez_f16,
1152 NEON::BI__builtin_neon_vclez_v,
1155 NEON::BI__builtin_neon_vclezq_f16,
1156 NEON::BI__builtin_neon_vclezq_v,
1159 NEON::BI__builtin_neon_vcltz_f16,
1160 NEON::BI__builtin_neon_vcltz_v,
1163 NEON::BI__builtin_neon_vcltzq_f16,
1164 NEON::BI__builtin_neon_vcltzq_v,
1167 NEON::BI__builtin_neon_vfma_f16,
1168 NEON::BI__builtin_neon_vfma_v,
1171 NEON::BI__builtin_neon_vfma_lane_f16,
1172 NEON::BI__builtin_neon_vfma_lane_v,
1175 NEON::BI__builtin_neon_vfma_laneq_f16,
1176 NEON::BI__builtin_neon_vfma_laneq_v,
1179 NEON::BI__builtin_neon_vfmaq_f16,
1180 NEON::BI__builtin_neon_vfmaq_v,
1183 NEON::BI__builtin_neon_vfmaq_lane_f16,
1184 NEON::BI__builtin_neon_vfmaq_lane_v,
1187 NEON::BI__builtin_neon_vfmaq_laneq_f16,
1188 NEON::BI__builtin_neon_vfmaq_laneq_v,
1190 {NEON::BI__builtin_neon_vld1_bf16_x2, NEON::BI__builtin_neon_vld1_x2_v},
1191 {NEON::BI__builtin_neon_vld1_bf16_x3, NEON::BI__builtin_neon_vld1_x3_v},
1192 {NEON::BI__builtin_neon_vld1_bf16_x4, NEON::BI__builtin_neon_vld1_x4_v},
1193 {NEON::BI__builtin_neon_vld1_bf16, NEON::BI__builtin_neon_vld1_v},
1194 {NEON::BI__builtin_neon_vld1_dup_bf16, NEON::BI__builtin_neon_vld1_dup_v},
1195 {NEON::BI__builtin_neon_vld1_lane_bf16, NEON::BI__builtin_neon_vld1_lane_v},
1196 {NEON::BI__builtin_neon_vld1q_bf16_x2, NEON::BI__builtin_neon_vld1q_x2_v},
1197 {NEON::BI__builtin_neon_vld1q_bf16_x3, NEON::BI__builtin_neon_vld1q_x3_v},
1198 {NEON::BI__builtin_neon_vld1q_bf16_x4, NEON::BI__builtin_neon_vld1q_x4_v},
1199 {NEON::BI__builtin_neon_vld1q_bf16, NEON::BI__builtin_neon_vld1q_v},
1200 {NEON::BI__builtin_neon_vld1q_dup_bf16, NEON::BI__builtin_neon_vld1q_dup_v},
1201 {NEON::BI__builtin_neon_vld1q_lane_bf16,
1202 NEON::BI__builtin_neon_vld1q_lane_v},
1203 {NEON::BI__builtin_neon_vld2_bf16, NEON::BI__builtin_neon_vld2_v},
1204 {NEON::BI__builtin_neon_vld2_dup_bf16, NEON::BI__builtin_neon_vld2_dup_v},
1205 {NEON::BI__builtin_neon_vld2_lane_bf16, NEON::BI__builtin_neon_vld2_lane_v},
1206 {NEON::BI__builtin_neon_vld2q_bf16, NEON::BI__builtin_neon_vld2q_v},
1207 {NEON::BI__builtin_neon_vld2q_dup_bf16, NEON::BI__builtin_neon_vld2q_dup_v},
1208 {NEON::BI__builtin_neon_vld2q_lane_bf16,
1209 NEON::BI__builtin_neon_vld2q_lane_v},
1210 {NEON::BI__builtin_neon_vld3_bf16, NEON::BI__builtin_neon_vld3_v},
1211 {NEON::BI__builtin_neon_vld3_dup_bf16, NEON::BI__builtin_neon_vld3_dup_v},
1212 {NEON::BI__builtin_neon_vld3_lane_bf16, NEON::BI__builtin_neon_vld3_lane_v},
1213 {NEON::BI__builtin_neon_vld3q_bf16, NEON::BI__builtin_neon_vld3q_v},
1214 {NEON::BI__builtin_neon_vld3q_dup_bf16, NEON::BI__builtin_neon_vld3q_dup_v},
1215 {NEON::BI__builtin_neon_vld3q_lane_bf16,
1216 NEON::BI__builtin_neon_vld3q_lane_v},
1217 {NEON::BI__builtin_neon_vld4_bf16, NEON::BI__builtin_neon_vld4_v},
1218 {NEON::BI__builtin_neon_vld4_dup_bf16, NEON::BI__builtin_neon_vld4_dup_v},
1219 {NEON::BI__builtin_neon_vld4_lane_bf16, NEON::BI__builtin_neon_vld4_lane_v},
1220 {NEON::BI__builtin_neon_vld4q_bf16, NEON::BI__builtin_neon_vld4q_v},
1221 {NEON::BI__builtin_neon_vld4q_dup_bf16, NEON::BI__builtin_neon_vld4q_dup_v},
1222 {NEON::BI__builtin_neon_vld4q_lane_bf16,
1223 NEON::BI__builtin_neon_vld4q_lane_v},
1225 NEON::BI__builtin_neon_vmax_f16,
1226 NEON::BI__builtin_neon_vmax_v,
1229 NEON::BI__builtin_neon_vmaxnm_f16,
1230 NEON::BI__builtin_neon_vmaxnm_v,
1233 NEON::BI__builtin_neon_vmaxnmq_f16,
1234 NEON::BI__builtin_neon_vmaxnmq_v,
1237 NEON::BI__builtin_neon_vmaxq_f16,
1238 NEON::BI__builtin_neon_vmaxq_v,
1241 NEON::BI__builtin_neon_vmin_f16,
1242 NEON::BI__builtin_neon_vmin_v,
1245 NEON::BI__builtin_neon_vminnm_f16,
1246 NEON::BI__builtin_neon_vminnm_v,
1249 NEON::BI__builtin_neon_vminnmq_f16,
1250 NEON::BI__builtin_neon_vminnmq_v,
1253 NEON::BI__builtin_neon_vminq_f16,
1254 NEON::BI__builtin_neon_vminq_v,
1257 NEON::BI__builtin_neon_vmulx_f16,
1258 NEON::BI__builtin_neon_vmulx_v,
1261 NEON::BI__builtin_neon_vmulxq_f16,
1262 NEON::BI__builtin_neon_vmulxq_v,
1265 NEON::BI__builtin_neon_vpadd_f16,
1266 NEON::BI__builtin_neon_vpadd_v,
1269 NEON::BI__builtin_neon_vpaddq_f16,
1270 NEON::BI__builtin_neon_vpaddq_v,
1273 NEON::BI__builtin_neon_vpmax_f16,
1274 NEON::BI__builtin_neon_vpmax_v,
1277 NEON::BI__builtin_neon_vpmaxnm_f16,
1278 NEON::BI__builtin_neon_vpmaxnm_v,
1281 NEON::BI__builtin_neon_vpmaxnmq_f16,
1282 NEON::BI__builtin_neon_vpmaxnmq_v,
1285 NEON::BI__builtin_neon_vpmaxq_f16,
1286 NEON::BI__builtin_neon_vpmaxq_v,
1289 NEON::BI__builtin_neon_vpmin_f16,
1290 NEON::BI__builtin_neon_vpmin_v,
1293 NEON::BI__builtin_neon_vpminnm_f16,
1294 NEON::BI__builtin_neon_vpminnm_v,
1297 NEON::BI__builtin_neon_vpminnmq_f16,
1298 NEON::BI__builtin_neon_vpminnmq_v,
1301 NEON::BI__builtin_neon_vpminq_f16,
1302 NEON::BI__builtin_neon_vpminq_v,
1305 NEON::BI__builtin_neon_vrecpe_f16,
1306 NEON::BI__builtin_neon_vrecpe_v,
1309 NEON::BI__builtin_neon_vrecpeq_f16,
1310 NEON::BI__builtin_neon_vrecpeq_v,
1313 NEON::BI__builtin_neon_vrecps_f16,
1314 NEON::BI__builtin_neon_vrecps_v,
1317 NEON::BI__builtin_neon_vrecpsq_f16,
1318 NEON::BI__builtin_neon_vrecpsq_v,
1321 NEON::BI__builtin_neon_vrnd_f16,
1322 NEON::BI__builtin_neon_vrnd_v,
1325 NEON::BI__builtin_neon_vrnda_f16,
1326 NEON::BI__builtin_neon_vrnda_v,
1329 NEON::BI__builtin_neon_vrndaq_f16,
1330 NEON::BI__builtin_neon_vrndaq_v,
1333 NEON::BI__builtin_neon_vrndi_f16,
1334 NEON::BI__builtin_neon_vrndi_v,
1337 NEON::BI__builtin_neon_vrndiq_f16,
1338 NEON::BI__builtin_neon_vrndiq_v,
1341 NEON::BI__builtin_neon_vrndm_f16,
1342 NEON::BI__builtin_neon_vrndm_v,
1345 NEON::BI__builtin_neon_vrndmq_f16,
1346 NEON::BI__builtin_neon_vrndmq_v,
1349 NEON::BI__builtin_neon_vrndn_f16,
1350 NEON::BI__builtin_neon_vrndn_v,
1353 NEON::BI__builtin_neon_vrndnq_f16,
1354 NEON::BI__builtin_neon_vrndnq_v,
1357 NEON::BI__builtin_neon_vrndp_f16,
1358 NEON::BI__builtin_neon_vrndp_v,
1361 NEON::BI__builtin_neon_vrndpq_f16,
1362 NEON::BI__builtin_neon_vrndpq_v,
1365 NEON::BI__builtin_neon_vrndq_f16,
1366 NEON::BI__builtin_neon_vrndq_v,
1369 NEON::BI__builtin_neon_vrndx_f16,
1370 NEON::BI__builtin_neon_vrndx_v,
1373 NEON::BI__builtin_neon_vrndxq_f16,
1374 NEON::BI__builtin_neon_vrndxq_v,
1377 NEON::BI__builtin_neon_vrsqrte_f16,
1378 NEON::BI__builtin_neon_vrsqrte_v,
1381 NEON::BI__builtin_neon_vrsqrteq_f16,
1382 NEON::BI__builtin_neon_vrsqrteq_v,
1385 NEON::BI__builtin_neon_vrsqrts_f16,
1386 NEON::BI__builtin_neon_vrsqrts_v,
1389 NEON::BI__builtin_neon_vrsqrtsq_f16,
1390 NEON::BI__builtin_neon_vrsqrtsq_v,
1393 NEON::BI__builtin_neon_vsqrt_f16,
1394 NEON::BI__builtin_neon_vsqrt_v,
1397 NEON::BI__builtin_neon_vsqrtq_f16,
1398 NEON::BI__builtin_neon_vsqrtq_v,
1400 {NEON::BI__builtin_neon_vst1_bf16_x2, NEON::BI__builtin_neon_vst1_x2_v},
1401 {NEON::BI__builtin_neon_vst1_bf16_x3, NEON::BI__builtin_neon_vst1_x3_v},
1402 {NEON::BI__builtin_neon_vst1_bf16_x4, NEON::BI__builtin_neon_vst1_x4_v},
1403 {NEON::BI__builtin_neon_vst1_bf16, NEON::BI__builtin_neon_vst1_v},
1404 {NEON::BI__builtin_neon_vst1_lane_bf16, NEON::BI__builtin_neon_vst1_lane_v},
1405 {NEON::BI__builtin_neon_vst1q_bf16_x2, NEON::BI__builtin_neon_vst1q_x2_v},
1406 {NEON::BI__builtin_neon_vst1q_bf16_x3, NEON::BI__builtin_neon_vst1q_x3_v},
1407 {NEON::BI__builtin_neon_vst1q_bf16_x4, NEON::BI__builtin_neon_vst1q_x4_v},
1408 {NEON::BI__builtin_neon_vst1q_bf16, NEON::BI__builtin_neon_vst1q_v},
1409 {NEON::BI__builtin_neon_vst1q_lane_bf16,
1410 NEON::BI__builtin_neon_vst1q_lane_v},
1411 {NEON::BI__builtin_neon_vst2_bf16, NEON::BI__builtin_neon_vst2_v},
1412 {NEON::BI__builtin_neon_vst2_lane_bf16, NEON::BI__builtin_neon_vst2_lane_v},
1413 {NEON::BI__builtin_neon_vst2q_bf16, NEON::BI__builtin_neon_vst2q_v},
1414 {NEON::BI__builtin_neon_vst2q_lane_bf16,
1415 NEON::BI__builtin_neon_vst2q_lane_v},
1416 {NEON::BI__builtin_neon_vst3_bf16, NEON::BI__builtin_neon_vst3_v},
1417 {NEON::BI__builtin_neon_vst3_lane_bf16, NEON::BI__builtin_neon_vst3_lane_v},
1418 {NEON::BI__builtin_neon_vst3q_bf16, NEON::BI__builtin_neon_vst3q_v},
1419 {NEON::BI__builtin_neon_vst3q_lane_bf16,
1420 NEON::BI__builtin_neon_vst3q_lane_v},
1421 {NEON::BI__builtin_neon_vst4_bf16, NEON::BI__builtin_neon_vst4_v},
1422 {NEON::BI__builtin_neon_vst4_lane_bf16, NEON::BI__builtin_neon_vst4_lane_v},
1423 {NEON::BI__builtin_neon_vst4q_bf16, NEON::BI__builtin_neon_vst4q_v},
1424 {NEON::BI__builtin_neon_vst4q_lane_bf16,
1425 NEON::BI__builtin_neon_vst4q_lane_v},
1429 {NEON::BI__builtin_neon_vldap1_lane_u64,
1430 NEON::BI__builtin_neon_vldap1_lane_s64},
1431 {NEON::BI__builtin_neon_vldap1_lane_f64,
1432 NEON::BI__builtin_neon_vldap1_lane_s64},
1433 {NEON::BI__builtin_neon_vldap1_lane_p64,
1434 NEON::BI__builtin_neon_vldap1_lane_s64},
1435 {NEON::BI__builtin_neon_vldap1q_lane_u64,
1436 NEON::BI__builtin_neon_vldap1q_lane_s64},
1437 {NEON::BI__builtin_neon_vldap1q_lane_f64,
1438 NEON::BI__builtin_neon_vldap1q_lane_s64},
1439 {NEON::BI__builtin_neon_vldap1q_lane_p64,
1440 NEON::BI__builtin_neon_vldap1q_lane_s64},
1441 {NEON::BI__builtin_neon_vstl1_lane_u64,
1442 NEON::BI__builtin_neon_vstl1_lane_s64},
1443 {NEON::BI__builtin_neon_vstl1_lane_f64,
1444 NEON::BI__builtin_neon_vstl1_lane_s64},
1445 {NEON::BI__builtin_neon_vstl1_lane_p64,
1446 NEON::BI__builtin_neon_vstl1_lane_s64},
1447 {NEON::BI__builtin_neon_vstl1q_lane_u64,
1448 NEON::BI__builtin_neon_vstl1q_lane_s64},
1449 {NEON::BI__builtin_neon_vstl1q_lane_f64,
1450 NEON::BI__builtin_neon_vstl1q_lane_s64},
1451 {NEON::BI__builtin_neon_vstl1q_lane_p64,
1452 NEON::BI__builtin_neon_vstl1q_lane_s64},
1458 llvm::Triple::ArchType arch) {
1467 if (builtinID == Builtin::BI__builtin_cpu_supports) {
1468 cgm.errorNYI(
expr->getSourceRange(),
1469 std::string(
"unimplemented AArch64 builtin call: ") +
1470 getContext().BuiltinInfo.getName(builtinID));
1471 return mlir::Value{};
1474 switch (builtinID) {
1477 case clang::AArch64::BI__builtin_arm_nop:
1478 case clang::AArch64::BI__builtin_arm_yield:
1479 case clang::AArch64::BI__yield:
1480 case clang::AArch64::BI__builtin_arm_wfe:
1481 case clang::AArch64::BI__wfe:
1482 case clang::AArch64::BI__builtin_arm_wfi:
1483 case clang::AArch64::BI__wfi:
1484 case clang::AArch64::BI__builtin_arm_sev:
1485 case clang::AArch64::BI__sev:
1486 case clang::AArch64::BI__builtin_arm_sevl:
1487 case clang::AArch64::BI__sevl:
1488 cgm.errorNYI(
expr->getSourceRange(),
1489 std::string(
"unimplemented AArch64 builtin call: ") +
1490 getContext().BuiltinInfo.getName(builtinID));
1491 return mlir::Value{};
1494 if (builtinID == clang::AArch64::BI__builtin_arm_trap) {
1495 cgm.errorNYI(
expr->getSourceRange(),
1496 std::string(
"unimplemented AArch64 builtin call: ") +
1497 getContext().BuiltinInfo.getName(builtinID));
1498 return mlir::Value{};
1501 if (builtinID == clang::AArch64::BI__builtin_arm_get_sme_state) {
1502 cgm.errorNYI(
expr->getSourceRange(),
1503 std::string(
"unimplemented AArch64 builtin call: ") +
1504 getContext().BuiltinInfo.getName(builtinID));
1505 return mlir::Value{};
1508 if (builtinID == clang::AArch64::BI__builtin_arm_rbit) {
1509 cgm.errorNYI(
expr->getSourceRange(),
1510 std::string(
"unimplemented AArch64 builtin call: ") +
1511 getContext().BuiltinInfo.getName(builtinID));
1512 return mlir::Value{};
1514 if (builtinID == clang::AArch64::BI__builtin_arm_rbit64) {
1515 cgm.errorNYI(
expr->getSourceRange(),
1516 std::string(
"unimplemented AArch64 builtin call: ") +
1517 getContext().BuiltinInfo.getName(builtinID));
1518 return mlir::Value{};
1521 if (builtinID == clang::AArch64::BI__builtin_arm_clz ||
1522 builtinID == clang::AArch64::BI__builtin_arm_clz64) {
1523 cgm.errorNYI(
expr->getSourceRange(),
1524 std::string(
"unimplemented AArch64 builtin call: ") +
1525 getContext().BuiltinInfo.getName(builtinID));
1526 return mlir::Value{};
1529 if (builtinID == clang::AArch64::BI__builtin_arm_cls) {
1530 cgm.errorNYI(
expr->getSourceRange(),
1531 std::string(
"unimplemented AArch64 builtin call: ") +
1532 getContext().BuiltinInfo.getName(builtinID));
1533 return mlir::Value{};
1535 if (builtinID == clang::AArch64::BI__builtin_arm_cls64) {
1536 cgm.errorNYI(
expr->getSourceRange(),
1537 std::string(
"unimplemented AArch64 builtin call: ") +
1538 getContext().BuiltinInfo.getName(builtinID));
1539 return mlir::Value{};
1542 if (builtinID == clang::AArch64::BI__builtin_arm_rint32zf ||
1543 builtinID == clang::AArch64::BI__builtin_arm_rint32z) {
1544 cgm.errorNYI(
expr->getSourceRange(),
1545 std::string(
"unimplemented AArch64 builtin call: ") +
1546 getContext().BuiltinInfo.getName(builtinID));
1547 return mlir::Value{};
1550 if (builtinID == clang::AArch64::BI__builtin_arm_rint64zf ||
1551 builtinID == clang::AArch64::BI__builtin_arm_rint64z) {
1552 cgm.errorNYI(
expr->getSourceRange(),
1553 std::string(
"unimplemented AArch64 builtin call: ") +
1554 getContext().BuiltinInfo.getName(builtinID));
1555 return mlir::Value{};
1558 if (builtinID == clang::AArch64::BI__builtin_arm_rint32xf ||
1559 builtinID == clang::AArch64::BI__builtin_arm_rint32x) {
1560 cgm.errorNYI(
expr->getSourceRange(),
1561 std::string(
"unimplemented AArch64 builtin call: ") +
1562 getContext().BuiltinInfo.getName(builtinID));
1563 return mlir::Value{};
1566 if (builtinID == clang::AArch64::BI__builtin_arm_rint64xf ||
1567 builtinID == clang::AArch64::BI__builtin_arm_rint64x) {
1568 cgm.errorNYI(
expr->getSourceRange(),
1569 std::string(
"unimplemented AArch64 builtin call: ") +
1570 getContext().BuiltinInfo.getName(builtinID));
1571 return mlir::Value{};
1574 if (builtinID == clang::AArch64::BI__builtin_arm_jcvt) {
1575 cgm.errorNYI(
expr->getSourceRange(),
1576 std::string(
"unimplemented AArch64 builtin call: ") +
1577 getContext().BuiltinInfo.getName(builtinID));
1578 return mlir::Value{};
1581 if (builtinID == clang::AArch64::BI__builtin_arm_ld64b ||
1582 builtinID == clang::AArch64::BI__builtin_arm_st64b ||
1583 builtinID == clang::AArch64::BI__builtin_arm_st64bv ||
1584 builtinID == clang::AArch64::BI__builtin_arm_st64bv0) {
1585 cgm.errorNYI(
expr->getSourceRange(),
1586 std::string(
"unimplemented AArch64 builtin call: ") +
1587 getContext().BuiltinInfo.getName(builtinID));
1588 return mlir::Value{};
1591 if (builtinID == clang::AArch64::BI__builtin_arm_atomic_store_with_stshh) {
1592 cgm.errorNYI(
expr->getSourceRange(),
1593 std::string(
"unimplemented AArch64 builtin call: ") +
1594 getContext().BuiltinInfo.getName(builtinID));
1595 return mlir::Value{};
1598 if (builtinID == clang::AArch64::BI__builtin_arm_rndr ||
1599 builtinID == clang::AArch64::BI__builtin_arm_rndrrs) {
1600 cgm.errorNYI(
expr->getSourceRange(),
1601 std::string(
"unimplemented AArch64 builtin call: ") +
1602 getContext().BuiltinInfo.getName(builtinID));
1603 return mlir::Value{};
1606 if (builtinID == clang::AArch64::BI__clear_cache) {
1607 cgm.errorNYI(
expr->getSourceRange(),
1608 std::string(
"unimplemented AArch64 builtin call: ") +
1609 getContext().BuiltinInfo.getName(builtinID));
1610 return mlir::Value{};
1613 if ((builtinID == clang::AArch64::BI__builtin_arm_ldrex ||
1614 builtinID == clang::AArch64::BI__builtin_arm_ldaex) &&
1616 cgm.errorNYI(
expr->getSourceRange(),
1617 std::string(
"unimplemented AArch64 builtin call: ") +
1618 getContext().BuiltinInfo.getName(builtinID));
1619 return mlir::Value{};
1621 if (builtinID == clang::AArch64::BI__builtin_arm_ldrex ||
1622 builtinID == clang::AArch64::BI__builtin_arm_ldaex) {
1623 cgm.errorNYI(
expr->getSourceRange(),
1624 std::string(
"unimplemented AArch64 builtin call: ") +
1625 getContext().BuiltinInfo.getName(builtinID));
1626 return mlir::Value{};
1629 if ((builtinID == clang::AArch64::BI__builtin_arm_strex ||
1630 builtinID == clang::AArch64::BI__builtin_arm_stlex) &&
1632 cgm.errorNYI(
expr->getSourceRange(),
1633 std::string(
"unimplemented AArch64 builtin call: ") +
1634 getContext().BuiltinInfo.getName(builtinID));
1635 return mlir::Value{};
1638 if (builtinID == clang::AArch64::BI__builtin_arm_strex ||
1639 builtinID == clang::AArch64::BI__builtin_arm_stlex) {
1640 cgm.errorNYI(
expr->getSourceRange(),
1641 std::string(
"unimplemented AArch64 builtin call: ") +
1642 getContext().BuiltinInfo.getName(builtinID));
1643 return mlir::Value{};
1646 if (builtinID == clang::AArch64::BI__getReg) {
1647 cgm.errorNYI(
expr->getSourceRange(),
1648 std::string(
"unimplemented AArch64 builtin call: ") +
1649 getContext().BuiltinInfo.getName(builtinID));
1650 return mlir::Value{};
1653 if (builtinID == clang::AArch64::BI__break) {
1654 cgm.errorNYI(
expr->getSourceRange(),
1655 std::string(
"unimplemented AArch64 builtin call: ") +
1656 getContext().BuiltinInfo.getName(builtinID));
1657 return mlir::Value{};
1660 if (builtinID == clang::AArch64::BI__builtin_arm_clrex) {
1661 cgm.errorNYI(
expr->getSourceRange(),
1662 std::string(
"unimplemented AArch64 builtin call: ") +
1663 getContext().BuiltinInfo.getName(builtinID));
1664 return mlir::Value{};
1667 if (builtinID == clang::AArch64::BI_ReadWriteBarrier) {
1668 cgm.errorNYI(
expr->getSourceRange(),
1669 std::string(
"unimplemented AArch64 builtin call: ") +
1670 getContext().BuiltinInfo.getName(builtinID));
1671 return mlir::Value{};
1675 Intrinsic::ID crcIntrinsicID = Intrinsic::not_intrinsic;
1676 switch (builtinID) {
1677 case clang::AArch64::BI__builtin_arm_crc32b:
1678 crcIntrinsicID = Intrinsic::aarch64_crc32b;
1680 case clang::AArch64::BI__builtin_arm_crc32cb:
1681 crcIntrinsicID = Intrinsic::aarch64_crc32cb;
1683 case clang::AArch64::BI__builtin_arm_crc32h:
1684 crcIntrinsicID = Intrinsic::aarch64_crc32h;
1686 case clang::AArch64::BI__builtin_arm_crc32ch:
1687 crcIntrinsicID = Intrinsic::aarch64_crc32ch;
1689 case clang::AArch64::BI__builtin_arm_crc32w:
1690 crcIntrinsicID = Intrinsic::aarch64_crc32w;
1692 case clang::AArch64::BI__builtin_arm_crc32cw:
1693 crcIntrinsicID = Intrinsic::aarch64_crc32cw;
1695 case clang::AArch64::BI__builtin_arm_crc32d:
1696 crcIntrinsicID = Intrinsic::aarch64_crc32x;
1698 case clang::AArch64::BI__builtin_arm_crc32cd:
1699 crcIntrinsicID = Intrinsic::aarch64_crc32cx;
1703 if (crcIntrinsicID != Intrinsic::not_intrinsic) {
1704 cgm.errorNYI(
expr->getSourceRange(),
1705 std::string(
"unimplemented AArch64 builtin call: ") +
1706 getContext().BuiltinInfo.getName(builtinID));
1707 return mlir::Value{};
1711 if (builtinID == AArch64::BI__builtin_arm_mops_memset_tag) {
1712 cgm.errorNYI(
expr->getSourceRange(),
1713 std::string(
"unimplemented AArch64 builtin call: ") +
1714 getContext().BuiltinInfo.getName(builtinID));
1715 return mlir::Value{};
1719 Intrinsic::ID mteIntrinsicID = Intrinsic::not_intrinsic;
1720 switch (builtinID) {
1721 case clang::AArch64::BI__builtin_arm_irg:
1722 mteIntrinsicID = Intrinsic::aarch64_irg;
1724 case clang::AArch64::BI__builtin_arm_addg:
1725 mteIntrinsicID = Intrinsic::aarch64_addg;
1727 case clang::AArch64::BI__builtin_arm_gmi:
1728 mteIntrinsicID = Intrinsic::aarch64_gmi;
1730 case clang::AArch64::BI__builtin_arm_ldg:
1731 mteIntrinsicID = Intrinsic::aarch64_ldg;
1733 case clang::AArch64::BI__builtin_arm_stg:
1734 mteIntrinsicID = Intrinsic::aarch64_stg;
1736 case clang::AArch64::BI__builtin_arm_subp:
1737 mteIntrinsicID = Intrinsic::aarch64_subp;
1741 if (mteIntrinsicID != Intrinsic::not_intrinsic) {
1742 cgm.errorNYI(
expr->getSourceRange(),
1743 std::string(
"unimplemented AArch64 builtin call: ") +
1744 getContext().BuiltinInfo.getName(builtinID));
1745 return mlir::Value{};
1748 if (builtinID == clang::AArch64::BI__builtin_arm_rsr ||
1749 builtinID == clang::AArch64::BI__builtin_arm_rsr64 ||
1750 builtinID == clang::AArch64::BI__builtin_arm_rsr128 ||
1751 builtinID == clang::AArch64::BI__builtin_arm_rsrp ||
1752 builtinID == clang::AArch64::BI__builtin_arm_wsr ||
1753 builtinID == clang::AArch64::BI__builtin_arm_wsr64 ||
1754 builtinID == clang::AArch64::BI__builtin_arm_wsr128 ||
1755 builtinID == clang::AArch64::BI__builtin_arm_wsrp) {
1756 cgm.errorNYI(
expr->getSourceRange(),
1757 std::string(
"unimplemented AArch64 builtin call: ") +
1758 getContext().BuiltinInfo.getName(builtinID));
1759 return mlir::Value{};
1762 if (builtinID == clang::AArch64::BI_ReadStatusReg ||
1763 builtinID == clang::AArch64::BI_WriteStatusReg ||
1764 builtinID == clang::AArch64::BI__sys) {
1765 cgm.errorNYI(
expr->getSourceRange(),
1766 std::string(
"unimplemented AArch64 builtin call: ") +
1767 getContext().BuiltinInfo.getName(builtinID));
1768 return mlir::Value{};
1771 if (builtinID == clang::AArch64::BI_AddressOfReturnAddress) {
1772 cgm.errorNYI(
expr->getSourceRange(),
1773 std::string(
"unimplemented AArch64 builtin call: ") +
1774 getContext().BuiltinInfo.getName(builtinID));
1775 return mlir::Value{};
1778 if (builtinID == clang::AArch64::BI__builtin_sponentry) {
1779 cgm.errorNYI(
expr->getSourceRange(),
1780 std::string(
"unimplemented AArch64 builtin call: ") +
1781 getContext().BuiltinInfo.getName(builtinID));
1782 return mlir::Value{};
1785 if (builtinID == clang::AArch64::BI__mulh ||
1786 builtinID == clang::AArch64::BI__umulh) {
1787 cgm.errorNYI(
expr->getSourceRange(),
1788 std::string(
"unimplemented AArch64 builtin call: ") +
1789 getContext().BuiltinInfo.getName(builtinID));
1790 return mlir::Value{};
1793 if (builtinID == AArch64::BI__writex18byte ||
1794 builtinID == AArch64::BI__writex18word ||
1795 builtinID == AArch64::BI__writex18dword ||
1796 builtinID == AArch64::BI__writex18qword) {
1797 cgm.errorNYI(
expr->getSourceRange(),
1798 std::string(
"unimplemented AArch64 builtin call: ") +
1799 getContext().BuiltinInfo.getName(builtinID));
1800 return mlir::Value{};
1803 if (builtinID == AArch64::BI__readx18byte ||
1804 builtinID == AArch64::BI__readx18word ||
1805 builtinID == AArch64::BI__readx18dword ||
1806 builtinID == AArch64::BI__readx18qword) {
1807 cgm.errorNYI(
expr->getSourceRange(),
1808 std::string(
"unimplemented AArch64 builtin call: ") +
1809 getContext().BuiltinInfo.getName(builtinID));
1810 return mlir::Value{};
1813 if (builtinID == AArch64::BI__addx18byte ||
1814 builtinID == AArch64::BI__addx18word ||
1815 builtinID == AArch64::BI__addx18dword ||
1816 builtinID == AArch64::BI__addx18qword ||
1817 builtinID == AArch64::BI__incx18byte ||
1818 builtinID == AArch64::BI__incx18word ||
1819 builtinID == AArch64::BI__incx18dword ||
1820 builtinID == AArch64::BI__incx18qword) {
1821 cgm.errorNYI(
expr->getSourceRange(),
1822 std::string(
"unimplemented AArch64 builtin call: ") +
1823 getContext().BuiltinInfo.getName(builtinID));
1824 return mlir::Value{};
1827 if (builtinID == AArch64::BI_CopyDoubleFromInt64 ||
1828 builtinID == AArch64::BI_CopyFloatFromInt32 ||
1829 builtinID == AArch64::BI_CopyInt32FromFloat ||
1830 builtinID == AArch64::BI_CopyInt64FromDouble) {
1831 cgm.errorNYI(
expr->getSourceRange(),
1832 std::string(
"unimplemented AArch64 builtin call: ") +
1833 getContext().BuiltinInfo.getName(builtinID));
1834 return mlir::Value{};
1837 if (builtinID == AArch64::BI_CountLeadingOnes ||
1838 builtinID == AArch64::BI_CountLeadingOnes64 ||
1839 builtinID == AArch64::BI_CountLeadingZeros ||
1840 builtinID == AArch64::BI_CountLeadingZeros64) {
1841 cgm.errorNYI(
expr->getSourceRange(),
1842 std::string(
"unimplemented AArch64 builtin call: ") +
1843 getContext().BuiltinInfo.getName(builtinID));
1844 return mlir::Value{};
1847 if (builtinID == AArch64::BI_CountLeadingSigns ||
1848 builtinID == AArch64::BI_CountLeadingSigns64) {
1849 cgm.errorNYI(
expr->getSourceRange(),
1850 std::string(
"unimplemented AArch64 builtin call: ") +
1851 getContext().BuiltinInfo.getName(builtinID));
1852 return mlir::Value{};
1855 if (builtinID == AArch64::BI_CountOneBits ||
1856 builtinID == AArch64::BI_CountOneBits64) {
1857 cgm.errorNYI(
expr->getSourceRange(),
1858 std::string(
"unimplemented AArch64 builtin call: ") +
1859 getContext().BuiltinInfo.getName(builtinID));
1860 return mlir::Value{};
1863 if (builtinID == AArch64::BI__prefetch) {
1864 cgm.errorNYI(
expr->getSourceRange(),
1865 std::string(
"unimplemented AArch64 builtin call: ") +
1866 getContext().BuiltinInfo.getName(builtinID));
1867 return mlir::Value{};
1870 if (builtinID == AArch64::BI__hlt) {
1871 cgm.errorNYI(
expr->getSourceRange(),
1872 std::string(
"unimplemented AArch64 builtin call: ") +
1873 getContext().BuiltinInfo.getName(builtinID));
1874 return mlir::Value{};
1877 if (builtinID == NEON::BI__builtin_neon_vcvth_bf16_f32) {
1878 cgm.errorNYI(
expr->getSourceRange(),
1879 std::string(
"unimplemented AArch64 builtin call: ") +
1880 getContext().BuiltinInfo.getName(builtinID));
1881 return mlir::Value{};
1890 return p.first == builtinID;
1893 builtinID = it->second;
1898 unsigned iceArguments = 0;
1907 unsigned numArgs =
expr->getNumArgs() - (hasExtraArg ? 1 : 0);
1908 for (
unsigned i = 0, e = numArgs; i != e; i++) {
1910 switch (builtinID) {
1911 case NEON::BI__builtin_neon_vld1_v:
1912 case NEON::BI__builtin_neon_vld1q_v:
1913 case NEON::BI__builtin_neon_vld1_dup_v:
1914 case NEON::BI__builtin_neon_vld1q_dup_v:
1915 case NEON::BI__builtin_neon_vld1_lane_v:
1916 case NEON::BI__builtin_neon_vld1q_lane_v:
1917 case NEON::BI__builtin_neon_vst1_v:
1918 case NEON::BI__builtin_neon_vst1q_v:
1919 case NEON::BI__builtin_neon_vst1_lane_v:
1920 case NEON::BI__builtin_neon_vst1q_lane_v:
1921 case NEON::BI__builtin_neon_vldap1_lane_s64:
1922 case NEON::BI__builtin_neon_vldap1q_lane_s64:
1923 case NEON::BI__builtin_neon_vstl1_lane_s64:
1924 case NEON::BI__builtin_neon_vstl1q_lane_s64:
1928 expr->getSourceRange(),
1929 std::string(
"unimplemented AArch64 builtin argument handling ") +
1930 getContext().BuiltinInfo.getName(builtinID));
1948 const Expr *arg =
expr->getArg(
expr->getNumArgs() - 1);
1952 if (std::optional<llvm::APSInt> result =
1956 bool usgn =
type.isUnsigned();
1958 mlir::Location loc =
getLoc(
expr->getExprLoc());
1972 switch (builtinID) {
1975 case NEON::BI__builtin_neon_vabsh_f16: {
1976 return cir::FAbsOp::create(builder, loc, ops);
1978 case NEON::BI__builtin_neon_vaddq_p128:
1979 case NEON::BI__builtin_neon_vldrq_p128:
1980 case NEON::BI__builtin_neon_vstrq_p128:
1981 case NEON::BI__builtin_neon_vcvts_f32_u32:
1982 case NEON::BI__builtin_neon_vcvtd_f64_u64:
1983 case NEON::BI__builtin_neon_vcvts_f32_s32:
1984 case NEON::BI__builtin_neon_vcvtd_f64_s64:
1985 case NEON::BI__builtin_neon_vcvth_f16_u16:
1986 case NEON::BI__builtin_neon_vcvth_f16_u32:
1987 case NEON::BI__builtin_neon_vcvth_f16_u64:
1988 case NEON::BI__builtin_neon_vcvth_f16_s16:
1989 case NEON::BI__builtin_neon_vcvth_f16_s32:
1990 case NEON::BI__builtin_neon_vcvth_f16_s64:
1991 case NEON::BI__builtin_neon_vcvtah_u16_f16:
1992 case NEON::BI__builtin_neon_vcvtmh_u16_f16:
1993 case NEON::BI__builtin_neon_vcvtnh_u16_f16:
1994 case NEON::BI__builtin_neon_vcvtph_u16_f16:
1995 case NEON::BI__builtin_neon_vcvth_u16_f16:
1996 case NEON::BI__builtin_neon_vcvtah_s16_f16:
1997 case NEON::BI__builtin_neon_vcvtmh_s16_f16:
1998 case NEON::BI__builtin_neon_vcvtnh_s16_f16:
1999 case NEON::BI__builtin_neon_vcvtph_s16_f16:
2000 case NEON::BI__builtin_neon_vcvth_s16_f16:
2001 case NEON::BI__builtin_neon_vcaleh_f16:
2002 case NEON::BI__builtin_neon_vcalth_f16:
2003 case NEON::BI__builtin_neon_vcageh_f16:
2004 case NEON::BI__builtin_neon_vcagth_f16:
2005 case NEON::BI__builtin_neon_vcvth_n_s16_f16:
2006 case NEON::BI__builtin_neon_vcvth_n_u16_f16:
2007 case NEON::BI__builtin_neon_vcvth_n_f16_s16:
2008 case NEON::BI__builtin_neon_vcvth_n_f16_u16:
2009 case NEON::BI__builtin_neon_vpaddd_s64:
2010 case NEON::BI__builtin_neon_vpaddd_f64:
2011 case NEON::BI__builtin_neon_vpadds_f32:
2012 cgm.errorNYI(
expr->getSourceRange(),
2013 std::string(
"unimplemented AArch64 builtin call: ") +
2014 getContext().BuiltinInfo.getName(builtinID));
2015 return mlir::Value{};
2016 case NEON::BI__builtin_neon_vceqzd_s64:
2017 case NEON::BI__builtin_neon_vceqzd_f64:
2018 case NEON::BI__builtin_neon_vceqzs_f32:
2019 case NEON::BI__builtin_neon_vceqzh_f16:
2021 *
this, builder, loc, ops[0],
2023 case NEON::BI__builtin_neon_vcgezd_s64:
2024 case NEON::BI__builtin_neon_vcgezd_f64:
2025 case NEON::BI__builtin_neon_vcgezs_f32:
2026 case NEON::BI__builtin_neon_vcgezh_f16:
2027 case NEON::BI__builtin_neon_vclezd_s64:
2028 case NEON::BI__builtin_neon_vclezd_f64:
2029 case NEON::BI__builtin_neon_vclezs_f32:
2030 case NEON::BI__builtin_neon_vclezh_f16:
2031 case NEON::BI__builtin_neon_vcgtzd_s64:
2032 case NEON::BI__builtin_neon_vcgtzd_f64:
2033 case NEON::BI__builtin_neon_vcgtzs_f32:
2034 case NEON::BI__builtin_neon_vcgtzh_f16:
2035 case NEON::BI__builtin_neon_vcltzd_s64:
2036 case NEON::BI__builtin_neon_vcltzd_f64:
2037 case NEON::BI__builtin_neon_vcltzs_f32:
2038 case NEON::BI__builtin_neon_vcltzh_f16:
2039 case NEON::BI__builtin_neon_vceqzd_u64: {
2041 *
this, builder, loc, ops[0],
2044 case NEON::BI__builtin_neon_vceqd_f64:
2045 case NEON::BI__builtin_neon_vcled_f64:
2046 case NEON::BI__builtin_neon_vcltd_f64:
2047 case NEON::BI__builtin_neon_vcged_f64:
2048 case NEON::BI__builtin_neon_vcgtd_f64:
2049 case NEON::BI__builtin_neon_vceqs_f32:
2050 case NEON::BI__builtin_neon_vcles_f32:
2051 case NEON::BI__builtin_neon_vclts_f32:
2052 case NEON::BI__builtin_neon_vcges_f32:
2053 case NEON::BI__builtin_neon_vcgts_f32:
2054 case NEON::BI__builtin_neon_vceqh_f16:
2055 case NEON::BI__builtin_neon_vcleh_f16:
2056 case NEON::BI__builtin_neon_vclth_f16:
2057 case NEON::BI__builtin_neon_vcgeh_f16:
2058 case NEON::BI__builtin_neon_vcgth_f16:
2059 case NEON::BI__builtin_neon_vceqd_s64:
2060 case NEON::BI__builtin_neon_vceqd_u64:
2061 case NEON::BI__builtin_neon_vcgtd_s64:
2062 case NEON::BI__builtin_neon_vcgtd_u64:
2063 case NEON::BI__builtin_neon_vcltd_s64:
2064 case NEON::BI__builtin_neon_vcltd_u64:
2065 case NEON::BI__builtin_neon_vcged_u64:
2066 case NEON::BI__builtin_neon_vcged_s64:
2067 case NEON::BI__builtin_neon_vcled_u64:
2068 case NEON::BI__builtin_neon_vcled_s64:
2069 cgm.errorNYI(
expr->getSourceRange(),
2070 std::string(
"unimplemented AArch64 builtin call: ") +
2071 getContext().BuiltinInfo.getName(builtinID));
2072 return mlir::Value{};
2073 case NEON::BI__builtin_neon_vnegd_s64: {
2074 return builder.createNeg(ops[0]);
2076 case NEON::BI__builtin_neon_vnegh_f16: {
2077 return builder.createFNeg(ops[0]);
2079 case NEON::BI__builtin_neon_vtstd_s64:
2080 case NEON::BI__builtin_neon_vtstd_u64:
2081 case NEON::BI__builtin_neon_vset_lane_i8:
2082 case NEON::BI__builtin_neon_vset_lane_i16:
2083 case NEON::BI__builtin_neon_vset_lane_i32:
2084 case NEON::BI__builtin_neon_vset_lane_i64:
2085 case NEON::BI__builtin_neon_vset_lane_bf16:
2086 case NEON::BI__builtin_neon_vset_lane_f32:
2087 case NEON::BI__builtin_neon_vsetq_lane_i8:
2088 case NEON::BI__builtin_neon_vsetq_lane_i16:
2089 case NEON::BI__builtin_neon_vsetq_lane_i32:
2090 case NEON::BI__builtin_neon_vsetq_lane_i64:
2091 case NEON::BI__builtin_neon_vsetq_lane_bf16:
2092 case NEON::BI__builtin_neon_vsetq_lane_f32:
2093 case NEON::BI__builtin_neon_vset_lane_f64:
2094 case NEON::BI__builtin_neon_vset_lane_mf8:
2095 case NEON::BI__builtin_neon_vsetq_lane_mf8:
2096 case NEON::BI__builtin_neon_vsetq_lane_f64:
2097 case NEON::BI__builtin_neon_vget_lane_i8:
2098 case NEON::BI__builtin_neon_vdupb_lane_i8:
2099 case NEON::BI__builtin_neon_vgetq_lane_i8:
2100 case NEON::BI__builtin_neon_vdupb_laneq_i8:
2101 case NEON::BI__builtin_neon_vget_lane_mf8:
2102 case NEON::BI__builtin_neon_vdupb_lane_mf8:
2103 case NEON::BI__builtin_neon_vgetq_lane_mf8:
2104 case NEON::BI__builtin_neon_vdupb_laneq_mf8:
2105 case NEON::BI__builtin_neon_vget_lane_i16:
2106 case NEON::BI__builtin_neon_vduph_lane_i16:
2107 case NEON::BI__builtin_neon_vgetq_lane_i16:
2108 case NEON::BI__builtin_neon_vduph_laneq_i16:
2109 case NEON::BI__builtin_neon_vget_lane_i32:
2110 case NEON::BI__builtin_neon_vdups_lane_i32:
2111 case NEON::BI__builtin_neon_vdups_lane_f32:
2112 case NEON::BI__builtin_neon_vgetq_lane_i32:
2113 case NEON::BI__builtin_neon_vdups_laneq_i32:
2114 case NEON::BI__builtin_neon_vget_lane_i64:
2115 case NEON::BI__builtin_neon_vdupd_lane_i64:
2116 case NEON::BI__builtin_neon_vdupd_lane_f64:
2117 case NEON::BI__builtin_neon_vgetq_lane_i64:
2118 case NEON::BI__builtin_neon_vdupd_laneq_i64:
2119 case NEON::BI__builtin_neon_vget_lane_f32:
2120 case NEON::BI__builtin_neon_vget_lane_f64:
2121 case NEON::BI__builtin_neon_vgetq_lane_f32:
2122 case NEON::BI__builtin_neon_vdups_laneq_f32:
2123 case NEON::BI__builtin_neon_vgetq_lane_f64:
2124 case NEON::BI__builtin_neon_vdupd_laneq_f64:
2125 case NEON::BI__builtin_neon_vaddh_f16:
2126 case NEON::BI__builtin_neon_vsubh_f16:
2127 case NEON::BI__builtin_neon_vmulh_f16:
2128 case NEON::BI__builtin_neon_vdivh_f16:
2129 cgm.errorNYI(
expr->getSourceRange(),
2130 std::string(
"unimplemented AArch64 builtin call: ") +
2131 getContext().BuiltinInfo.getName(builtinID));
2132 return mlir::Value{};
2133 case NEON::BI__builtin_neon_vfmah_f16:
2135 std::rotate(ops.begin(), ops.begin() + 1, ops.end());
2139 case NEON::BI__builtin_neon_vfmsh_f16:
2141 std::rotate(ops.begin(), ops.begin() + 1, ops.end());
2142 ops[0] = builder.createFNeg(ops[0]);
2145 case NEON::BI__builtin_neon_vaddd_s64:
2146 case NEON::BI__builtin_neon_vaddd_u64:
2147 case NEON::BI__builtin_neon_vsubd_s64:
2148 case NEON::BI__builtin_neon_vsubd_u64:
2149 case NEON::BI__builtin_neon_vqdmlalh_s16:
2150 case NEON::BI__builtin_neon_vqdmlslh_s16:
2151 case NEON::BI__builtin_neon_vqshlud_n_s64:
2152 case NEON::BI__builtin_neon_vqshld_n_u64:
2153 case NEON::BI__builtin_neon_vqshld_n_s64:
2154 case NEON::BI__builtin_neon_vrshrd_n_u64:
2155 case NEON::BI__builtin_neon_vrshrd_n_s64:
2156 case NEON::BI__builtin_neon_vrsrad_n_u64:
2157 case NEON::BI__builtin_neon_vrsrad_n_s64:
2158 cgm.errorNYI(
expr->getSourceRange(),
2159 std::string(
"unimplemented AArch64 builtin call: ") +
2160 getContext().BuiltinInfo.getName(builtinID));
2161 return mlir::Value{};
2162 case NEON::BI__builtin_neon_vshld_n_s64:
2163 case NEON::BI__builtin_neon_vshld_n_u64: {
2165 std::optional<llvm::APSInt> amt =
2167 assert(amt &&
"Expected argument to be a constant");
2168 return builder.createShiftLeft(loc, ops[0], amt->getZExtValue());
2170 case NEON::BI__builtin_neon_vshrd_n_s64:
2171 case NEON::BI__builtin_neon_vshrd_n_u64:
2172 case NEON::BI__builtin_neon_vsrad_n_s64:
2173 case NEON::BI__builtin_neon_vsrad_n_u64:
2174 case NEON::BI__builtin_neon_vqdmlalh_lane_s16:
2175 case NEON::BI__builtin_neon_vqdmlalh_laneq_s16:
2176 case NEON::BI__builtin_neon_vqdmlslh_lane_s16:
2177 case NEON::BI__builtin_neon_vqdmlslh_laneq_s16:
2178 case NEON::BI__builtin_neon_vqdmlals_s32:
2179 case NEON::BI__builtin_neon_vqdmlsls_s32:
2180 case NEON::BI__builtin_neon_vqdmlals_lane_s32:
2181 case NEON::BI__builtin_neon_vqdmlals_laneq_s32:
2182 case NEON::BI__builtin_neon_vqdmlsls_lane_s32:
2183 case NEON::BI__builtin_neon_vqdmlsls_laneq_s32:
2184 case NEON::BI__builtin_neon_vget_lane_bf16:
2185 cgm.errorNYI(
expr->getSourceRange(),
2186 std::string(
"unimplemented AArch64 builtin call: ") +
2187 getContext().BuiltinInfo.getName(builtinID));
2188 return mlir::Value{};
2189 case NEON::BI__builtin_neon_vduph_lane_bf16: {
2190 return cir::VecExtractOp::create(builder, loc, ops[0], ops[1]);
2192 case NEON::BI__builtin_neon_vduph_lane_f16:
2193 case NEON::BI__builtin_neon_vgetq_lane_bf16:
2194 cgm.errorNYI(
expr->getSourceRange(),
2195 std::string(
"unimplemented AArch64 builtin call: ") +
2196 getContext().BuiltinInfo.getName(builtinID));
2197 return mlir::Value{};
2198 case NEON::BI__builtin_neon_vduph_laneq_bf16: {
2199 return cir::VecExtractOp::create(builder, loc, ops[0], ops[1]);
2201 case NEON::BI__builtin_neon_vduph_laneq_f16:
2202 case NEON::BI__builtin_neon_vcvt_bf16_f32:
2203 case NEON::BI__builtin_neon_vcvtq_low_bf16_f32:
2204 case NEON::BI__builtin_neon_vcvtq_high_bf16_f32:
2205 case clang::AArch64::BI_InterlockedAdd:
2206 case clang::AArch64::BI_InterlockedAdd_acq:
2207 case clang::AArch64::BI_InterlockedAdd_rel:
2208 case clang::AArch64::BI_InterlockedAdd_nf:
2209 case clang::AArch64::BI_InterlockedAdd64:
2210 case clang::AArch64::BI_InterlockedAdd64_acq:
2211 case clang::AArch64::BI_InterlockedAdd64_rel:
2212 case clang::AArch64::BI_InterlockedAdd64_nf:
2213 cgm.errorNYI(
expr->getSourceRange(),
2214 std::string(
"unimplemented AArch64 builtin call: ") +
2215 getContext().BuiltinInfo.getName(builtinID));
2216 return mlir::Value{};
2223 llvm::StringRef intrName;
2225 switch (builtinID) {
2227 return std::nullopt;
2228 case NEON::BI__builtin_neon_vbsl_v:
2229 case NEON::BI__builtin_neon_vbslq_v:
2230 case NEON::BI__builtin_neon_vfma_lane_v:
2231 case NEON::BI__builtin_neon_vfmaq_lane_v:
2232 case NEON::BI__builtin_neon_vfma_laneq_v:
2233 case NEON::BI__builtin_neon_vfmaq_laneq_v:
2234 case NEON::BI__builtin_neon_vfmah_lane_f16:
2235 case NEON::BI__builtin_neon_vfmas_lane_f32:
2236 case NEON::BI__builtin_neon_vfmah_laneq_f16:
2237 case NEON::BI__builtin_neon_vfmas_laneq_f32:
2238 case NEON::BI__builtin_neon_vfmad_lane_f64:
2239 case NEON::BI__builtin_neon_vfmad_laneq_f64:
2240 cgm.errorNYI(
expr->getSourceRange(),
2241 std::string(
"unimplemented AArch64 builtin call: ") +
2242 getContext().BuiltinInfo.getName(builtinID));
2243 return mlir::Value{};
2244 case NEON::BI__builtin_neon_vmull_v: {
2245 intrName = usgn ?
"aarch64.neon.umull" :
"aarch64.neon.smull";
2247 intrName =
"aarch64.neon.pmull";
2248 cir::VectorType argTy = builder.getExtendedOrTruncatedElementVectorType(
2250 return emitNeonCall(
cgm, builder, {argTy, argTy}, ops, intrName, ty, loc);
2252 case NEON::BI__builtin_neon_vmax_v:
2253 case NEON::BI__builtin_neon_vmaxq_v:
2254 intrName = usgn ?
"aarch64.neon.umax" :
"aarch64.neon.smax";
2255 if (cir::isFPOrVectorOfFPType(ty))
2256 intrName =
"aarch64.neon.fmax";
2258 case NEON::BI__builtin_neon_vmaxh_f16:
2259 case NEON::BI__builtin_neon_vmin_v:
2260 case NEON::BI__builtin_neon_vminq_v:
2261 case NEON::BI__builtin_neon_vminh_f16:
2262 cgm.errorNYI(
expr->getSourceRange(),
2263 std::string(
"unimplemented AArch64 builtin call: ") +
2264 getContext().BuiltinInfo.getName(builtinID));
2265 return mlir::Value{};
2266 case NEON::BI__builtin_neon_vabd_v:
2267 case NEON::BI__builtin_neon_vabdq_v:
2268 intrName = usgn ?
"aarch64.neon.uabd" :
"aarch64.neon.sabd";
2269 if (cir::isFPOrVectorOfFPType(ty))
2270 intrName =
"aarch64.neon.fabd";
2272 case NEON::BI__builtin_neon_vpadal_v:
2273 case NEON::BI__builtin_neon_vpadalq_v:
2274 case NEON::BI__builtin_neon_vpmin_v:
2275 case NEON::BI__builtin_neon_vpminq_v:
2276 case NEON::BI__builtin_neon_vpmax_v:
2277 case NEON::BI__builtin_neon_vpmaxq_v:
2278 case NEON::BI__builtin_neon_vminnm_v:
2279 case NEON::BI__builtin_neon_vminnmq_v:
2280 case NEON::BI__builtin_neon_vminnmh_f16:
2281 cgm.errorNYI(
expr->getSourceRange(),
2282 std::string(
"unimplemented AArch64 builtin call: ") +
2283 getContext().BuiltinInfo.getName(builtinID));
2284 return mlir::Value{};
2285 case NEON::BI__builtin_neon_vmaxnm_v:
2286 case NEON::BI__builtin_neon_vmaxnmq_v:
2287 intrName =
"aarch64.neon.fmaxnm";
2289 case NEON::BI__builtin_neon_vmaxnmh_f16:
2290 case NEON::BI__builtin_neon_vrecpss_f32:
2291 case NEON::BI__builtin_neon_vrecpsd_f64:
2292 case NEON::BI__builtin_neon_vrecpsh_f16:
2293 case NEON::BI__builtin_neon_vqshrun_n_v:
2294 case NEON::BI__builtin_neon_vqrshrun_n_v:
2295 case NEON::BI__builtin_neon_vqshrn_n_v:
2296 case NEON::BI__builtin_neon_vrshrn_n_v:
2297 case NEON::BI__builtin_neon_vqrshrn_n_v:
2298 case NEON::BI__builtin_neon_vrndah_f16:
2299 case NEON::BI__builtin_neon_vrnda_v:
2300 case NEON::BI__builtin_neon_vrndaq_v:
2301 case NEON::BI__builtin_neon_vrndih_f16:
2302 case NEON::BI__builtin_neon_vrndmh_f16:
2303 case NEON::BI__builtin_neon_vrndm_v:
2304 case NEON::BI__builtin_neon_vrndmq_v:
2305 case NEON::BI__builtin_neon_vrndnh_f16:
2306 case NEON::BI__builtin_neon_vrndn_v:
2307 case NEON::BI__builtin_neon_vrndnq_v:
2308 case NEON::BI__builtin_neon_vrndns_f32:
2309 case NEON::BI__builtin_neon_vrndph_f16:
2310 case NEON::BI__builtin_neon_vrndp_v:
2311 case NEON::BI__builtin_neon_vrndpq_v:
2312 case NEON::BI__builtin_neon_vrndxh_f16:
2313 case NEON::BI__builtin_neon_vrndx_v:
2314 case NEON::BI__builtin_neon_vrndxq_v:
2315 case NEON::BI__builtin_neon_vrndh_f16:
2316 case NEON::BI__builtin_neon_vrnd32x_f32:
2317 case NEON::BI__builtin_neon_vrnd32xq_f32:
2318 case NEON::BI__builtin_neon_vrnd32x_f64:
2319 case NEON::BI__builtin_neon_vrnd32xq_f64:
2320 case NEON::BI__builtin_neon_vrnd32z_f32:
2321 case NEON::BI__builtin_neon_vrnd32zq_f32:
2322 case NEON::BI__builtin_neon_vrnd32z_f64:
2323 case NEON::BI__builtin_neon_vrnd32zq_f64:
2324 case NEON::BI__builtin_neon_vrnd64x_f32:
2325 case NEON::BI__builtin_neon_vrnd64xq_f32:
2326 case NEON::BI__builtin_neon_vrnd64x_f64:
2327 case NEON::BI__builtin_neon_vrnd64xq_f64:
2328 case NEON::BI__builtin_neon_vrnd64z_f32:
2329 case NEON::BI__builtin_neon_vrnd64zq_f32:
2330 case NEON::BI__builtin_neon_vrnd64z_f64:
2331 case NEON::BI__builtin_neon_vrnd64zq_f64:
2332 case NEON::BI__builtin_neon_vrnd_v:
2333 case NEON::BI__builtin_neon_vrndq_v:
2334 case NEON::BI__builtin_neon_vcvt_f64_v:
2335 case NEON::BI__builtin_neon_vcvtq_f64_v:
2336 case NEON::BI__builtin_neon_vcvt_f64_f32:
2337 case NEON::BI__builtin_neon_vcvt_f32_f64:
2338 case NEON::BI__builtin_neon_vcvt_s32_v:
2339 case NEON::BI__builtin_neon_vcvt_u32_v:
2340 case NEON::BI__builtin_neon_vcvt_s64_v:
2341 case NEON::BI__builtin_neon_vcvt_u64_v:
2342 case NEON::BI__builtin_neon_vcvt_s16_f16:
2343 case NEON::BI__builtin_neon_vcvt_u16_f16:
2344 case NEON::BI__builtin_neon_vcvtq_s32_v:
2345 case NEON::BI__builtin_neon_vcvtq_u32_v:
2346 case NEON::BI__builtin_neon_vcvtq_s64_v:
2347 case NEON::BI__builtin_neon_vcvtq_u64_v:
2348 case NEON::BI__builtin_neon_vcvtq_s16_f16:
2349 case NEON::BI__builtin_neon_vcvtq_u16_f16:
2350 case NEON::BI__builtin_neon_vcvta_s16_f16:
2351 case NEON::BI__builtin_neon_vcvta_u16_f16:
2352 case NEON::BI__builtin_neon_vcvta_s32_v:
2353 case NEON::BI__builtin_neon_vcvtaq_s16_f16:
2354 case NEON::BI__builtin_neon_vcvtaq_s32_v:
2355 case NEON::BI__builtin_neon_vcvta_u32_v:
2356 case NEON::BI__builtin_neon_vcvtaq_u16_f16:
2357 case NEON::BI__builtin_neon_vcvtaq_u32_v:
2358 case NEON::BI__builtin_neon_vcvta_s64_v:
2359 case NEON::BI__builtin_neon_vcvtaq_s64_v:
2360 case NEON::BI__builtin_neon_vcvta_u64_v:
2361 case NEON::BI__builtin_neon_vcvtaq_u64_v:
2362 case NEON::BI__builtin_neon_vcvtm_s16_f16:
2363 case NEON::BI__builtin_neon_vcvtm_s32_v:
2364 case NEON::BI__builtin_neon_vcvtmq_s16_f16:
2365 case NEON::BI__builtin_neon_vcvtmq_s32_v:
2366 case NEON::BI__builtin_neon_vcvtm_u16_f16:
2367 case NEON::BI__builtin_neon_vcvtm_u32_v:
2368 case NEON::BI__builtin_neon_vcvtmq_u16_f16:
2369 case NEON::BI__builtin_neon_vcvtmq_u32_v:
2370 case NEON::BI__builtin_neon_vcvtm_s64_v:
2371 case NEON::BI__builtin_neon_vcvtmq_s64_v:
2372 case NEON::BI__builtin_neon_vcvtm_u64_v:
2373 case NEON::BI__builtin_neon_vcvtmq_u64_v:
2374 case NEON::BI__builtin_neon_vcvtn_s16_f16:
2375 case NEON::BI__builtin_neon_vcvtn_s32_v:
2376 case NEON::BI__builtin_neon_vcvtnq_s16_f16:
2377 case NEON::BI__builtin_neon_vcvtnq_s32_v:
2378 case NEON::BI__builtin_neon_vcvtn_u16_f16:
2379 case NEON::BI__builtin_neon_vcvtn_u32_v:
2380 case NEON::BI__builtin_neon_vcvtnq_u16_f16:
2381 case NEON::BI__builtin_neon_vcvtnq_u32_v:
2382 case NEON::BI__builtin_neon_vcvtn_s64_v:
2383 case NEON::BI__builtin_neon_vcvtnq_s64_v:
2384 case NEON::BI__builtin_neon_vcvtn_u64_v:
2385 case NEON::BI__builtin_neon_vcvtnq_u64_v:
2386 case NEON::BI__builtin_neon_vcvtp_s16_f16:
2387 case NEON::BI__builtin_neon_vcvtp_s32_v:
2388 case NEON::BI__builtin_neon_vcvtpq_s16_f16:
2389 case NEON::BI__builtin_neon_vcvtpq_s32_v:
2390 case NEON::BI__builtin_neon_vcvtp_u16_f16:
2391 case NEON::BI__builtin_neon_vcvtp_u32_v:
2392 case NEON::BI__builtin_neon_vcvtpq_u16_f16:
2393 case NEON::BI__builtin_neon_vcvtpq_u32_v:
2394 case NEON::BI__builtin_neon_vcvtp_s64_v:
2395 case NEON::BI__builtin_neon_vcvtpq_s64_v:
2396 case NEON::BI__builtin_neon_vcvtp_u64_v:
2397 case NEON::BI__builtin_neon_vcvtpq_u64_v:
2398 case NEON::BI__builtin_neon_vmulx_v:
2399 case NEON::BI__builtin_neon_vmulxq_v:
2400 case NEON::BI__builtin_neon_vmulxh_lane_f16:
2401 case NEON::BI__builtin_neon_vmulxh_laneq_f16:
2402 case NEON::BI__builtin_neon_vmul_lane_v:
2403 case NEON::BI__builtin_neon_vmul_laneq_v:
2404 case NEON::BI__builtin_neon_vpmaxnm_v:
2405 case NEON::BI__builtin_neon_vpmaxnmq_v:
2406 case NEON::BI__builtin_neon_vpminnm_v:
2407 case NEON::BI__builtin_neon_vpminnmq_v:
2408 case NEON::BI__builtin_neon_vsqrth_f16:
2409 case NEON::BI__builtin_neon_vsqrt_v:
2410 case NEON::BI__builtin_neon_vsqrtq_v:
2411 case NEON::BI__builtin_neon_vrbit_v:
2412 case NEON::BI__builtin_neon_vrbitq_v:
2413 case NEON::BI__builtin_neon_vmaxv_f16:
2414 case NEON::BI__builtin_neon_vmaxvq_f16:
2415 case NEON::BI__builtin_neon_vminv_f16:
2416 case NEON::BI__builtin_neon_vminvq_f16:
2417 case NEON::BI__builtin_neon_vmaxnmv_f16:
2418 case NEON::BI__builtin_neon_vmaxnmvq_f16:
2419 case NEON::BI__builtin_neon_vminnmv_f16:
2420 case NEON::BI__builtin_neon_vminnmvq_f16:
2421 case NEON::BI__builtin_neon_vmul_n_f64:
2422 case NEON::BI__builtin_neon_vaddlv_u8:
2423 case NEON::BI__builtin_neon_vaddlv_u16:
2424 case NEON::BI__builtin_neon_vaddlvq_u8:
2425 case NEON::BI__builtin_neon_vaddlvq_u16:
2426 case NEON::BI__builtin_neon_vaddlv_s8:
2427 case NEON::BI__builtin_neon_vaddlv_s16:
2428 case NEON::BI__builtin_neon_vaddlvq_s8:
2429 case NEON::BI__builtin_neon_vaddlvq_s16:
2430 case NEON::BI__builtin_neon_vsri_n_v:
2431 case NEON::BI__builtin_neon_vsriq_n_v:
2432 case NEON::BI__builtin_neon_vsli_n_v:
2433 case NEON::BI__builtin_neon_vsliq_n_v:
2434 case NEON::BI__builtin_neon_vsra_n_v:
2435 case NEON::BI__builtin_neon_vsraq_n_v:
2436 case NEON::BI__builtin_neon_vrsra_n_v:
2437 case NEON::BI__builtin_neon_vrsraq_n_v:
2438 case NEON::BI__builtin_neon_vld1_v:
2439 case NEON::BI__builtin_neon_vld1q_v:
2440 case NEON::BI__builtin_neon_vst1_v:
2441 case NEON::BI__builtin_neon_vst1q_v:
2442 case NEON::BI__builtin_neon_vld1_lane_v:
2443 case NEON::BI__builtin_neon_vld1q_lane_v:
2444 case NEON::BI__builtin_neon_vldap1_lane_s64:
2445 case NEON::BI__builtin_neon_vldap1q_lane_s64:
2446 case NEON::BI__builtin_neon_vld1_dup_v:
2447 case NEON::BI__builtin_neon_vld1q_dup_v:
2448 case NEON::BI__builtin_neon_vst1_lane_v:
2449 case NEON::BI__builtin_neon_vst1q_lane_v:
2450 case NEON::BI__builtin_neon_vstl1_lane_s64:
2451 case NEON::BI__builtin_neon_vstl1q_lane_s64:
2452 case NEON::BI__builtin_neon_vld2_v:
2453 case NEON::BI__builtin_neon_vld2q_v:
2454 case NEON::BI__builtin_neon_vld3_v:
2455 case NEON::BI__builtin_neon_vld3q_v:
2456 case NEON::BI__builtin_neon_vld4_v:
2457 case NEON::BI__builtin_neon_vld4q_v:
2458 case NEON::BI__builtin_neon_vld2_dup_v:
2459 case NEON::BI__builtin_neon_vld2q_dup_v:
2460 case NEON::BI__builtin_neon_vld3_dup_v:
2461 case NEON::BI__builtin_neon_vld3q_dup_v:
2462 case NEON::BI__builtin_neon_vld4_dup_v:
2463 case NEON::BI__builtin_neon_vld4q_dup_v:
2464 case NEON::BI__builtin_neon_vld2_lane_v:
2465 case NEON::BI__builtin_neon_vld2q_lane_v:
2466 case NEON::BI__builtin_neon_vld3_lane_v:
2467 case NEON::BI__builtin_neon_vld3q_lane_v:
2468 case NEON::BI__builtin_neon_vld4_lane_v:
2469 case NEON::BI__builtin_neon_vld4q_lane_v:
2470 case NEON::BI__builtin_neon_vst2_v:
2471 case NEON::BI__builtin_neon_vst2q_v:
2472 case NEON::BI__builtin_neon_vst2_lane_v:
2473 case NEON::BI__builtin_neon_vst2q_lane_v:
2474 case NEON::BI__builtin_neon_vst3_v:
2475 case NEON::BI__builtin_neon_vst3q_v:
2476 case NEON::BI__builtin_neon_vst3_lane_v:
2477 case NEON::BI__builtin_neon_vst3q_lane_v:
2478 case NEON::BI__builtin_neon_vst4_v:
2479 case NEON::BI__builtin_neon_vst4q_v:
2480 case NEON::BI__builtin_neon_vst4_lane_v:
2481 case NEON::BI__builtin_neon_vst4q_lane_v:
2482 case NEON::BI__builtin_neon_vtrn_v:
2483 case NEON::BI__builtin_neon_vtrnq_v:
2484 case NEON::BI__builtin_neon_vuzp_v:
2485 case NEON::BI__builtin_neon_vuzpq_v:
2486 case NEON::BI__builtin_neon_vzip_v:
2487 case NEON::BI__builtin_neon_vzipq_v:
2488 case NEON::BI__builtin_neon_vqtbl1q_v:
2489 case NEON::BI__builtin_neon_vqtbl2q_v:
2490 case NEON::BI__builtin_neon_vqtbl3q_v:
2491 case NEON::BI__builtin_neon_vqtbl4q_v:
2492 case NEON::BI__builtin_neon_vqtbx1q_v:
2493 case NEON::BI__builtin_neon_vqtbx2q_v:
2494 case NEON::BI__builtin_neon_vqtbx3q_v:
2495 case NEON::BI__builtin_neon_vqtbx4q_v:
2496 case NEON::BI__builtin_neon_vsqadd_v:
2497 case NEON::BI__builtin_neon_vsqaddq_v:
2498 case NEON::BI__builtin_neon_vuqadd_v:
2499 case NEON::BI__builtin_neon_vuqaddq_v:
2500 case NEON::BI__builtin_neon_vluti2_laneq_mf8:
2501 case NEON::BI__builtin_neon_vluti2_laneq_bf16:
2502 case NEON::BI__builtin_neon_vluti2_laneq_f16:
2503 case NEON::BI__builtin_neon_vluti2_laneq_p16:
2504 case NEON::BI__builtin_neon_vluti2_laneq_p8:
2505 case NEON::BI__builtin_neon_vluti2_laneq_s16:
2506 case NEON::BI__builtin_neon_vluti2_laneq_s8:
2507 case NEON::BI__builtin_neon_vluti2_laneq_u16:
2508 case NEON::BI__builtin_neon_vluti2_laneq_u8:
2509 case NEON::BI__builtin_neon_vluti2q_laneq_mf8:
2510 case NEON::BI__builtin_neon_vluti2q_laneq_bf16:
2511 case NEON::BI__builtin_neon_vluti2q_laneq_f16:
2512 case NEON::BI__builtin_neon_vluti2q_laneq_p16:
2513 case NEON::BI__builtin_neon_vluti2q_laneq_p8:
2514 case NEON::BI__builtin_neon_vluti2q_laneq_s16:
2515 case NEON::BI__builtin_neon_vluti2q_laneq_s8:
2516 case NEON::BI__builtin_neon_vluti2q_laneq_u16:
2517 case NEON::BI__builtin_neon_vluti2q_laneq_u8:
2518 case NEON::BI__builtin_neon_vluti2_lane_mf8:
2519 case NEON::BI__builtin_neon_vluti2_lane_bf16:
2520 case NEON::BI__builtin_neon_vluti2_lane_f16:
2521 case NEON::BI__builtin_neon_vluti2_lane_p16:
2522 case NEON::BI__builtin_neon_vluti2_lane_p8:
2523 case NEON::BI__builtin_neon_vluti2_lane_s16:
2524 case NEON::BI__builtin_neon_vluti2_lane_s8:
2525 case NEON::BI__builtin_neon_vluti2_lane_u16:
2526 case NEON::BI__builtin_neon_vluti2_lane_u8:
2527 case NEON::BI__builtin_neon_vluti2q_lane_mf8:
2528 case NEON::BI__builtin_neon_vluti2q_lane_bf16:
2529 case NEON::BI__builtin_neon_vluti2q_lane_f16:
2530 case NEON::BI__builtin_neon_vluti2q_lane_p16:
2531 case NEON::BI__builtin_neon_vluti2q_lane_p8:
2532 case NEON::BI__builtin_neon_vluti2q_lane_s16:
2533 case NEON::BI__builtin_neon_vluti2q_lane_s8:
2534 case NEON::BI__builtin_neon_vluti2q_lane_u16:
2535 case NEON::BI__builtin_neon_vluti2q_lane_u8:
2536 case NEON::BI__builtin_neon_vluti4q_lane_mf8:
2537 case NEON::BI__builtin_neon_vluti4q_lane_p8:
2538 case NEON::BI__builtin_neon_vluti4q_lane_s8:
2539 case NEON::BI__builtin_neon_vluti4q_lane_u8:
2540 case NEON::BI__builtin_neon_vluti4q_laneq_mf8:
2541 case NEON::BI__builtin_neon_vluti4q_laneq_p8:
2542 case NEON::BI__builtin_neon_vluti4q_laneq_s8:
2543 case NEON::BI__builtin_neon_vluti4q_laneq_u8:
2544 case NEON::BI__builtin_neon_vluti4q_lane_bf16_x2:
2545 case NEON::BI__builtin_neon_vluti4q_lane_f16_x2:
2546 case NEON::BI__builtin_neon_vluti4q_lane_p16_x2:
2547 case NEON::BI__builtin_neon_vluti4q_lane_s16_x2:
2548 case NEON::BI__builtin_neon_vluti4q_lane_u16_x2:
2549 case NEON::BI__builtin_neon_vluti4q_laneq_bf16_x2:
2550 case NEON::BI__builtin_neon_vluti4q_laneq_f16_x2:
2551 case NEON::BI__builtin_neon_vluti4q_laneq_p16_x2:
2552 case NEON::BI__builtin_neon_vluti4q_laneq_s16_x2:
2553 case NEON::BI__builtin_neon_vluti4q_laneq_u16_x2:
2554 case NEON::BI__builtin_neon_vmmlaq_f16_mf8_fpm:
2555 case NEON::BI__builtin_neon_vmmlaq_f32_mf8_fpm:
2556 case NEON::BI__builtin_neon_vcvt1_low_bf16_mf8_fpm:
2557 case NEON::BI__builtin_neon_vcvt1_bf16_mf8_fpm:
2558 case NEON::BI__builtin_neon_vcvt1_high_bf16_mf8_fpm:
2559 case NEON::BI__builtin_neon_vcvt2_low_bf16_mf8_fpm:
2560 case NEON::BI__builtin_neon_vcvt2_bf16_mf8_fpm:
2561 case NEON::BI__builtin_neon_vcvt2_high_bf16_mf8_fpm:
2562 case NEON::BI__builtin_neon_vcvt1_low_f16_mf8_fpm:
2563 case NEON::BI__builtin_neon_vcvt1_f16_mf8_fpm:
2564 case NEON::BI__builtin_neon_vcvt1_high_f16_mf8_fpm:
2565 case NEON::BI__builtin_neon_vcvt2_low_f16_mf8_fpm:
2566 case NEON::BI__builtin_neon_vcvt2_f16_mf8_fpm:
2567 case NEON::BI__builtin_neon_vcvt2_high_f16_mf8_fpm:
2568 case NEON::BI__builtin_neon_vcvt_mf8_f32_fpm:
2569 case NEON::BI__builtin_neon_vcvt_mf8_f16_fpm:
2570 case NEON::BI__builtin_neon_vcvtq_mf8_f16_fpm:
2571 case NEON::BI__builtin_neon_vcvt_high_mf8_f32_fpm:
2572 case NEON::BI__builtin_neon_vdot_f16_mf8_fpm:
2573 case NEON::BI__builtin_neon_vdotq_f16_mf8_fpm:
2574 case NEON::BI__builtin_neon_vdot_lane_f16_mf8_fpm:
2575 case NEON::BI__builtin_neon_vdotq_lane_f16_mf8_fpm:
2576 case NEON::BI__builtin_neon_vdot_laneq_f16_mf8_fpm:
2577 case NEON::BI__builtin_neon_vdotq_laneq_f16_mf8_fpm:
2578 case NEON::BI__builtin_neon_vdot_f32_mf8_fpm:
2579 case NEON::BI__builtin_neon_vdotq_f32_mf8_fpm:
2580 case NEON::BI__builtin_neon_vdot_lane_f32_mf8_fpm:
2581 case NEON::BI__builtin_neon_vdotq_lane_f32_mf8_fpm:
2582 case NEON::BI__builtin_neon_vdot_laneq_f32_mf8_fpm:
2583 case NEON::BI__builtin_neon_vdotq_laneq_f32_mf8_fpm:
2584 case NEON::BI__builtin_neon_vmlalbq_f16_mf8_fpm:
2585 case NEON::BI__builtin_neon_vmlaltq_f16_mf8_fpm:
2586 case NEON::BI__builtin_neon_vmlallbbq_f32_mf8_fpm:
2587 case NEON::BI__builtin_neon_vmlallbtq_f32_mf8_fpm:
2588 case NEON::BI__builtin_neon_vmlalltbq_f32_mf8_fpm:
2589 case NEON::BI__builtin_neon_vmlallttq_f32_mf8_fpm:
2590 case NEON::BI__builtin_neon_vmlalbq_lane_f16_mf8_fpm:
2591 case NEON::BI__builtin_neon_vmlalbq_laneq_f16_mf8_fpm:
2592 case NEON::BI__builtin_neon_vmlaltq_lane_f16_mf8_fpm:
2593 case NEON::BI__builtin_neon_vmlaltq_laneq_f16_mf8_fpm:
2594 case NEON::BI__builtin_neon_vmlallbbq_lane_f32_mf8_fpm:
2595 case NEON::BI__builtin_neon_vmlallbbq_laneq_f32_mf8_fpm:
2596 case NEON::BI__builtin_neon_vmlallbtq_lane_f32_mf8_fpm:
2597 case NEON::BI__builtin_neon_vmlallbtq_laneq_f32_mf8_fpm:
2598 case NEON::BI__builtin_neon_vmlalltbq_lane_f32_mf8_fpm:
2599 case NEON::BI__builtin_neon_vmlalltbq_laneq_f32_mf8_fpm:
2600 case NEON::BI__builtin_neon_vmlallttq_lane_f32_mf8_fpm:
2601 case NEON::BI__builtin_neon_vmlallttq_laneq_f32_mf8_fpm:
2602 case NEON::BI__builtin_neon_vamin_f16:
2603 case NEON::BI__builtin_neon_vaminq_f16:
2604 case NEON::BI__builtin_neon_vamin_f32:
2605 case NEON::BI__builtin_neon_vaminq_f32:
2606 case NEON::BI__builtin_neon_vaminq_f64:
2607 case NEON::BI__builtin_neon_vamax_f16:
2608 case NEON::BI__builtin_neon_vamaxq_f16:
2609 case NEON::BI__builtin_neon_vamax_f32:
2610 case NEON::BI__builtin_neon_vamaxq_f32:
2611 case NEON::BI__builtin_neon_vamaxq_f64:
2612 case NEON::BI__builtin_neon_vscale_f16:
2613 case NEON::BI__builtin_neon_vscaleq_f16:
2614 case NEON::BI__builtin_neon_vscale_f32:
2615 case NEON::BI__builtin_neon_vscaleq_f32:
2616 case NEON::BI__builtin_neon_vscaleq_f64:
2617 cgm.errorNYI(
expr->getSourceRange(),
2618 std::string(
"unimplemented AArch64 builtin call: ") +
2619 getContext().BuiltinInfo.getName(builtinID));
2620 return mlir::Value{};