399 case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u32:
400 case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u32:
401 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i32:
402 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u32:
403 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i32:
404 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u32:
405 case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b32:
406 case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b32:
407 case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b32:
408 case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u64:
409 case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u64:
410 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i64:
411 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u64:
412 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i64:
413 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u64:
414 case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b64:
415 case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b64:
416 case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b64: {
417 cgm.errorNYI(
expr->getSourceRange(),
418 std::string(
"unimplemented AMDGPU builtin call: ") +
420 return mlir::Value{};
422 case AMDGPU::BI__builtin_amdgcn_div_scale:
423 case AMDGPU::BI__builtin_amdgcn_div_scalef: {
425 llvm::StringRef intrinsicName =
"amdgcn.div.scale";
430 auto i1Ty = builder.getUIntNTy(1);
431 mlir::Type resMembers[] = {x.getType(), i1Ty};
433 builder.getAnonRecordTy(resMembers,
false,
436 mlir::Value structResult =
437 cir::LLVMIntrinsicCallOp::create(builder,
getLoc(
expr->getExprLoc()),
438 builder.getStringAttr(intrinsicName),
442 mlir::Value result = cir::ExtractMemberOp::create(
443 builder,
getLoc(
expr->getExprLoc()), x.getType(), structResult, 0);
444 mlir::Value flag = cir::ExtractMemberOp::create(
445 builder,
getLoc(
expr->getExprLoc()), i1Ty, structResult, 1);
448 mlir::Value flagToStore =
449 cir::CastOp::create(builder,
getLoc(
expr->getExprLoc()), flagType,
450 cir::CastKind::int_to_bool, flag);
451 builder.createStore(
getLoc(
expr->getExprLoc()), flagToStore, flagOutPtr);
454 case AMDGPU::BI__builtin_amdgcn_div_fmas:
455 case AMDGPU::BI__builtin_amdgcn_div_fmasf:
458 case AMDGPU::BI__builtin_amdgcn_mov_dpp8:
459 case AMDGPU::BI__builtin_amdgcn_mov_dpp:
460 case AMDGPU::BI__builtin_amdgcn_update_dpp: {
461 mlir::Location loc =
getLoc(
expr->getExprLoc());
462 unsigned iceArguments = 0;
466 assert(
expr->getNumArgs() == 5 ||
expr->getNumArgs() == 6 ||
467 expr->getNumArgs() == 2);
470 unsigned size =
cgm.getDataLayout().getTypeSizeInBits(dataTy);
471 cir::IntType intTy = builder.getUIntNTy(std::max(size, 32u));
473 bool isMovDpp8 = builtinId == AMDGPU::BI__builtin_amdgcn_mov_dpp8;
474 bool isMovDpp = builtinId == AMDGPU::BI__builtin_amdgcn_mov_dpp;
475 bool isUpdateDpp = builtinId == AMDGPU::BI__builtin_amdgcn_update_dpp;
476 llvm::StringRef intrinsicName =
477 isMovDpp8 ?
"amdgcn.mov.dpp8" :
"amdgcn.update.dpp";
478 cir::FuncType intrinsicTy =
480 : llvm::Intrinsic::amdgcn_update_dpp,
483 auto coerceTo = [&](mlir::Value from, mlir::Type to) -> mlir::Value {
484 if (from.getType() == to)
486 if (mlir::isa<cir::IntType>(from.getType()) &&
487 mlir::isa<cir::IntType>(to))
488 return builder.createIntCast(from, to);
489 return builder.createBitcast(from, to);
497 args.push_back(builder.getConstant(loc, cir::PoisonAttr::get(intTy)));
501 unsigned numPromotedArgs = isUpdateDpp ? 2u : 1u;
502 for (
unsigned i = 0; i !=
expr->getNumArgs(); ++i) {
505 if (i < numPromotedArgs && size < 32) {
506 mlir::Type sameWidthUTy = builder.getUIntNTy(size);
507 if (v.getType() != sameWidthUTy)
508 v = builder.createBitcast(v, sameWidthUTy);
509 v = builder.createIntCast(v, intTy);
511 args.push_back(coerceTo(v, intrinsicTy.getInput(i +
unsigned(isMovDpp))));
514 mlir::Value result = builder.emitIntrinsicCallOp(loc, intrinsicName, intTy,
515 mlir::ValueRange(args));
516 if (size < 32 && !mlir::isa<cir::IntType>(dataTy))
517 result = builder.createIntCast(result, builder.getUIntNTy(size));
518 return coerceTo(result, dataTy);
520 case AMDGPU::BI__builtin_amdgcn_permlane16:
521 case AMDGPU::BI__builtin_amdgcn_permlanex16: {
522 llvm::StringRef intrinsicName =
523 builtinId == AMDGPU::BI__builtin_amdgcn_permlane16
524 ?
"amdgcn.permlane16"
525 :
"amdgcn.permlanex16";
528 case AMDGPU::BI__builtin_amdgcn_permlane64:
531 case AMDGPU::BI__builtin_amdgcn_permlane_bcast:
534 case AMDGPU::BI__builtin_amdgcn_permlane_up:
537 case AMDGPU::BI__builtin_amdgcn_permlane_down:
540 case AMDGPU::BI__builtin_amdgcn_permlane_xor:
543 case AMDGPU::BI__builtin_amdgcn_readlane:
546 case AMDGPU::BI__builtin_amdgcn_readfirstlane:
549 case AMDGPU::BI__builtin_amdgcn_wave_shuffle:
552 case AMDGPU::BI__builtin_amdgcn_div_fixup:
553 case AMDGPU::BI__builtin_amdgcn_div_fixupf:
554 case AMDGPU::BI__builtin_amdgcn_div_fixuph: {
558 return builder.emitIntrinsicCallOp(
getLoc(
expr->getExprLoc()),
559 "amdgcn.div.fixup", src0.getType(),
560 mlir::ValueRange{src0, src1, src2});
562 case AMDGPU::BI__builtin_amdgcn_trig_preop:
563 case AMDGPU::BI__builtin_amdgcn_trig_preopf:
566 case AMDGPU::BI__builtin_amdgcn_rcp:
567 case AMDGPU::BI__builtin_amdgcn_rcpf:
568 case AMDGPU::BI__builtin_amdgcn_rcph:
569 case AMDGPU::BI__builtin_amdgcn_rcp_bf16: {
572 case AMDGPU::BI__builtin_amdgcn_sqrt:
573 case AMDGPU::BI__builtin_amdgcn_sqrtf:
574 case AMDGPU::BI__builtin_amdgcn_sqrth:
575 case AMDGPU::BI__builtin_amdgcn_sqrt_bf16: {
578 case AMDGPU::BI__builtin_amdgcn_rsq:
579 case AMDGPU::BI__builtin_amdgcn_rsqf:
580 case AMDGPU::BI__builtin_amdgcn_rsqh:
581 case AMDGPU::BI__builtin_amdgcn_rsq_bf16: {
584 case AMDGPU::BI__builtin_amdgcn_rsq_clamp:
585 case AMDGPU::BI__builtin_amdgcn_rsq_clampf: {
589 case AMDGPU::BI__builtin_amdgcn_sinf:
590 case AMDGPU::BI__builtin_amdgcn_sinh:
591 case AMDGPU::BI__builtin_amdgcn_sin_bf16: {
594 case AMDGPU::BI__builtin_amdgcn_cosf:
595 case AMDGPU::BI__builtin_amdgcn_cosh:
596 case AMDGPU::BI__builtin_amdgcn_cos_bf16: {
599 case AMDGPU::BI__builtin_amdgcn_dispatch_ptr:
601 case AMDGPU::BI__builtin_amdgcn_logf:
602 case AMDGPU::BI__builtin_amdgcn_log_bf16: {
605 case AMDGPU::BI__builtin_amdgcn_exp2f:
606 case AMDGPU::BI__builtin_amdgcn_exp2_bf16: {
609 case AMDGPU::BI__builtin_amdgcn_log_clampf: {
610 cgm.errorNYI(
expr->getSourceRange(),
611 std::string(
"unimplemented AMDGPU builtin call: ") +
613 return mlir::Value{};
615 case AMDGPU::BI__builtin_amdgcn_ldexp:
616 case AMDGPU::BI__builtin_amdgcn_ldexpf:
617 case AMDGPU::BI__builtin_amdgcn_ldexph: {
624 builtinId == AMDGPU::BI__builtin_amdgcn_ldexph
625 ? cir::CastOp::create(builder,
getLoc(
expr->getExprLoc()),
626 builder.getSInt16Ty(),
627 cir::CastKind::integral, src1)
629 return builder.emitIntrinsicCallOp(
getLoc(
expr->getExprLoc()),
"ldexp",
631 mlir::ValueRange{src0, exp});
633 case AMDGPU::BI__builtin_amdgcn_frexp_mant:
634 case AMDGPU::BI__builtin_amdgcn_frexp_mantf:
635 case AMDGPU::BI__builtin_amdgcn_frexp_manth: {
639 case AMDGPU::BI__builtin_amdgcn_frexp_exp:
640 case AMDGPU::BI__builtin_amdgcn_frexp_expf:
641 case AMDGPU::BI__builtin_amdgcn_frexp_exph: {
642 cgm.errorNYI(
expr->getSourceRange(),
643 std::string(
"unimplemented AMDGPU builtin call: ") +
645 return mlir::Value{};
647 case AMDGPU::BI__builtin_amdgcn_fract:
648 case AMDGPU::BI__builtin_amdgcn_fractf:
649 case AMDGPU::BI__builtin_amdgcn_fracth:
651 case AMDGPU::BI__builtin_amdgcn_lerp: {
652 cgm.errorNYI(
expr->getSourceRange(),
653 std::string(
"unimplemented AMDGPU builtin call: ") +
655 return mlir::Value{};
657 case AMDGPU::BI__builtin_amdgcn_ubfe:
659 case AMDGPU::BI__builtin_amdgcn_sbfe:
661 case AMDGPU::BI__builtin_amdgcn_ballot_w32:
662 case AMDGPU::BI__builtin_amdgcn_ballot_w64:
666 case AMDGPU::BI__builtin_amdgcn_inverse_ballot_w32:
667 case AMDGPU::BI__builtin_amdgcn_inverse_ballot_w64:
671 case AMDGPU::BI__builtin_amdgcn_tanhf:
672 case AMDGPU::BI__builtin_amdgcn_tanhh:
673 case AMDGPU::BI__builtin_amdgcn_tanh_bf16: {
676 case AMDGPU::BI__builtin_amdgcn_uicmp:
677 case AMDGPU::BI__builtin_amdgcn_uicmpl:
678 case AMDGPU::BI__builtin_amdgcn_sicmp:
679 case AMDGPU::BI__builtin_amdgcn_sicmpl:
680 case AMDGPU::BI__builtin_amdgcn_fcmp:
681 case AMDGPU::BI__builtin_amdgcn_fcmpf: {
686 expr->getArg(2)->EvaluateKnownConstInt(
getContext()).getZExtValue();
692 pred = cir::CmpOpKind::eq;
696 pred = cir::CmpOpKind::ne;
701 pred = cir::CmpOpKind::gt;
706 pred = cir::CmpOpKind::ge;
711 pred = cir::CmpOpKind::lt;
716 pred = cir::CmpOpKind::le;
719 pred = cir::CmpOpKind::one;
722 pred = cir::CmpOpKind::uno;
725 cgm.errorNYI(
expr->getSourceRange(),
726 "amdgcn compare with unsupported predicate");
727 return mlir::Value{};
730 mlir::Location loc =
getLoc(
expr->getExprLoc());
731 mlir::Value cmp = builder.createCompare(loc, pred, lhs, rhs);
732 return builder.emitIntrinsicCallOp(loc,
"amdgcn.ballot",
735 case AMDGPU::BI__builtin_amdgcn_class:
736 case AMDGPU::BI__builtin_amdgcn_classf:
737 case AMDGPU::BI__builtin_amdgcn_classh:
741 case AMDGPU::BI__builtin_amdgcn_fmed3f:
742 case AMDGPU::BI__builtin_amdgcn_fmed3h:
744 case AMDGPU::BI__builtin_amdgcn_ds_append:
745 case AMDGPU::BI__builtin_amdgcn_ds_consume: {
746 cgm.errorNYI(
expr->getSourceRange(),
747 std::string(
"unimplemented AMDGPU builtin call: ") +
749 return mlir::Value{};
751 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_i32:
752 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_v2i32:
753 case AMDGPU::BI__builtin_amdgcn_global_load_tr8_b64_v2i32:
757 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4i16:
758 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4f16:
759 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4bf16:
760 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8i16:
761 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8f16:
762 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8bf16:
763 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8i16:
764 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8f16:
765 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8bf16:
769 case AMDGPU::BI__builtin_amdgcn_global_load_tr4_b64_v2i32:
773 case AMDGPU::BI__builtin_amdgcn_global_load_tr6_b96_v3i32:
777 case AMDGPU::BI__builtin_amdgcn_ds_load_tr4_b64_v2i32:
781 case AMDGPU::BI__builtin_amdgcn_ds_load_tr6_b96_v3i32:
785 case AMDGPU::BI__builtin_amdgcn_ds_load_tr8_b64_v2i32:
789 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8i16:
790 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8f16:
791 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8bf16:
795 case AMDGPU::BI__builtin_amdgcn_ds_read_tr4_b64_v2i32:
799 case AMDGPU::BI__builtin_amdgcn_ds_read_tr8_b64_v2i32:
803 case AMDGPU::BI__builtin_amdgcn_ds_read_tr6_b96_v3i32:
807 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4i16:
808 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4f16:
809 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4bf16:
813 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b32:
814 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b64:
815 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b128:
816 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b32:
817 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b64:
818 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b128: {
819 cgm.errorNYI(
expr->getSourceRange(),
820 std::string(
"unimplemented AMDGPU builtin call: ") +
822 return mlir::Value{};
824 case AMDGPU::BI__builtin_amdgcn_cluster_load_b32:
828 case AMDGPU::BI__builtin_amdgcn_cluster_load_b64:
832 case AMDGPU::BI__builtin_amdgcn_cluster_load_b128:
836 case AMDGPU::BI__builtin_amdgcn_load_to_lds:
838 expr,
"amdgcn.load.to.lds",
839 cir::VoidType::get(builder.getContext()))
841 case AMDGPU::BI__builtin_amdgcn_load_async_to_lds:
843 expr,
"amdgcn.load.async.to.lds",
844 cir::VoidType::get(builder.getContext()))
846 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_32x4B:
847 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_32x4B:
848 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_16x8B:
849 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_16x8B:
850 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_8x16B:
851 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_8x16B: {
852 cgm.errorNYI(
expr->getSourceRange(),
853 std::string(
"unimplemented AMDGPU builtin call: ") +
855 return mlir::Value{};
857 case AMDGPU::BI__builtin_amdgcn_get_fpenv:
858 case AMDGPU::BI__builtin_amdgcn_set_fpenv: {
859 cgm.errorNYI(
expr->getSourceRange(),
860 std::string(
"unimplemented AMDGPU builtin call: ") +
862 return mlir::Value{};
864 case AMDGPU::BI__builtin_amdgcn_read_exec:
865 case AMDGPU::BI__builtin_amdgcn_read_exec_lo:
866 case AMDGPU::BI__builtin_amdgcn_read_exec_hi: {
870 mlir::Location loc =
getLoc(
expr->getExprLoc());
871 unsigned registerWidth =
872 builtinId == AMDGPU::BI__builtin_amdgcn_read_exec_lo ? 32 : 64;
873 unsigned ballotWidth =
874 std::max(
getTarget().getGridValue().GV_Warp_Size, registerWidth);
875 cir::IntType ballotTy = builder.getUIntNTy(ballotWidth);
877 mlir::Value truePred = builder.getBool(
true, loc).getResult();
879 builder.emitIntrinsicCallOp(loc,
"amdgcn.ballot", ballotTy, truePred);
881 if (builtinId == AMDGPU::BI__builtin_amdgcn_read_exec_hi)
882 result = builder.createShiftRight(loc, result, 32);
885 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray:
886 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_h:
887 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_l:
888 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_lh: {
889 cgm.errorNYI(
expr->getSourceRange(),
890 std::string(
"unimplemented AMDGPU builtin call: ") +
892 return mlir::Value{};
894 case AMDGPU::BI__builtin_amdgcn_image_bvh8_intersect_ray:
895 case AMDGPU::BI__builtin_amdgcn_image_bvh_dual_intersect_ray: {
896 cgm.errorNYI(
expr->getSourceRange(),
897 std::string(
"unimplemented AMDGPU builtin call: ") +
899 return mlir::Value{};
901 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_rtn:
902 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push4_pop1_rtn:
903 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop1_rtn:
904 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop2_rtn: {
905 cgm.errorNYI(
expr->getSourceRange(),
906 std::string(
"unimplemented AMDGPU builtin call: ") +
908 return mlir::Value{};
910 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f32_i32:
911 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f16_i32:
913 "amdgcn.image.load.1d",
false);
914 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f32_i32:
915 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f16_i32:
917 *
this,
expr,
"amdgcn.image.load.1darray",
false);
918 case AMDGPU::BI__builtin_amdgcn_image_load_2d_f32_i32:
919 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f32_i32:
920 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f16_i32:
922 "amdgcn.image.load.2d",
false);
923 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_f32_i32:
924 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f32_i32:
925 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f16_i32:
927 *
this,
expr,
"amdgcn.image.load.2darray",
false);
928 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f32_i32:
929 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f16_i32:
931 "amdgcn.image.load.3d",
false);
932 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f32_i32:
933 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f16_i32:
935 "amdgcn.image.load.cube",
false);
936 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f32_i32:
937 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f16_i32:
939 *
this,
expr,
"amdgcn.image.load.mip.1d",
false);
940 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f32_i32:
941 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f16_i32:
943 *
this,
expr,
"amdgcn.image.load.mip.1darray",
false);
944 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_f32_i32:
945 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f32_i32:
946 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f16_i32:
948 *
this,
expr,
"amdgcn.image.load.mip.2d",
false);
949 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_f32_i32:
950 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f32_i32:
951 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f16_i32:
953 *
this,
expr,
"amdgcn.image.load.mip.2darray",
false);
954 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f32_i32:
955 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f16_i32:
957 *
this,
expr,
"amdgcn.image.load.mip.3d",
false);
958 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f32_i32:
959 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f16_i32:
961 *
this,
expr,
"amdgcn.image.load.mip.cube",
false);
962 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f32_i32:
963 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f16_i32:
965 "amdgcn.image.store.1d",
true);
966 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f32_i32:
967 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f16_i32:
969 *
this,
expr,
"amdgcn.image.store.1darray",
true);
970 case AMDGPU::BI__builtin_amdgcn_image_store_2d_f32_i32:
971 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f32_i32:
972 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f16_i32:
974 "amdgcn.image.store.2d",
true);
975 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_f32_i32:
976 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f32_i32:
977 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f16_i32:
979 *
this,
expr,
"amdgcn.image.store.2darray",
true);
980 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f32_i32:
981 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f16_i32:
983 "amdgcn.image.store.3d",
true);
984 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f32_i32:
985 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f16_i32:
987 "amdgcn.image.store.cube",
true);
988 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f32_i32:
989 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f16_i32:
991 *
this,
expr,
"amdgcn.image.store.mip.1d",
true);
992 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f32_i32:
993 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f16_i32:
995 *
this,
expr,
"amdgcn.image.store.mip.1darray",
true);
996 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_f32_i32:
997 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f32_i32:
998 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f16_i32:
1000 *
this,
expr,
"amdgcn.image.store.mip.2d",
true);
1001 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_f32_i32:
1002 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f32_i32:
1003 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f16_i32:
1005 *
this,
expr,
"amdgcn.image.store.mip.2darray",
true);
1006 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f32_i32:
1007 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f16_i32:
1009 *
this,
expr,
"amdgcn.image.store.mip.3d",
true);
1010 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f32_i32:
1011 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f16_i32:
1013 *
this,
expr,
"amdgcn.image.store.mip.cube",
true);
1014 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f32_f32:
1015 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f16_f32:
1017 "amdgcn.image.sample.1d",
false);
1018 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f32_f32:
1019 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f16_f32:
1021 *
this,
expr,
"amdgcn.image.sample.1darray",
false);
1022 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_f32_f32:
1023 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f32_f32:
1024 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f16_f32:
1026 "amdgcn.image.sample.2d",
false);
1027 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_f32_f32:
1028 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f32_f32:
1029 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f16_f32:
1031 *
this,
expr,
"amdgcn.image.sample.2darray",
false);
1032 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f32_f32:
1033 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f16_f32:
1035 "amdgcn.image.sample.3d",
false);
1036 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f32_f32:
1037 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f16_f32:
1039 *
this,
expr,
"amdgcn.image.sample.cube",
false);
1040 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_1d_v4f32_f32:
1041 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_1d_v4f16_f32:
1043 *
this,
expr,
"amdgcn.image.sample.lz.1d",
false);
1044 case AMDGPU::BI__builtin_amdgcn_image_sample_l_1d_v4f32_f32:
1045 case AMDGPU::BI__builtin_amdgcn_image_sample_l_1d_v4f16_f32:
1047 *
this,
expr,
"amdgcn.image.sample.l.1d",
false);
1048 case AMDGPU::BI__builtin_amdgcn_image_sample_d_1d_v4f32_f32:
1049 case AMDGPU::BI__builtin_amdgcn_image_sample_d_1d_v4f16_f32:
1051 *
this,
expr,
"amdgcn.image.sample.d.1d",
false);
1052 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_v4f32_f32:
1053 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_v4f16_f32:
1054 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_f32_f32:
1056 *
this,
expr,
"amdgcn.image.sample.lz.2d",
false);
1057 case AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_v4f32_f32:
1058 case AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_v4f16_f32:
1059 case AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_f32_f32:
1061 *
this,
expr,
"amdgcn.image.sample.l.2d",
false);
1062 case AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_v4f32_f32:
1063 case AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_v4f16_f32:
1064 case AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_f32_f32:
1066 *
this,
expr,
"amdgcn.image.sample.d.2d",
false);
1067 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_3d_v4f32_f32:
1068 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_3d_v4f16_f32:
1070 *
this,
expr,
"amdgcn.image.sample.lz.3d",
false);
1071 case AMDGPU::BI__builtin_amdgcn_image_sample_l_3d_v4f32_f32:
1072 case AMDGPU::BI__builtin_amdgcn_image_sample_l_3d_v4f16_f32:
1074 *
this,
expr,
"amdgcn.image.sample.l.3d",
false);
1075 case AMDGPU::BI__builtin_amdgcn_image_sample_d_3d_v4f32_f32:
1076 case AMDGPU::BI__builtin_amdgcn_image_sample_d_3d_v4f16_f32:
1078 *
this,
expr,
"amdgcn.image.sample.d.3d",
false);
1079 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_cube_v4f32_f32:
1080 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_cube_v4f16_f32:
1082 *
this,
expr,
"amdgcn.image.sample.lz.cube",
false);
1083 case AMDGPU::BI__builtin_amdgcn_image_sample_l_cube_v4f32_f32:
1084 case AMDGPU::BI__builtin_amdgcn_image_sample_l_cube_v4f16_f32:
1086 *
this,
expr,
"amdgcn.image.sample.l.cube",
false);
1087 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_1darray_v4f32_f32:
1088 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_1darray_v4f16_f32:
1090 *
this,
expr,
"amdgcn.image.sample.lz.1darray",
false);
1091 case AMDGPU::BI__builtin_amdgcn_image_sample_l_1darray_v4f32_f32:
1092 case AMDGPU::BI__builtin_amdgcn_image_sample_l_1darray_v4f16_f32:
1094 *
this,
expr,
"amdgcn.image.sample.l.1darray",
false);
1095 case AMDGPU::BI__builtin_amdgcn_image_sample_d_1darray_v4f32_f32:
1096 case AMDGPU::BI__builtin_amdgcn_image_sample_d_1darray_v4f16_f32:
1098 *
this,
expr,
"amdgcn.image.sample.d.1darray",
false);
1099 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_v4f32_f32:
1100 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_v4f16_f32:
1101 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_f32_f32:
1103 *
this,
expr,
"amdgcn.image.sample.lz.2darray",
false);
1104 case AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_v4f32_f32:
1105 case AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_v4f16_f32:
1106 case AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_f32_f32:
1108 *
this,
expr,
"amdgcn.image.sample.l.2darray",
false);
1109 case AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_v4f32_f32:
1110 case AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_v4f16_f32:
1111 case AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_f32_f32:
1113 *
this,
expr,
"amdgcn.image.sample.d.2darray",
false);
1114 case AMDGPU::BI__builtin_amdgcn_image_gather4_lz_2d_v4f32_f32:
1115 case AMDGPU::BI__builtin_amdgcn_image_gather4_lz_2d_v4f16_f32:
1117 *
this,
expr,
"amdgcn.image.gather4.lz.2d",
false);
1118 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_16x16x128_f8f6f4:
1119 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_32x32x64_f8f6f4: {
1120 cgm.errorNYI(
expr->getSourceRange(),
1121 std::string(
"unimplemented AMDGPU builtin call: ") +
1122 getContext().BuiltinInfo.getName(builtinId));
1123 return mlir::Value{};
1125 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32:
1126 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w32:
1127 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64:
1128 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w64:
1129 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32:
1130 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w32:
1131 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64:
1132 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w64:
1133 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32:
1134 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64:
1135 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32:
1136 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64:
1137 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32:
1138 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64:
1139 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32:
1140 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64:
1141 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32_gfx12:
1142 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64_gfx12:
1143 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32_gfx12:
1144 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64_gfx12:
1145 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32_gfx12:
1146 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64_gfx12:
1147 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32_gfx12:
1148 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64_gfx12:
1149 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32_gfx12:
1150 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64_gfx12:
1151 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32_gfx12:
1152 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64_gfx12:
1153 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w32_gfx12:
1154 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w64_gfx12:
1155 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w32_gfx12:
1156 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w64_gfx12:
1157 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w32_gfx12:
1158 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w64_gfx12:
1159 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w32_gfx12:
1160 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w64_gfx12:
1161 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w32_gfx12:
1162 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w64_gfx12: {
1163 cgm.errorNYI(
expr->getSourceRange(),
1164 std::string(
"unimplemented AMDGPU builtin call: ") +
1165 getContext().BuiltinInfo.getName(builtinId));
1166 return mlir::Value{};
1168 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w32:
1169 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w64:
1170 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w32:
1171 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w64:
1172 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w32:
1173 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w64:
1174 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w32:
1175 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w64:
1176 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w32:
1177 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w64:
1178 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w32:
1179 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w64:
1180 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w32:
1181 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w64:
1182 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w32:
1183 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w64:
1184 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w32:
1185 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w64:
1186 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w32:
1187 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w64:
1188 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w32:
1189 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w64: {
1190 cgm.errorNYI(
expr->getSourceRange(),
1191 std::string(
"unimplemented AMDGPU builtin call: ") +
1192 getContext().BuiltinInfo.getName(builtinId));
1193 return mlir::Value{};
1195 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x4_f32:
1196 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_bf16:
1197 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_f16:
1198 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x32_f16:
1199 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x32_bf16:
1200 case AMDGPU::BI__builtin_amdgcn_wmma_bf16f32_16x16x32_bf16:
1201 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_fp8:
1202 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_bf8:
1203 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_fp8:
1204 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_bf8:
1205 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_fp8:
1206 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_bf8:
1207 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_fp8:
1208 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_bf8:
1209 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_fp8:
1210 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_bf8:
1211 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_fp8:
1212 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_bf8:
1213 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_fp8:
1214 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_bf8:
1215 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_fp8:
1216 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_bf8:
1217 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8:
1218 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_f8f6f4:
1219 case AMDGPU::BI__builtin_amdgcn_wmma_f32_32x16x128_f4:
1220 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_16x16x128_f8f6f4:
1221 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4:
1222 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_32x16x128_f4:
1223 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_32x16x128_f4: {
1224 cgm.errorNYI(
expr->getSourceRange(),
1225 std::string(
"unimplemented AMDGPU builtin call: ") +
1226 getContext().BuiltinInfo.getName(builtinId));
1227 return mlir::Value{};
1229 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_f16:
1230 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_bf16:
1231 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x64_f16:
1232 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x64_bf16:
1233 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16f32_16x16x64_bf16:
1234 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_fp8:
1235 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_bf8:
1236 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_fp8:
1237 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_bf8:
1238 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_fp8:
1239 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_bf8:
1240 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_fp8:
1241 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_bf8:
1242 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8: {
1243 cgm.errorNYI(
expr->getSourceRange(),
1244 std::string(
"unimplemented AMDGPU builtin call: ") +
1245 getContext().BuiltinInfo.getName(builtinId));
1246 return mlir::Value{};
1249 case AMDGPU::BI__builtin_amdgcn_workgroup_size_x:
1251 case AMDGPU::BI__builtin_amdgcn_workgroup_size_y:
1253 case AMDGPU::BI__builtin_amdgcn_workgroup_size_z:
1256 case AMDGPU::BI__builtin_amdgcn_grid_size_x:
1258 case AMDGPU::BI__builtin_amdgcn_grid_size_y:
1260 case AMDGPU::BI__builtin_amdgcn_grid_size_z:
1262 case AMDGPU::BI__builtin_r600_recipsqrt_ieee:
1263 case AMDGPU::BI__builtin_r600_recipsqrt_ieeef: {
1264 cgm.errorNYI(
expr->getSourceRange(),
1265 std::string(
"unimplemented AMDGPU builtin call: ") +
1266 getContext().BuiltinInfo.getName(builtinId));
1267 return mlir::Value{};
1269 case AMDGPU::BI__builtin_amdgcn_alignbit: {
1270 cgm.errorNYI(
expr->getSourceRange(),
1271 std::string(
"unimplemented AMDGPU builtin call: ") +
1272 getContext().BuiltinInfo.getName(builtinId));
1273 return mlir::Value{};
1275 case AMDGPU::BI__builtin_amdgcn_fence: {
1278 std::optional<std::pair<llvm::AtomicScope, bool>> parsed;
1279 if (std::optional<std::string> name =
1281 parsed = llvm::parseAtomicScopeIRString(llvm::Triple(
"amdgcn-amd-amdhsa"),
1283 if (!parsed && triple.isSPIRV())
1284 parsed = llvm::parseAtomicScopeIRString(triple, *name);
1287 if (!parsed || (parsed->second && !triple.isSPIRV())) {
1288 cgm.errorNYI(
expr->getSourceRange(),
"__builtin_amdgcn_fence scope");
1289 return mlir::Value{};
1293 addrSpaces.reserve(
expr->getNumArgs() - 2);
1294 for (
unsigned i = 2; i <
expr->getNumArgs(); ++i) {
1295 if (std::optional<std::string> as =
1297 addrSpaces.push_back(std::move(*as));
1300 "expected an address space name as a string literal");
1302 llvm::sort(addrSpaces);
1303 addrSpaces.erase(llvm::unique(addrSpaces), addrSpaces.end());
1305 mmras.reserve(addrSpaces.size());
1306 for (
const std::string &as : addrSpaces)
1307 mmras.push_back(mlir::LLVM::MMRATagAttr::get(
1310 auto fence = cir::AtomicFenceOp::create(
1316 fence->setAttr(mlir::LLVM::LLVMDialect::getMmraAttrName(),
1317 mmras.size() == 1 ? mmras.front()
1318 : builder.getArrayAttr(mmras));
1319 return mlir::Value{};
1321 case AMDGPU::BI__builtin_amdgcn_atomic_inc32:
1322 case AMDGPU::BI__builtin_amdgcn_atomic_inc64:
1325 case AMDGPU::BI__builtin_amdgcn_atomic_dec32:
1326 case AMDGPU::BI__builtin_amdgcn_atomic_dec64:
1329 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f64:
1330 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f32:
1331 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f32:
1332 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f64:
1333 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f32:
1334 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f64:
1337 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmin_f64:
1338 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmin_f64:
1341 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmax_f64:
1342 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmax_f64:
1347 case AMDGPU::BI__builtin_amdgcn_ds_faddf:
1350 case AMDGPU::BI__builtin_amdgcn_ds_fminf:
1353 case AMDGPU::BI__builtin_amdgcn_ds_fmaxf:
1356 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2f16:
1357 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16:
1358 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2f16:
1359 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2f16:
1360 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16:
1361 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16: {
1362 cgm.errorNYI(
expr->getSourceRange(),
1363 std::string(
"unimplemented AMDGPU builtin call: ") +
1364 getContext().BuiltinInfo.getName(builtinId));
1365 return mlir::Value{};
1367 case AMDGPU::BI__builtin_amdgcn_s_sendmsg_rtn:
1368 case AMDGPU::BI__builtin_amdgcn_s_sendmsg_rtnl:
1372 case AMDGPU::BI__builtin_amdgcn_permlane16_swap:
1373 case AMDGPU::BI__builtin_amdgcn_permlane32_swap: {
1374 cgm.errorNYI(
expr->getSourceRange(),
1375 std::string(
"unimplemented AMDGPU builtin call: ") +
1376 getContext().BuiltinInfo.getName(builtinId));
1377 return mlir::Value{};
1379 case AMDGPU::BI__builtin_amdgcn_bitop3_b32:
1380 case AMDGPU::BI__builtin_amdgcn_bitop3_b16:
1383 case AMDGPU::BI__builtin_amdgcn_make_buffer_rsrc: {
1384 cgm.errorNYI(
expr->getSourceRange(),
1385 std::string(
"unimplemented AMDGPU builtin call: ") +
1386 getContext().BuiltinInfo.getName(builtinId));
1387 return mlir::Value{};
1389 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b8:
1390 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b16:
1391 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b32:
1392 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b64:
1393 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b96:
1394 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b128: {
1395 cgm.errorNYI(
expr->getSourceRange(),
1396 std::string(
"unimplemented AMDGPU builtin call: ") +
1397 getContext().BuiltinInfo.getName(builtinId));
1398 return mlir::Value{};
1400 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_format_v4f32:
1401 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_format_v4f16:
1403 expr,
"amdgcn.raw.ptr.buffer.store.format",
1404 cir::VoidType::get(builder.getContext()))
1406 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_format_v4f32:
1407 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_format_v4f16:
1409 expr,
"amdgcn.raw.ptr.buffer.load.format",
1412 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b8:
1413 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b16:
1414 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b32:
1415 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b64:
1416 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b96:
1417 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b128: {
1418 cgm.errorNYI(
expr->getSourceRange(),
1419 std::string(
"unimplemented AMDGPU builtin call: ") +
1420 getContext().BuiltinInfo.getName(builtinId));
1421 return mlir::Value{};
1423 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_add_i32:
1425 expr,
"amdgcn.raw.ptr.buffer.atomic.add")
1427 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_f32:
1428 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_f64:
1429 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_v2f16:
1431 expr,
"amdgcn.raw.ptr.buffer.atomic.fadd")
1433 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmin_f32:
1434 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmin_f64:
1436 expr,
"amdgcn.raw.ptr.buffer.atomic.fmin")
1438 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmax_f32:
1439 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmax_f64:
1441 expr,
"amdgcn.raw.ptr.buffer.atomic.fmax")
1443 case AMDGPU::BI__builtin_amdgcn_s_prefetch_data:
1445 expr,
"amdgcn.s.prefetch.data",
1446 cir::VoidType::get(builder.getContext()))
1448 case AMDGPU::BI__builtin_amdgcn_s_prefetch_inst:
1450 expr,
"amdgcn.s.prefetch.inst",
1451 cir::VoidType::get(builder.getContext()))
1453 case Builtin::BIlogbf:
1454 case Builtin::BI__builtin_logbf:
1456 case Builtin::BIlogb:
1457 case Builtin::BI__builtin_logb:
1459 case Builtin::BIscalbnf:
1460 case Builtin::BI__builtin_scalbnf:
1461 case Builtin::BIscalbn:
1462 case Builtin::BI__builtin_scalbn: {
1464 *
this,
expr,
"ldexp",
"experimental.constrained.ldexp");
1467 return std::nullopt;