418 case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u32:
419 case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u32:
420 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i32:
421 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u32:
422 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i32:
423 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u32:
424 case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b32:
425 case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b32:
426 case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b32:
427 case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u64:
428 case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u64:
429 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i64:
430 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u64:
431 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i64:
432 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u64:
433 case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b64:
434 case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b64:
435 case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b64: {
436 cgm.errorNYI(
expr->getSourceRange(),
437 std::string(
"unimplemented AMDGPU builtin call: ") +
439 return mlir::Value{};
441 case AMDGPU::BI__builtin_amdgcn_div_scale:
442 case AMDGPU::BI__builtin_amdgcn_div_scalef: {
444 llvm::StringRef intrinsicName =
"amdgcn.div.scale";
449 auto i1Ty = builder.getUIntNTy(1);
450 mlir::Type resMembers[] = {x.getType(), i1Ty};
452 builder.getAnonRecordTy(resMembers,
false,
455 mlir::Value structResult =
456 cir::LLVMIntrinsicCallOp::create(builder,
getLoc(
expr->getExprLoc()),
457 builder.getStringAttr(intrinsicName),
461 mlir::Value result = cir::ExtractMemberOp::create(
462 builder,
getLoc(
expr->getExprLoc()), x.getType(), structResult, 0);
463 mlir::Value flag = cir::ExtractMemberOp::create(
464 builder,
getLoc(
expr->getExprLoc()), i1Ty, structResult, 1);
467 mlir::Value flagToStore =
468 cir::CastOp::create(builder,
getLoc(
expr->getExprLoc()), flagType,
469 cir::CastKind::int_to_bool, flag);
470 builder.createStore(
getLoc(
expr->getExprLoc()), flagToStore, flagOutPtr);
473 case AMDGPU::BI__builtin_amdgcn_div_fmas:
474 case AMDGPU::BI__builtin_amdgcn_div_fmasf:
477 case AMDGPU::BI__builtin_amdgcn_mov_dpp8:
478 case AMDGPU::BI__builtin_amdgcn_mov_dpp:
479 case AMDGPU::BI__builtin_amdgcn_update_dpp: {
480 mlir::Location loc =
getLoc(
expr->getExprLoc());
481 unsigned iceArguments = 0;
485 assert(
expr->getNumArgs() == 5 ||
expr->getNumArgs() == 6 ||
486 expr->getNumArgs() == 2);
489 unsigned size =
cgm.getDataLayout().getTypeSizeInBits(dataTy);
490 cir::IntType intTy = builder.getUIntNTy(std::max(size, 32u));
492 bool isMovDpp8 = builtinId == AMDGPU::BI__builtin_amdgcn_mov_dpp8;
493 bool isMovDpp = builtinId == AMDGPU::BI__builtin_amdgcn_mov_dpp;
494 bool isUpdateDpp = builtinId == AMDGPU::BI__builtin_amdgcn_update_dpp;
495 llvm::StringRef intrinsicName =
496 isMovDpp8 ?
"amdgcn.mov.dpp8" :
"amdgcn.update.dpp";
497 cir::FuncType intrinsicTy =
499 : llvm::Intrinsic::amdgcn_update_dpp,
502 auto coerceTo = [&](mlir::Value from, mlir::Type to) -> mlir::Value {
503 if (from.getType() == to)
505 if (mlir::isa<cir::IntType>(from.getType()) &&
506 mlir::isa<cir::IntType>(to))
507 return builder.createIntCast(from, to);
508 return builder.createBitcast(from, to);
516 args.push_back(builder.getConstant(loc, cir::PoisonAttr::get(intTy)));
520 unsigned numPromotedArgs = isUpdateDpp ? 2u : 1u;
521 for (
unsigned i = 0; i !=
expr->getNumArgs(); ++i) {
524 if (i < numPromotedArgs && size < 32) {
525 mlir::Type sameWidthUTy = builder.getUIntNTy(size);
526 if (v.getType() != sameWidthUTy)
527 v = builder.createBitcast(v, sameWidthUTy);
528 v = builder.createIntCast(v, intTy);
530 args.push_back(coerceTo(v, intrinsicTy.getInput(i +
unsigned(isMovDpp))));
533 mlir::Value result = builder.emitIntrinsicCallOp(loc, intrinsicName, intTy,
534 mlir::ValueRange(args));
535 if (size < 32 && !mlir::isa<cir::IntType>(dataTy))
536 result = builder.createIntCast(result, builder.getUIntNTy(size));
537 return coerceTo(result, dataTy);
539 case AMDGPU::BI__builtin_amdgcn_permlane16:
540 case AMDGPU::BI__builtin_amdgcn_permlanex16: {
541 llvm::StringRef intrinsicName =
542 builtinId == AMDGPU::BI__builtin_amdgcn_permlane16
543 ?
"amdgcn.permlane16"
544 :
"amdgcn.permlanex16";
547 case AMDGPU::BI__builtin_amdgcn_permlane64:
550 case AMDGPU::BI__builtin_amdgcn_permlane_bcast:
553 case AMDGPU::BI__builtin_amdgcn_permlane_up:
556 case AMDGPU::BI__builtin_amdgcn_permlane_down:
559 case AMDGPU::BI__builtin_amdgcn_permlane_xor:
562 case AMDGPU::BI__builtin_amdgcn_readlane:
565 case AMDGPU::BI__builtin_amdgcn_readfirstlane:
568 case AMDGPU::BI__builtin_amdgcn_wave_shuffle:
571 case AMDGPU::BI__builtin_amdgcn_div_fixup:
572 case AMDGPU::BI__builtin_amdgcn_div_fixupf:
573 case AMDGPU::BI__builtin_amdgcn_div_fixuph: {
577 return builder.emitIntrinsicCallOp(
getLoc(
expr->getExprLoc()),
578 "amdgcn.div.fixup", src0.getType(),
579 mlir::ValueRange{src0, src1, src2});
581 case AMDGPU::BI__builtin_amdgcn_trig_preop:
582 case AMDGPU::BI__builtin_amdgcn_trig_preopf:
585 case AMDGPU::BI__builtin_amdgcn_rcp:
586 case AMDGPU::BI__builtin_amdgcn_rcpf:
587 case AMDGPU::BI__builtin_amdgcn_rcph:
588 case AMDGPU::BI__builtin_amdgcn_rcp_bf16: {
591 case AMDGPU::BI__builtin_amdgcn_sqrt:
592 case AMDGPU::BI__builtin_amdgcn_sqrtf:
593 case AMDGPU::BI__builtin_amdgcn_sqrth:
594 case AMDGPU::BI__builtin_amdgcn_sqrt_bf16: {
597 case AMDGPU::BI__builtin_amdgcn_rsq:
598 case AMDGPU::BI__builtin_amdgcn_rsqf:
599 case AMDGPU::BI__builtin_amdgcn_rsqh:
600 case AMDGPU::BI__builtin_amdgcn_rsq_bf16: {
603 case AMDGPU::BI__builtin_amdgcn_rsq_clamp:
604 case AMDGPU::BI__builtin_amdgcn_rsq_clampf: {
608 case AMDGPU::BI__builtin_amdgcn_sinf:
609 case AMDGPU::BI__builtin_amdgcn_sinh:
610 case AMDGPU::BI__builtin_amdgcn_sin_bf16: {
613 case AMDGPU::BI__builtin_amdgcn_cosf:
614 case AMDGPU::BI__builtin_amdgcn_cosh:
615 case AMDGPU::BI__builtin_amdgcn_cos_bf16: {
618 case AMDGPU::BI__builtin_amdgcn_dispatch_ptr:
620 case AMDGPU::BI__builtin_amdgcn_logf:
621 case AMDGPU::BI__builtin_amdgcn_log_bf16: {
624 case AMDGPU::BI__builtin_amdgcn_exp2f:
625 case AMDGPU::BI__builtin_amdgcn_exp2_bf16: {
628 case AMDGPU::BI__builtin_amdgcn_log_clampf: {
629 cgm.errorNYI(
expr->getSourceRange(),
630 std::string(
"unimplemented AMDGPU builtin call: ") +
632 return mlir::Value{};
634 case AMDGPU::BI__builtin_amdgcn_ldexp:
635 case AMDGPU::BI__builtin_amdgcn_ldexpf:
636 case AMDGPU::BI__builtin_amdgcn_ldexph: {
643 builtinId == AMDGPU::BI__builtin_amdgcn_ldexph
644 ? cir::CastOp::create(builder,
getLoc(
expr->getExprLoc()),
645 builder.getSInt16Ty(),
646 cir::CastKind::integral, src1)
648 return builder.emitIntrinsicCallOp(
getLoc(
expr->getExprLoc()),
"ldexp",
650 mlir::ValueRange{src0, exp});
652 case AMDGPU::BI__builtin_amdgcn_frexp_mant:
653 case AMDGPU::BI__builtin_amdgcn_frexp_mantf:
654 case AMDGPU::BI__builtin_amdgcn_frexp_manth: {
658 case AMDGPU::BI__builtin_amdgcn_frexp_exp:
659 case AMDGPU::BI__builtin_amdgcn_frexp_expf:
660 case AMDGPU::BI__builtin_amdgcn_frexp_exph: {
661 cgm.errorNYI(
expr->getSourceRange(),
662 std::string(
"unimplemented AMDGPU builtin call: ") +
664 return mlir::Value{};
666 case AMDGPU::BI__builtin_amdgcn_fract:
667 case AMDGPU::BI__builtin_amdgcn_fractf:
668 case AMDGPU::BI__builtin_amdgcn_fracth:
670 case AMDGPU::BI__builtin_amdgcn_lerp: {
671 cgm.errorNYI(
expr->getSourceRange(),
672 std::string(
"unimplemented AMDGPU builtin call: ") +
674 return mlir::Value{};
676 case AMDGPU::BI__builtin_amdgcn_ubfe:
678 case AMDGPU::BI__builtin_amdgcn_sbfe:
680 case AMDGPU::BI__builtin_amdgcn_ballot_w32:
681 case AMDGPU::BI__builtin_amdgcn_ballot_w64:
685 case AMDGPU::BI__builtin_amdgcn_inverse_ballot_w32:
686 case AMDGPU::BI__builtin_amdgcn_inverse_ballot_w64:
690 case AMDGPU::BI__builtin_amdgcn_tanhf:
691 case AMDGPU::BI__builtin_amdgcn_tanhh:
692 case AMDGPU::BI__builtin_amdgcn_tanh_bf16: {
695 case AMDGPU::BI__builtin_amdgcn_uicmp:
696 case AMDGPU::BI__builtin_amdgcn_uicmpl:
697 case AMDGPU::BI__builtin_amdgcn_sicmp:
698 case AMDGPU::BI__builtin_amdgcn_sicmpl:
699 case AMDGPU::BI__builtin_amdgcn_fcmp:
700 case AMDGPU::BI__builtin_amdgcn_fcmpf: {
705 expr->getArg(2)->EvaluateKnownConstInt(
getContext()).getZExtValue();
711 pred = cir::CmpOpKind::eq;
715 pred = cir::CmpOpKind::ne;
720 pred = cir::CmpOpKind::gt;
725 pred = cir::CmpOpKind::ge;
730 pred = cir::CmpOpKind::lt;
735 pred = cir::CmpOpKind::le;
738 pred = cir::CmpOpKind::one;
741 pred = cir::CmpOpKind::uno;
744 cgm.errorNYI(
expr->getSourceRange(),
745 "amdgcn compare with unsupported predicate");
746 return mlir::Value{};
749 mlir::Location loc =
getLoc(
expr->getExprLoc());
750 mlir::Value cmp = builder.createCompare(loc, pred, lhs, rhs);
751 return builder.emitIntrinsicCallOp(loc,
"amdgcn.ballot",
754 case AMDGPU::BI__builtin_amdgcn_class:
755 case AMDGPU::BI__builtin_amdgcn_classf:
756 case AMDGPU::BI__builtin_amdgcn_classh:
760 case AMDGPU::BI__builtin_amdgcn_fmed3f:
761 case AMDGPU::BI__builtin_amdgcn_fmed3h:
763 case AMDGPU::BI__builtin_amdgcn_ds_append:
764 case AMDGPU::BI__builtin_amdgcn_ds_consume: {
765 cgm.errorNYI(
expr->getSourceRange(),
766 std::string(
"unimplemented AMDGPU builtin call: ") +
768 return mlir::Value{};
770 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_i32:
771 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_v2i32:
772 case AMDGPU::BI__builtin_amdgcn_global_load_tr8_b64_v2i32:
776 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4i16:
777 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4f16:
778 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4bf16:
779 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8i16:
780 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8f16:
781 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8bf16:
782 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8i16:
783 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8f16:
784 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8bf16:
788 case AMDGPU::BI__builtin_amdgcn_global_load_tr4_b64_v2i32:
792 case AMDGPU::BI__builtin_amdgcn_global_load_tr6_b96_v3i32:
796 case AMDGPU::BI__builtin_amdgcn_ds_load_tr4_b64_v2i32:
800 case AMDGPU::BI__builtin_amdgcn_ds_load_tr6_b96_v3i32:
804 case AMDGPU::BI__builtin_amdgcn_ds_load_tr8_b64_v2i32:
808 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8i16:
809 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8f16:
810 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8bf16:
814 case AMDGPU::BI__builtin_amdgcn_ds_read_tr4_b64_v2i32:
818 case AMDGPU::BI__builtin_amdgcn_ds_read_tr8_b64_v2i32:
822 case AMDGPU::BI__builtin_amdgcn_ds_read_tr6_b96_v3i32:
826 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4i16:
827 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4f16:
828 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4bf16:
832 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b32:
833 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b64:
834 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b128:
835 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b32:
836 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b64:
837 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b128: {
838 cgm.errorNYI(
expr->getSourceRange(),
839 std::string(
"unimplemented AMDGPU builtin call: ") +
841 return mlir::Value{};
843 case AMDGPU::BI__builtin_amdgcn_cluster_load_b32:
847 case AMDGPU::BI__builtin_amdgcn_cluster_load_b64:
851 case AMDGPU::BI__builtin_amdgcn_cluster_load_b128:
855 case AMDGPU::BI__builtin_amdgcn_load_to_lds:
857 expr,
"amdgcn.load.to.lds",
858 cir::VoidType::get(builder.getContext()))
860 case AMDGPU::BI__builtin_amdgcn_load_async_to_lds:
862 expr,
"amdgcn.load.async.to.lds",
863 cir::VoidType::get(builder.getContext()))
865 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_32x4B:
866 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_32x4B:
867 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_16x8B:
868 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_16x8B:
869 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_8x16B:
870 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_8x16B: {
871 cgm.errorNYI(
expr->getSourceRange(),
872 std::string(
"unimplemented AMDGPU builtin call: ") +
874 return mlir::Value{};
876 case AMDGPU::BI__builtin_amdgcn_get_fpenv:
877 case AMDGPU::BI__builtin_amdgcn_set_fpenv: {
878 cgm.errorNYI(
expr->getSourceRange(),
879 std::string(
"unimplemented AMDGPU builtin call: ") +
881 return mlir::Value{};
883 case AMDGPU::BI__builtin_amdgcn_processor_is: {
884 assert(
cgm.getTriple().isSPIRV() &&
885 "__builtin_amdgcn_processor_is should never reach CodeGen for "
886 "concrete targets!");
890 case AMDGPU::BI__builtin_amdgcn_is_invocable: {
891 assert(
cgm.getTriple().isSPIRV() &&
892 "__builtin_amdgcn_is_invocable should never reach CodeGen for "
893 "concrete targets!");
900 case AMDGPU::BI__builtin_amdgcn_read_exec:
901 case AMDGPU::BI__builtin_amdgcn_read_exec_lo:
902 case AMDGPU::BI__builtin_amdgcn_read_exec_hi: {
906 mlir::Location loc =
getLoc(
expr->getExprLoc());
907 unsigned registerWidth =
908 builtinId == AMDGPU::BI__builtin_amdgcn_read_exec_lo ? 32 : 64;
909 unsigned ballotWidth =
910 std::max(
getTarget().getGridValue().GV_Warp_Size, registerWidth);
911 cir::IntType ballotTy = builder.getUIntNTy(ballotWidth);
913 mlir::Value truePred = builder.getBool(
true, loc).getResult();
915 builder.emitIntrinsicCallOp(loc,
"amdgcn.ballot", ballotTy, truePred);
917 if (builtinId == AMDGPU::BI__builtin_amdgcn_read_exec_hi)
918 result = builder.createShiftRight(loc, result, 32);
921 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray:
922 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_h:
923 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_l:
924 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_lh: {
925 cgm.errorNYI(
expr->getSourceRange(),
926 std::string(
"unimplemented AMDGPU builtin call: ") +
928 return mlir::Value{};
930 case AMDGPU::BI__builtin_amdgcn_image_bvh8_intersect_ray:
931 case AMDGPU::BI__builtin_amdgcn_image_bvh_dual_intersect_ray: {
932 cgm.errorNYI(
expr->getSourceRange(),
933 std::string(
"unimplemented AMDGPU builtin call: ") +
935 return mlir::Value{};
937 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_rtn:
938 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push4_pop1_rtn:
939 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop1_rtn:
940 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop2_rtn: {
941 cgm.errorNYI(
expr->getSourceRange(),
942 std::string(
"unimplemented AMDGPU builtin call: ") +
944 return mlir::Value{};
946 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f32_i32:
947 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f16_i32:
949 "amdgcn.image.load.1d",
false);
950 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f32_i32:
951 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f16_i32:
953 *
this,
expr,
"amdgcn.image.load.1darray",
false);
954 case AMDGPU::BI__builtin_amdgcn_image_load_2d_f32_i32:
955 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f32_i32:
956 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f16_i32:
958 "amdgcn.image.load.2d",
false);
959 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_f32_i32:
960 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f32_i32:
961 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f16_i32:
963 *
this,
expr,
"amdgcn.image.load.2darray",
false);
964 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f32_i32:
965 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f16_i32:
967 "amdgcn.image.load.3d",
false);
968 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f32_i32:
969 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f16_i32:
971 "amdgcn.image.load.cube",
false);
972 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f32_i32:
973 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f16_i32:
975 *
this,
expr,
"amdgcn.image.load.mip.1d",
false);
976 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f32_i32:
977 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f16_i32:
979 *
this,
expr,
"amdgcn.image.load.mip.1darray",
false);
980 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_f32_i32:
981 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f32_i32:
982 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f16_i32:
984 *
this,
expr,
"amdgcn.image.load.mip.2d",
false);
985 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_f32_i32:
986 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f32_i32:
987 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f16_i32:
989 *
this,
expr,
"amdgcn.image.load.mip.2darray",
false);
990 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f32_i32:
991 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f16_i32:
993 *
this,
expr,
"amdgcn.image.load.mip.3d",
false);
994 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f32_i32:
995 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f16_i32:
997 *
this,
expr,
"amdgcn.image.load.mip.cube",
false);
998 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f32_i32:
999 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f16_i32:
1001 "amdgcn.image.store.1d",
true);
1002 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f32_i32:
1003 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f16_i32:
1005 *
this,
expr,
"amdgcn.image.store.1darray",
true);
1006 case AMDGPU::BI__builtin_amdgcn_image_store_2d_f32_i32:
1007 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f32_i32:
1008 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f16_i32:
1010 "amdgcn.image.store.2d",
true);
1011 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_f32_i32:
1012 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f32_i32:
1013 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f16_i32:
1015 *
this,
expr,
"amdgcn.image.store.2darray",
true);
1016 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f32_i32:
1017 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f16_i32:
1019 "amdgcn.image.store.3d",
true);
1020 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f32_i32:
1021 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f16_i32:
1023 "amdgcn.image.store.cube",
true);
1024 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f32_i32:
1025 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f16_i32:
1027 *
this,
expr,
"amdgcn.image.store.mip.1d",
true);
1028 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f32_i32:
1029 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f16_i32:
1031 *
this,
expr,
"amdgcn.image.store.mip.1darray",
true);
1032 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_f32_i32:
1033 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f32_i32:
1034 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f16_i32:
1036 *
this,
expr,
"amdgcn.image.store.mip.2d",
true);
1037 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_f32_i32:
1038 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f32_i32:
1039 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f16_i32:
1041 *
this,
expr,
"amdgcn.image.store.mip.2darray",
true);
1042 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f32_i32:
1043 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f16_i32:
1045 *
this,
expr,
"amdgcn.image.store.mip.3d",
true);
1046 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f32_i32:
1047 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f16_i32:
1049 *
this,
expr,
"amdgcn.image.store.mip.cube",
true);
1050 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f32_f32:
1051 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f16_f32:
1053 "amdgcn.image.sample.1d",
false);
1054 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f32_f32:
1055 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f16_f32:
1057 *
this,
expr,
"amdgcn.image.sample.1darray",
false);
1058 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_f32_f32:
1059 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f32_f32:
1060 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f16_f32:
1062 "amdgcn.image.sample.2d",
false);
1063 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_f32_f32:
1064 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f32_f32:
1065 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f16_f32:
1067 *
this,
expr,
"amdgcn.image.sample.2darray",
false);
1068 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f32_f32:
1069 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f16_f32:
1071 "amdgcn.image.sample.3d",
false);
1072 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f32_f32:
1073 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f16_f32:
1075 *
this,
expr,
"amdgcn.image.sample.cube",
false);
1076 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_1d_v4f32_f32:
1077 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_1d_v4f16_f32:
1079 *
this,
expr,
"amdgcn.image.sample.lz.1d",
false);
1080 case AMDGPU::BI__builtin_amdgcn_image_sample_l_1d_v4f32_f32:
1081 case AMDGPU::BI__builtin_amdgcn_image_sample_l_1d_v4f16_f32:
1083 *
this,
expr,
"amdgcn.image.sample.l.1d",
false);
1084 case AMDGPU::BI__builtin_amdgcn_image_sample_d_1d_v4f32_f32:
1085 case AMDGPU::BI__builtin_amdgcn_image_sample_d_1d_v4f16_f32:
1087 *
this,
expr,
"amdgcn.image.sample.d.1d",
false);
1088 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_v4f32_f32:
1089 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_v4f16_f32:
1090 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_f32_f32:
1092 *
this,
expr,
"amdgcn.image.sample.lz.2d",
false);
1093 case AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_v4f32_f32:
1094 case AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_v4f16_f32:
1095 case AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_f32_f32:
1097 *
this,
expr,
"amdgcn.image.sample.l.2d",
false);
1098 case AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_v4f32_f32:
1099 case AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_v4f16_f32:
1100 case AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_f32_f32:
1102 *
this,
expr,
"amdgcn.image.sample.d.2d",
false);
1103 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_3d_v4f32_f32:
1104 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_3d_v4f16_f32:
1106 *
this,
expr,
"amdgcn.image.sample.lz.3d",
false);
1107 case AMDGPU::BI__builtin_amdgcn_image_sample_l_3d_v4f32_f32:
1108 case AMDGPU::BI__builtin_amdgcn_image_sample_l_3d_v4f16_f32:
1110 *
this,
expr,
"amdgcn.image.sample.l.3d",
false);
1111 case AMDGPU::BI__builtin_amdgcn_image_sample_d_3d_v4f32_f32:
1112 case AMDGPU::BI__builtin_amdgcn_image_sample_d_3d_v4f16_f32:
1114 *
this,
expr,
"amdgcn.image.sample.d.3d",
false);
1115 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_cube_v4f32_f32:
1116 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_cube_v4f16_f32:
1118 *
this,
expr,
"amdgcn.image.sample.lz.cube",
false);
1119 case AMDGPU::BI__builtin_amdgcn_image_sample_l_cube_v4f32_f32:
1120 case AMDGPU::BI__builtin_amdgcn_image_sample_l_cube_v4f16_f32:
1122 *
this,
expr,
"amdgcn.image.sample.l.cube",
false);
1123 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_1darray_v4f32_f32:
1124 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_1darray_v4f16_f32:
1126 *
this,
expr,
"amdgcn.image.sample.lz.1darray",
false);
1127 case AMDGPU::BI__builtin_amdgcn_image_sample_l_1darray_v4f32_f32:
1128 case AMDGPU::BI__builtin_amdgcn_image_sample_l_1darray_v4f16_f32:
1130 *
this,
expr,
"amdgcn.image.sample.l.1darray",
false);
1131 case AMDGPU::BI__builtin_amdgcn_image_sample_d_1darray_v4f32_f32:
1132 case AMDGPU::BI__builtin_amdgcn_image_sample_d_1darray_v4f16_f32:
1134 *
this,
expr,
"amdgcn.image.sample.d.1darray",
false);
1135 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_v4f32_f32:
1136 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_v4f16_f32:
1137 case AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_f32_f32:
1139 *
this,
expr,
"amdgcn.image.sample.lz.2darray",
false);
1140 case AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_v4f32_f32:
1141 case AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_v4f16_f32:
1142 case AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_f32_f32:
1144 *
this,
expr,
"amdgcn.image.sample.l.2darray",
false);
1145 case AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_v4f32_f32:
1146 case AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_v4f16_f32:
1147 case AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_f32_f32:
1149 *
this,
expr,
"amdgcn.image.sample.d.2darray",
false);
1150 case AMDGPU::BI__builtin_amdgcn_image_gather4_lz_2d_v4f32_f32:
1151 case AMDGPU::BI__builtin_amdgcn_image_gather4_lz_2d_v4f16_f32:
1153 *
this,
expr,
"amdgcn.image.gather4.lz.2d",
false);
1154 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_16x16x128_f8f6f4:
1155 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_32x32x64_f8f6f4: {
1156 cgm.errorNYI(
expr->getSourceRange(),
1157 std::string(
"unimplemented AMDGPU builtin call: ") +
1158 getContext().BuiltinInfo.getName(builtinId));
1159 return mlir::Value{};
1161 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32:
1162 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w32:
1163 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64:
1164 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w64:
1165 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32:
1166 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w32:
1167 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64:
1168 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w64:
1169 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32:
1170 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64:
1171 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32:
1172 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64:
1173 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32:
1174 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64:
1175 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32:
1176 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64:
1177 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32_gfx12:
1178 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64_gfx12:
1179 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32_gfx12:
1180 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64_gfx12:
1181 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32_gfx12:
1182 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64_gfx12:
1183 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32_gfx12:
1184 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64_gfx12:
1185 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32_gfx12:
1186 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64_gfx12:
1187 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32_gfx12:
1188 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64_gfx12:
1189 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w32_gfx12:
1190 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w64_gfx12:
1191 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w32_gfx12:
1192 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w64_gfx12:
1193 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w32_gfx12:
1194 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w64_gfx12:
1195 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w32_gfx12:
1196 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w64_gfx12:
1197 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w32_gfx12:
1198 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w64_gfx12: {
1199 cgm.errorNYI(
expr->getSourceRange(),
1200 std::string(
"unimplemented AMDGPU builtin call: ") +
1201 getContext().BuiltinInfo.getName(builtinId));
1202 return mlir::Value{};
1204 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w32:
1205 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w64:
1206 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w32:
1207 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w64:
1208 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w32:
1209 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w64:
1210 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w32:
1211 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w64:
1212 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w32:
1213 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w64:
1214 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w32:
1215 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w64:
1216 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w32:
1217 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w64:
1218 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w32:
1219 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w64:
1220 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w32:
1221 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w64:
1222 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w32:
1223 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w64:
1224 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w32:
1225 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w64: {
1226 cgm.errorNYI(
expr->getSourceRange(),
1227 std::string(
"unimplemented AMDGPU builtin call: ") +
1228 getContext().BuiltinInfo.getName(builtinId));
1229 return mlir::Value{};
1231 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x4_f32:
1232 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_bf16:
1233 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_f16:
1234 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x32_f16:
1235 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x32_bf16:
1236 case AMDGPU::BI__builtin_amdgcn_wmma_bf16f32_16x16x32_bf16:
1237 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_fp8:
1238 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_bf8:
1239 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_fp8:
1240 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_bf8:
1241 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_fp8:
1242 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_bf8:
1243 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_fp8:
1244 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_bf8:
1245 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_fp8:
1246 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_bf8:
1247 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_fp8:
1248 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_bf8:
1249 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_fp8:
1250 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_bf8:
1251 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_fp8:
1252 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_bf8:
1253 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8:
1254 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_f8f6f4:
1255 case AMDGPU::BI__builtin_amdgcn_wmma_f32_32x16x128_f4:
1256 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_16x16x128_f8f6f4:
1257 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4:
1258 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_32x16x128_f4:
1259 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_32x16x128_f4: {
1260 cgm.errorNYI(
expr->getSourceRange(),
1261 std::string(
"unimplemented AMDGPU builtin call: ") +
1262 getContext().BuiltinInfo.getName(builtinId));
1263 return mlir::Value{};
1265 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_f16:
1266 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_bf16:
1267 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x64_f16:
1268 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x64_bf16:
1269 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16f32_16x16x64_bf16:
1270 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_fp8:
1271 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_bf8:
1272 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_fp8:
1273 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_bf8:
1274 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_fp8:
1275 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_bf8:
1276 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_fp8:
1277 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_bf8:
1278 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8: {
1279 cgm.errorNYI(
expr->getSourceRange(),
1280 std::string(
"unimplemented AMDGPU builtin call: ") +
1281 getContext().BuiltinInfo.getName(builtinId));
1282 return mlir::Value{};
1285 case AMDGPU::BI__builtin_amdgcn_workgroup_size_x:
1287 case AMDGPU::BI__builtin_amdgcn_workgroup_size_y:
1289 case AMDGPU::BI__builtin_amdgcn_workgroup_size_z:
1292 case AMDGPU::BI__builtin_amdgcn_grid_size_x:
1294 case AMDGPU::BI__builtin_amdgcn_grid_size_y:
1296 case AMDGPU::BI__builtin_amdgcn_grid_size_z:
1298 case AMDGPU::BI__builtin_r600_recipsqrt_ieee:
1299 case AMDGPU::BI__builtin_r600_recipsqrt_ieeef: {
1300 cgm.errorNYI(
expr->getSourceRange(),
1301 std::string(
"unimplemented AMDGPU builtin call: ") +
1302 getContext().BuiltinInfo.getName(builtinId));
1303 return mlir::Value{};
1305 case AMDGPU::BI__builtin_amdgcn_alignbit: {
1306 cgm.errorNYI(
expr->getSourceRange(),
1307 std::string(
"unimplemented AMDGPU builtin call: ") +
1308 getContext().BuiltinInfo.getName(builtinId));
1309 return mlir::Value{};
1311 case AMDGPU::BI__builtin_amdgcn_fence: {
1314 std::optional<std::pair<llvm::AtomicScope, bool>> parsed;
1315 if (std::optional<std::string> name =
1317 parsed = llvm::parseAMDGPUAtomicScopeIRString(*name);
1318 if (!parsed && triple.isSPIRV())
1319 parsed = llvm::parseAtomicScopeIRString(triple, *name);
1322 if (!parsed || (parsed->second && !triple.isSPIRV())) {
1323 cgm.errorNYI(
expr->getSourceRange(),
"__builtin_amdgcn_fence scope");
1324 return mlir::Value{};
1328 addrSpaces.reserve(
expr->getNumArgs() - 2);
1329 for (
unsigned i = 2; i <
expr->getNumArgs(); ++i) {
1330 if (std::optional<std::string> as =
1332 addrSpaces.push_back(std::move(*as));
1335 "expected an address space name as a string literal");
1337 llvm::sort(addrSpaces);
1338 addrSpaces.erase(llvm::unique(addrSpaces), addrSpaces.end());
1340 mmras.reserve(addrSpaces.size());
1341 for (
const std::string &as : addrSpaces)
1342 mmras.push_back(mlir::LLVM::MMRATagAttr::get(
1345 auto fence = cir::AtomicFenceOp::create(
1351 fence->setAttr(mlir::LLVM::LLVMDialect::getMmraAttrName(),
1352 mmras.size() == 1 ? mmras.front()
1353 : builder.getArrayAttr(mmras));
1354 return mlir::Value{};
1356 case AMDGPU::BI__builtin_amdgcn_atomic_inc32:
1357 case AMDGPU::BI__builtin_amdgcn_atomic_inc64:
1360 case AMDGPU::BI__builtin_amdgcn_atomic_dec32:
1361 case AMDGPU::BI__builtin_amdgcn_atomic_dec64:
1364 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f64:
1365 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f32:
1366 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f32:
1367 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f64:
1368 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f32:
1369 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f64:
1370 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2f16:
1371 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16:
1372 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2f16:
1373 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2f16:
1374 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16:
1375 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16:
1378 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmin_f64:
1379 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmin_f64:
1382 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmax_f64:
1383 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmax_f64:
1388 case AMDGPU::BI__builtin_amdgcn_ds_faddf:
1391 case AMDGPU::BI__builtin_amdgcn_ds_fminf:
1394 case AMDGPU::BI__builtin_amdgcn_ds_fmaxf:
1397 case AMDGPU::BI__builtin_amdgcn_s_sendmsg_rtn:
1398 case AMDGPU::BI__builtin_amdgcn_s_sendmsg_rtnl:
1402 case AMDGPU::BI__builtin_amdgcn_permlane16_swap:
1403 case AMDGPU::BI__builtin_amdgcn_permlane32_swap: {
1404 cgm.errorNYI(
expr->getSourceRange(),
1405 std::string(
"unimplemented AMDGPU builtin call: ") +
1406 getContext().BuiltinInfo.getName(builtinId));
1407 return mlir::Value{};
1409 case AMDGPU::BI__builtin_amdgcn_bitop3_b32:
1410 case AMDGPU::BI__builtin_amdgcn_bitop3_b16:
1413 case AMDGPU::BI__builtin_amdgcn_make_buffer_rsrc: {
1414 cgm.errorNYI(
expr->getSourceRange(),
1415 std::string(
"unimplemented AMDGPU builtin call: ") +
1416 getContext().BuiltinInfo.getName(builtinId));
1417 return mlir::Value{};
1419 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b8:
1420 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b16:
1421 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b32:
1422 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b64:
1423 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b96:
1424 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b128: {
1425 cgm.errorNYI(
expr->getSourceRange(),
1426 std::string(
"unimplemented AMDGPU builtin call: ") +
1427 getContext().BuiltinInfo.getName(builtinId));
1428 return mlir::Value{};
1430 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_format_v4f32:
1431 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_format_v4f16:
1433 expr,
"amdgcn.raw.ptr.buffer.store.format",
1434 cir::VoidType::get(builder.getContext()))
1436 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_format_v4f32:
1437 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_format_v4f16:
1439 expr,
"amdgcn.raw.ptr.buffer.load.format",
1442 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b8:
1443 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b16:
1444 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b32:
1445 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b64:
1446 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b96:
1447 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b128: {
1448 cgm.errorNYI(
expr->getSourceRange(),
1449 std::string(
"unimplemented AMDGPU builtin call: ") +
1450 getContext().BuiltinInfo.getName(builtinId));
1451 return mlir::Value{};
1453 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_add_i32:
1455 expr,
"amdgcn.raw.ptr.buffer.atomic.add")
1457 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_f32:
1458 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_f64:
1459 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_v2f16:
1461 expr,
"amdgcn.raw.ptr.buffer.atomic.fadd")
1463 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmin_f32:
1464 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmin_f64:
1466 expr,
"amdgcn.raw.ptr.buffer.atomic.fmin")
1468 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmax_f32:
1469 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmax_f64:
1471 expr,
"amdgcn.raw.ptr.buffer.atomic.fmax")
1473 case AMDGPU::BI__builtin_amdgcn_s_prefetch_data:
1475 expr,
"amdgcn.s.prefetch.data",
1476 cir::VoidType::get(builder.getContext()))
1478 case AMDGPU::BI__builtin_amdgcn_s_prefetch_inst:
1480 expr,
"amdgcn.s.prefetch.inst",
1481 cir::VoidType::get(builder.getContext()))
1483 case Builtin::BIlogbf:
1484 case Builtin::BI__builtin_logbf:
1486 case Builtin::BIlogb:
1487 case Builtin::BI__builtin_logb:
1489 case Builtin::BIscalbnf:
1490 case Builtin::BI__builtin_scalbnf:
1491 case Builtin::BIscalbn:
1492 case Builtin::BI__builtin_scalbn: {
1494 *
this,
expr,
"ldexp",
"experimental.constrained.ldexp");
1497 return std::nullopt;