537 llvm::AtomicOrdering AO = llvm::AtomicOrdering::SequentiallyConsistent;
538 llvm::SyncScope::ID SSID;
540 case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u32:
541 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fadd_f32:
542 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fadd_f64:
543 case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u32:
544 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fsub_f32:
545 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fsub_f64:
546 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i32:
547 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u32:
548 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmin_f32:
549 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmin_f64:
550 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i32:
551 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u32:
552 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmax_f32:
553 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmax_f64:
554 case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b32:
555 case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b32:
556 case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b32:
557 case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u64:
558 case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u64:
559 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i64:
560 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u64:
561 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i64:
562 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u64:
563 case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b64:
564 case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b64:
565 case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b64: {
572 case AMDGPU::BI__builtin_amdgcn_div_scale:
573 case AMDGPU::BI__builtin_amdgcn_div_scalef: {
583 llvm::Function *Callee =
CGM.getIntrinsic(Intrinsic::amdgcn_div_scale,
586 llvm::Value *Tmp =
Builder.CreateCall(Callee, {
X, Y, Z});
589 llvm::Value *Flag =
Builder.CreateExtractValue(Tmp, 1);
593 llvm::Value *FlagExt =
Builder.CreateZExt(Flag, RealFlagType);
594 Builder.CreateStore(FlagExt, FlagOutPtr);
597 case AMDGPU::BI__builtin_amdgcn_div_fmas:
598 case AMDGPU::BI__builtin_amdgcn_div_fmasf: {
604 llvm::Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_div_fmas,
606 llvm::Value *Src3ToBool =
Builder.CreateIsNotNull(Src3);
607 return Builder.CreateCall(F, {Src0, Src1, Src2, Src3ToBool});
610 case AMDGPU::BI__builtin_amdgcn_ds_swizzle:
612 Intrinsic::amdgcn_ds_swizzle);
613 case AMDGPU::BI__builtin_amdgcn_mov_dpp8:
614 case AMDGPU::BI__builtin_amdgcn_mov_dpp:
615 case AMDGPU::BI__builtin_amdgcn_update_dpp: {
619 unsigned ICEArguments = 0;
624 unsigned Size = DataTy->getPrimitiveSizeInBits();
626 llvm::IntegerType::get(
Builder.getContext(), std::max(Size, 32u));
628 CGM.getIntrinsic(BuiltinID == AMDGPU::BI__builtin_amdgcn_mov_dpp8
629 ? Intrinsic::amdgcn_mov_dpp8
630 : Intrinsic::amdgcn_update_dpp,
634 bool InsertOld = BuiltinID == AMDGPU::BI__builtin_amdgcn_mov_dpp;
636 Args.push_back(llvm::PoisonValue::get(
IntTy));
637 for (
unsigned I = 0; I != E->
getNumArgs(); ++I) {
639 if (I < (BuiltinID == AMDGPU::BI__builtin_amdgcn_update_dpp ? 2u : 1u) &&
641 if (!DataTy->isIntegerTy())
643 V, llvm::IntegerType::get(
Builder.getContext(), Size));
647 F->getFunctionType()->getFunctionParamType(I + InsertOld);
648 Args.push_back(
Builder.CreateTruncOrBitCast(
V, ExpTy));
651 if (Size < 32 && !DataTy->isIntegerTy())
653 V, llvm::IntegerType::get(
Builder.getContext(), Size));
654 return Builder.CreateTruncOrBitCast(
V, DataTy);
656 case AMDGPU::BI__builtin_amdgcn_permlane16:
657 case AMDGPU::BI__builtin_amdgcn_permlanex16:
660 BuiltinID == AMDGPU::BI__builtin_amdgcn_permlane16
661 ? Intrinsic::amdgcn_permlane16
662 : Intrinsic::amdgcn_permlanex16);
663 case AMDGPU::BI__builtin_amdgcn_permlane64:
665 Intrinsic::amdgcn_permlane64);
666 case AMDGPU::BI__builtin_amdgcn_readlane:
668 Intrinsic::amdgcn_readlane);
669 case AMDGPU::BI__builtin_amdgcn_wave_shuffle:
671 Intrinsic::amdgcn_wave_shuffle);
672 case AMDGPU::BI__builtin_amdgcn_readfirstlane:
674 Intrinsic::amdgcn_readfirstlane);
675 case AMDGPU::BI__builtin_amdgcn_div_fixup:
676 case AMDGPU::BI__builtin_amdgcn_div_fixupf:
677 case AMDGPU::BI__builtin_amdgcn_div_fixuph:
679 Intrinsic::amdgcn_div_fixup);
680 case AMDGPU::BI__builtin_amdgcn_trig_preop:
681 case AMDGPU::BI__builtin_amdgcn_trig_preopf:
683 case AMDGPU::BI__builtin_amdgcn_rcp:
684 case AMDGPU::BI__builtin_amdgcn_rcpf:
685 case AMDGPU::BI__builtin_amdgcn_rcph:
686 case AMDGPU::BI__builtin_amdgcn_rcp_bf16:
688 case AMDGPU::BI__builtin_amdgcn_sqrt:
689 case AMDGPU::BI__builtin_amdgcn_sqrtf:
690 case AMDGPU::BI__builtin_amdgcn_sqrth:
691 case AMDGPU::BI__builtin_amdgcn_sqrt_bf16:
693 Intrinsic::amdgcn_sqrt);
694 case AMDGPU::BI__builtin_amdgcn_rsq:
695 case AMDGPU::BI__builtin_amdgcn_rsqf:
696 case AMDGPU::BI__builtin_amdgcn_rsqh:
697 case AMDGPU::BI__builtin_amdgcn_rsq_bf16:
699 case AMDGPU::BI__builtin_amdgcn_rsq_clamp:
700 case AMDGPU::BI__builtin_amdgcn_rsq_clampf:
702 Intrinsic::amdgcn_rsq_clamp);
703 case AMDGPU::BI__builtin_amdgcn_sinf:
704 case AMDGPU::BI__builtin_amdgcn_sinh:
705 case AMDGPU::BI__builtin_amdgcn_sin_bf16:
707 case AMDGPU::BI__builtin_amdgcn_cosf:
708 case AMDGPU::BI__builtin_amdgcn_cosh:
709 case AMDGPU::BI__builtin_amdgcn_cos_bf16:
711 case AMDGPU::BI__builtin_amdgcn_dispatch_ptr:
712 return EmitAMDGPUDispatchPtr(*
this, E);
713 case AMDGPU::BI__builtin_amdgcn_logf:
714 case AMDGPU::BI__builtin_amdgcn_log_bf16:
716 case AMDGPU::BI__builtin_amdgcn_exp2f:
717 case AMDGPU::BI__builtin_amdgcn_exp2_bf16:
719 Intrinsic::amdgcn_exp2);
720 case AMDGPU::BI__builtin_amdgcn_log_clampf:
722 Intrinsic::amdgcn_log_clamp);
723 case AMDGPU::BI__builtin_amdgcn_ldexp:
724 case AMDGPU::BI__builtin_amdgcn_ldexpf: {
728 CGM.getIntrinsic(Intrinsic::ldexp, {Src0->getType(), Src1->getType()});
729 return Builder.CreateCall(F, {Src0, Src1});
731 case AMDGPU::BI__builtin_amdgcn_ldexph: {
737 CGM.getIntrinsic(Intrinsic::ldexp, {Src0->getType(),
Int16Ty});
740 case AMDGPU::BI__builtin_amdgcn_frexp_mant:
741 case AMDGPU::BI__builtin_amdgcn_frexp_mantf:
742 case AMDGPU::BI__builtin_amdgcn_frexp_manth:
744 Intrinsic::amdgcn_frexp_mant);
745 case AMDGPU::BI__builtin_amdgcn_frexp_exp:
746 case AMDGPU::BI__builtin_amdgcn_frexp_expf: {
748 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_frexp_exp,
750 return Builder.CreateCall(F, Src0);
752 case AMDGPU::BI__builtin_amdgcn_frexp_exph: {
754 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_frexp_exp,
756 return Builder.CreateCall(F, Src0);
758 case AMDGPU::BI__builtin_amdgcn_fract:
759 case AMDGPU::BI__builtin_amdgcn_fractf:
760 case AMDGPU::BI__builtin_amdgcn_fracth:
762 Intrinsic::amdgcn_fract);
763 case AMDGPU::BI__builtin_amdgcn_lerp:
765 Intrinsic::amdgcn_lerp);
766 case AMDGPU::BI__builtin_amdgcn_ubfe:
768 Intrinsic::amdgcn_ubfe);
769 case AMDGPU::BI__builtin_amdgcn_sbfe:
771 Intrinsic::amdgcn_sbfe);
772 case AMDGPU::BI__builtin_amdgcn_ballot_w32:
773 case AMDGPU::BI__builtin_amdgcn_ballot_w64: {
776 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_ballot, {ResultType});
777 return Builder.CreateCall(F, {Src});
779 case AMDGPU::BI__builtin_amdgcn_inverse_ballot_w32:
780 case AMDGPU::BI__builtin_amdgcn_inverse_ballot_w64: {
783 CGM.getIntrinsic(Intrinsic::amdgcn_inverse_ballot, {Src->getType()});
784 return Builder.CreateCall(F, {Src});
786 case AMDGPU::BI__builtin_amdgcn_tanhf:
787 case AMDGPU::BI__builtin_amdgcn_tanhh:
788 case AMDGPU::BI__builtin_amdgcn_tanh_bf16:
790 Intrinsic::amdgcn_tanh);
791 case AMDGPU::BI__builtin_amdgcn_uicmp:
792 case AMDGPU::BI__builtin_amdgcn_uicmpl:
793 case AMDGPU::BI__builtin_amdgcn_sicmp:
794 case AMDGPU::BI__builtin_amdgcn_sicmpl:
795 case AMDGPU::BI__builtin_amdgcn_fcmp:
796 case AMDGPU::BI__builtin_amdgcn_fcmpf: {
799 CmpInst::Predicate Pred =
static_cast<CmpInst::Predicate
>(
804 Intrinsic::amdgcn_ballot,
805 Builder.CreateCmp(Pred, LHS, RHS));
807 case AMDGPU::BI__builtin_amdgcn_class:
808 case AMDGPU::BI__builtin_amdgcn_classf:
809 case AMDGPU::BI__builtin_amdgcn_classh:
811 case AMDGPU::BI__builtin_amdgcn_fmed3f:
812 case AMDGPU::BI__builtin_amdgcn_fmed3h:
814 Intrinsic::amdgcn_fmed3);
815 case AMDGPU::BI__builtin_amdgcn_ds_append:
816 case AMDGPU::BI__builtin_amdgcn_ds_consume: {
817 Intrinsic::ID Intrin = BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_append ?
818 Intrinsic::amdgcn_ds_append : Intrinsic::amdgcn_ds_consume;
823 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_i32:
824 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_v2i32:
825 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4i16:
826 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4f16:
827 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4bf16:
828 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8i16:
829 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8f16:
830 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8bf16:
831 case AMDGPU::BI__builtin_amdgcn_global_load_tr4_b64_v2i32:
832 case AMDGPU::BI__builtin_amdgcn_global_load_tr8_b64_v2i32:
833 case AMDGPU::BI__builtin_amdgcn_global_load_tr6_b96_v3i32:
834 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8i16:
835 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8f16:
836 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8bf16:
837 case AMDGPU::BI__builtin_amdgcn_ds_load_tr4_b64_v2i32:
838 case AMDGPU::BI__builtin_amdgcn_ds_load_tr8_b64_v2i32:
839 case AMDGPU::BI__builtin_amdgcn_ds_load_tr6_b96_v3i32:
840 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8i16:
841 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8f16:
842 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8bf16:
843 case AMDGPU::BI__builtin_amdgcn_ds_read_tr4_b64_v2i32:
844 case AMDGPU::BI__builtin_amdgcn_ds_read_tr8_b64_v2i32:
845 case AMDGPU::BI__builtin_amdgcn_ds_read_tr6_b96_v3i32:
846 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4f16:
847 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4bf16:
848 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4i16: {
851 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_i32:
852 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_v2i32:
853 case AMDGPU::BI__builtin_amdgcn_global_load_tr8_b64_v2i32:
854 IID = Intrinsic::amdgcn_global_load_tr_b64;
856 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4i16:
857 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4f16:
858 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4bf16:
859 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8i16:
860 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8f16:
861 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8bf16:
862 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8i16:
863 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8f16:
864 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8bf16:
865 IID = Intrinsic::amdgcn_global_load_tr_b128;
867 case AMDGPU::BI__builtin_amdgcn_global_load_tr4_b64_v2i32:
868 IID = Intrinsic::amdgcn_global_load_tr4_b64;
870 case AMDGPU::BI__builtin_amdgcn_global_load_tr6_b96_v3i32:
871 IID = Intrinsic::amdgcn_global_load_tr6_b96;
873 case AMDGPU::BI__builtin_amdgcn_ds_load_tr4_b64_v2i32:
874 IID = Intrinsic::amdgcn_ds_load_tr4_b64;
876 case AMDGPU::BI__builtin_amdgcn_ds_load_tr6_b96_v3i32:
877 IID = Intrinsic::amdgcn_ds_load_tr6_b96;
879 case AMDGPU::BI__builtin_amdgcn_ds_load_tr8_b64_v2i32:
880 IID = Intrinsic::amdgcn_ds_load_tr8_b64;
882 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8i16:
883 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8f16:
884 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8bf16:
885 IID = Intrinsic::amdgcn_ds_load_tr16_b128;
887 case AMDGPU::BI__builtin_amdgcn_ds_read_tr4_b64_v2i32:
888 IID = Intrinsic::amdgcn_ds_read_tr4_b64;
890 case AMDGPU::BI__builtin_amdgcn_ds_read_tr8_b64_v2i32:
891 IID = Intrinsic::amdgcn_ds_read_tr8_b64;
893 case AMDGPU::BI__builtin_amdgcn_ds_read_tr6_b96_v3i32:
894 IID = Intrinsic::amdgcn_ds_read_tr6_b96;
896 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4i16:
897 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4f16:
898 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4bf16:
899 IID = Intrinsic::amdgcn_ds_read_tr16_b64;
904 llvm::Function *F =
CGM.getIntrinsic(IID, {LoadTy});
907 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b32:
908 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b64:
909 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b128:
910 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b32:
911 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b64:
912 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b128: {
916 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b32:
917 IID = Intrinsic::amdgcn_global_load_monitor_b32;
919 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b64:
920 IID = Intrinsic::amdgcn_global_load_monitor_b64;
922 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b128:
923 IID = Intrinsic::amdgcn_global_load_monitor_b128;
925 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b32:
926 IID = Intrinsic::amdgcn_flat_load_monitor_b32;
928 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b64:
929 IID = Intrinsic::amdgcn_flat_load_monitor_b64;
931 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b128:
932 IID = Intrinsic::amdgcn_flat_load_monitor_b128;
943 llvm::Value *ScopeMD =
emitScopeMD(*
this, ScopeExpr->getZExtValue(), AO);
944 llvm::Function *F =
CGM.getIntrinsic(IID, {LoadTy});
945 return Builder.CreateCall(F, {
Addr, AOExpr, ScopeMD});
947 case AMDGPU::BI__builtin_amdgcn_cluster_load_b32:
948 case AMDGPU::BI__builtin_amdgcn_cluster_load_b64:
949 case AMDGPU::BI__builtin_amdgcn_cluster_load_b128: {
952 case AMDGPU::BI__builtin_amdgcn_cluster_load_b32:
953 IID = Intrinsic::amdgcn_cluster_load_b32;
955 case AMDGPU::BI__builtin_amdgcn_cluster_load_b64:
956 IID = Intrinsic::amdgcn_cluster_load_b64;
958 case AMDGPU::BI__builtin_amdgcn_cluster_load_b128:
959 IID = Intrinsic::amdgcn_cluster_load_b128;
963 for (
int i = 0, e = E->
getNumArgs(); i != e; ++i)
966 return Builder.CreateCall(F, {Args});
968 case AMDGPU::BI__builtin_amdgcn_load_to_lds: {
971 Intrinsic::amdgcn_load_to_lds);
973 case AMDGPU::BI__builtin_amdgcn_load_async_to_lds: {
976 *
this, E, Intrinsic::amdgcn_load_async_to_lds);
978 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_32x4B:
979 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_32x4B:
980 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_16x8B:
981 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_16x8B:
982 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_8x16B:
983 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_8x16B: {
986 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_32x4B:
987 IID = Intrinsic::amdgcn_cooperative_atomic_load_32x4B;
989 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_32x4B:
990 IID = Intrinsic::amdgcn_cooperative_atomic_store_32x4B;
992 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_16x8B:
993 IID = Intrinsic::amdgcn_cooperative_atomic_load_16x8B;
995 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_16x8B:
996 IID = Intrinsic::amdgcn_cooperative_atomic_store_16x8B;
998 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_8x16B:
999 IID = Intrinsic::amdgcn_cooperative_atomic_load_8x16B;
1001 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_8x16B:
1002 IID = Intrinsic::amdgcn_cooperative_atomic_store_8x16B;
1006 LLVMContext &Ctx =
CGM.getLLVMContext();
1009 const unsigned ScopeArg = E->
getNumArgs() - 1;
1010 for (
unsigned i = 0; i != ScopeArg; ++i)
1014 llvm::MDNode *MD = llvm::MDNode::get(Ctx, {llvm::MDString::get(Ctx, Arg)});
1015 Args.push_back(llvm::MetadataAsValue::get(Ctx, MD));
1018 llvm::Function *F =
CGM.getIntrinsic(IID, {Args[0]->getType()});
1019 return Builder.CreateCall(F, {Args});
1021 case AMDGPU::BI__builtin_amdgcn_av_load_b128:
1022 case AMDGPU::BI__builtin_amdgcn_av_store_b128: {
1023 const bool IsStore = BuiltinID == AMDGPU::BI__builtin_amdgcn_av_store_b128;
1027 const unsigned ScopeIdx = E->
getNumArgs() - 1;
1030 Args.push_back(
emitScopeMD(*
this, ScopeExpr->getZExtValue()));
1032 CGM.getIntrinsic(IsStore ? Intrinsic::amdgcn_av_store_b128
1033 : Intrinsic::amdgcn_av_load_b128,
1034 {Args[0]->getType()});
1035 return Builder.CreateCall(F, Args);
1037 case AMDGPU::BI__builtin_amdgcn_get_fpenv: {
1038 Function *F =
CGM.getIntrinsic(Intrinsic::get_fpenv,
1042 case AMDGPU::BI__builtin_amdgcn_set_fpenv: {
1043 Function *F =
CGM.getIntrinsic(Intrinsic::set_fpenv,
1046 return Builder.CreateCall(F, {Env});
1048 case AMDGPU::BI__builtin_amdgcn_processor_is: {
1049 assert(
CGM.getTriple().isSPIRV() &&
1050 "__builtin_amdgcn_processor_is should never reach CodeGen for "
1051 "concrete targets!");
1055 case AMDGPU::BI__builtin_amdgcn_is_invocable: {
1056 assert(
CGM.getTriple().isSPIRV() &&
1057 "__builtin_amdgcn_is_invocable should never reach CodeGen for "
1058 "concrete targets!");
1065 case AMDGPU::BI__builtin_amdgcn_read_exec:
1067 case AMDGPU::BI__builtin_amdgcn_read_exec_lo:
1069 case AMDGPU::BI__builtin_amdgcn_read_exec_hi:
1071 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray:
1072 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_h:
1073 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_l:
1074 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_lh: {
1084 RayOrigin =
Builder.CreateShuffleVector(RayOrigin, RayOrigin,
1087 Builder.CreateShuffleVector(RayDir, RayDir, {0, 1, 2});
1088 RayInverseDir =
Builder.CreateShuffleVector(RayInverseDir, RayInverseDir,
1091 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_image_bvh_intersect_ray,
1092 {NodePtr->getType(), RayDir->getType()});
1093 return Builder.CreateCall(F, {NodePtr, RayExtent, RayOrigin, RayDir,
1094 RayInverseDir, TextureDescr});
1096 case AMDGPU::BI__builtin_amdgcn_image_bvh8_intersect_ray:
1097 case AMDGPU::BI__builtin_amdgcn_image_bvh_dual_intersect_ray: {
1099 switch (BuiltinID) {
1100 case AMDGPU::BI__builtin_amdgcn_image_bvh8_intersect_ray:
1101 IID = Intrinsic::amdgcn_image_bvh8_intersect_ray;
1103 case AMDGPU::BI__builtin_amdgcn_image_bvh_dual_intersect_ray:
1104 IID = Intrinsic::amdgcn_image_bvh_dual_intersect_ray;
1118 llvm::Function *IntrinsicFunc =
CGM.getIntrinsic(IID);
1120 llvm::CallInst *CI =
Builder.CreateCall(
1121 IntrinsicFunc, {NodePtr, RayExtent, InstanceMask, RayOrigin, RayDir,
1122 Offset, TextureDescr});
1124 llvm::Value *RetVData =
Builder.CreateExtractValue(CI, 0);
1125 llvm::Value *RetRayOrigin =
Builder.CreateExtractValue(CI, 1);
1126 llvm::Value *RetRayDir =
Builder.CreateExtractValue(CI, 2);
1128 Builder.CreateStore(RetRayOrigin, RetRayOriginPtr);
1129 Builder.CreateStore(RetRayDir, RetRayDirPtr);
1134 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_rtn:
1135 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push4_pop1_rtn:
1136 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop1_rtn:
1137 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop2_rtn: {
1139 switch (BuiltinID) {
1140 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_rtn:
1141 IID = Intrinsic::amdgcn_ds_bvh_stack_rtn;
1143 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push4_pop1_rtn:
1144 IID = Intrinsic::amdgcn_ds_bvh_stack_push4_pop1_rtn;
1146 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop1_rtn:
1147 IID = Intrinsic::amdgcn_ds_bvh_stack_push8_pop1_rtn;
1149 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop2_rtn:
1150 IID = Intrinsic::amdgcn_ds_bvh_stack_push8_pop2_rtn;
1155 for (
int i = 0, e = E->
getNumArgs(); i != e; ++i)
1163 Value *I0 =
Builder.CreateInsertElement(PoisonValue::get(RetTy), Rtn,
1167 if (A->
getType()->getPrimitiveSizeInBits() <
1168 RetTy->getScalarType()->getPrimitiveSizeInBits())
1169 A =
Builder.CreateZExt(A, RetTy->getScalarType());
1171 return Builder.CreateInsertElement(I0, A, 1);
1173 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f32_i32:
1174 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f16_i32:
1176 *
this, E, Intrinsic::amdgcn_image_load_1d,
false);
1177 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f32_i32:
1178 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f16_i32:
1180 *
this, E, Intrinsic::amdgcn_image_load_1darray,
false);
1181 case AMDGPU::BI__builtin_amdgcn_image_load_2d_f32_i32:
1182 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f32_i32:
1183 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f16_i32:
1185 *
this, E, Intrinsic::amdgcn_image_load_2d,
false);
1186 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_f32_i32:
1187 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f32_i32:
1188 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f16_i32:
1190 *
this, E, Intrinsic::amdgcn_image_load_2darray,
false);
1191 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f32_i32:
1192 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f16_i32:
1194 *
this, E, Intrinsic::amdgcn_image_load_3d,
false);
1195 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f32_i32:
1196 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f16_i32:
1198 *
this, E, Intrinsic::amdgcn_image_load_cube,
false);
1199 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f32_i32:
1200 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f16_i32:
1202 *
this, E, Intrinsic::amdgcn_image_load_mip_1d,
false);
1203 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f32_i32:
1204 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f16_i32:
1206 *
this, E, Intrinsic::amdgcn_image_load_mip_1darray,
false);
1207 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_f32_i32:
1208 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f32_i32:
1209 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f16_i32:
1211 *
this, E, Intrinsic::amdgcn_image_load_mip_2d,
false);
1212 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_f32_i32:
1213 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f32_i32:
1214 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f16_i32:
1216 *
this, E, Intrinsic::amdgcn_image_load_mip_2darray,
false);
1217 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f32_i32:
1218 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f16_i32:
1220 *
this, E, Intrinsic::amdgcn_image_load_mip_3d,
false);
1221 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f32_i32:
1222 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f16_i32:
1224 *
this, E, Intrinsic::amdgcn_image_load_mip_cube,
false);
1225 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f32_i32:
1226 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f16_i32:
1228 *
this, E, Intrinsic::amdgcn_image_store_1d,
true);
1229 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f32_i32:
1230 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f16_i32:
1232 *
this, E, Intrinsic::amdgcn_image_store_1darray,
true);
1233 case AMDGPU::BI__builtin_amdgcn_image_store_2d_f32_i32:
1234 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f32_i32:
1235 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f16_i32:
1237 *
this, E, Intrinsic::amdgcn_image_store_2d,
true);
1238 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_f32_i32:
1239 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f32_i32:
1240 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f16_i32:
1242 *
this, E, Intrinsic::amdgcn_image_store_2darray,
true);
1243 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f32_i32:
1244 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f16_i32:
1246 *
this, E, Intrinsic::amdgcn_image_store_3d,
true);
1247 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f32_i32:
1248 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f16_i32:
1250 *
this, E, Intrinsic::amdgcn_image_store_cube,
true);
1251 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f32_i32:
1252 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f16_i32:
1254 *
this, E, Intrinsic::amdgcn_image_store_mip_1d,
true);
1255 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f32_i32:
1256 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f16_i32:
1258 *
this, E, Intrinsic::amdgcn_image_store_mip_1darray,
true);
1259 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_f32_i32:
1260 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f32_i32:
1261 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f16_i32:
1263 *
this, E, Intrinsic::amdgcn_image_store_mip_2d,
true);
1264 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_f32_i32:
1265 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f32_i32:
1266 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f16_i32:
1268 *
this, E, Intrinsic::amdgcn_image_store_mip_2darray,
true);
1269 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f32_i32:
1270 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f16_i32:
1272 *
this, E, Intrinsic::amdgcn_image_store_mip_3d,
true);
1273 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f32_i32:
1274 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f16_i32:
1276 *
this, E, Intrinsic::amdgcn_image_store_mip_cube,
true);
1277 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f32_f32:
1278 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f16_f32:
1280 *
this, E, Intrinsic::amdgcn_image_sample_1d,
false);
1281 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f32_f32:
1282 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f16_f32:
1284 *
this, E, Intrinsic::amdgcn_image_sample_1darray,
false);
1285 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_f32_f32:
1286 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f32_f32:
1287 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f16_f32:
1289 *
this, E, Intrinsic::amdgcn_image_sample_2d,
false);
1290 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_f32_f32:
1291 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f32_f32:
1292 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f16_f32:
1294 *
this, E, Intrinsic::amdgcn_image_sample_2darray,
false);
1295 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f32_f32:
1296 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f16_f32:
1298 *
this, E, Intrinsic::amdgcn_image_sample_3d,
false);
1299 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f32_f32:
1300 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f16_f32:
1302 *
this, E, Intrinsic::amdgcn_image_sample_cube,
false);
1303 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1d_v4f32_f32:
1304 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1d_v4f16_f32:
1306 *
this, E, Intrinsic::amdgcn_image_sample_lz_1d,
false);
1307 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1d_v4f32_f32:
1308 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1d_v4f16_f32:
1310 *
this, E, Intrinsic::amdgcn_image_sample_l_1d,
false);
1311 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1d_v4f32_f32:
1312 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1d_v4f16_f32:
1314 *
this, E, Intrinsic::amdgcn_image_sample_d_1d,
false);
1315 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_v4f32_f32:
1316 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_v4f16_f32:
1317 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_f32_f32:
1319 *
this, E, Intrinsic::amdgcn_image_sample_lz_2d,
false);
1320 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_v4f32_f32:
1321 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_v4f16_f32:
1322 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_f32_f32:
1324 *
this, E, Intrinsic::amdgcn_image_sample_l_2d,
false);
1325 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_v4f32_f32:
1326 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_v4f16_f32:
1327 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_f32_f32:
1329 *
this, E, Intrinsic::amdgcn_image_sample_d_2d,
false);
1330 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_3d_v4f32_f32:
1331 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_3d_v4f16_f32:
1333 *
this, E, Intrinsic::amdgcn_image_sample_lz_3d,
false);
1334 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_3d_v4f32_f32:
1335 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_3d_v4f16_f32:
1337 *
this, E, Intrinsic::amdgcn_image_sample_l_3d,
false);
1338 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_3d_v4f32_f32:
1339 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_3d_v4f16_f32:
1341 *
this, E, Intrinsic::amdgcn_image_sample_d_3d,
false);
1342 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_cube_v4f32_f32:
1343 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_cube_v4f16_f32:
1345 *
this, E, Intrinsic::amdgcn_image_sample_lz_cube,
false);
1346 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_cube_v4f32_f32:
1347 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_cube_v4f16_f32:
1349 *
this, E, Intrinsic::amdgcn_image_sample_l_cube,
false);
1350 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1darray_v4f32_f32:
1351 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1darray_v4f16_f32:
1353 *
this, E, Intrinsic::amdgcn_image_sample_lz_1darray,
false);
1354 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1darray_v4f32_f32:
1355 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1darray_v4f16_f32:
1357 *
this, E, Intrinsic::amdgcn_image_sample_l_1darray,
false);
1358 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1darray_v4f32_f32:
1359 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1darray_v4f16_f32:
1361 *
this, E, Intrinsic::amdgcn_image_sample_d_1darray,
false);
1362 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_v4f32_f32:
1363 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_v4f16_f32:
1364 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_f32_f32:
1366 *
this, E, Intrinsic::amdgcn_image_sample_lz_2darray,
false);
1367 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_v4f32_f32:
1368 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_v4f16_f32:
1369 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_f32_f32:
1371 *
this, E, Intrinsic::amdgcn_image_sample_l_2darray,
false);
1372 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_v4f32_f32:
1373 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_v4f16_f32:
1374 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_f32_f32:
1376 *
this, E, Intrinsic::amdgcn_image_sample_d_2darray,
false);
1377 case clang::AMDGPU::BI__builtin_amdgcn_image_gather4_lz_2d_v4f32_f32:
1379 *
this, E, Intrinsic::amdgcn_image_gather4_lz_2d,
false);
1380 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_16x16x128_f8f6f4:
1381 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_32x32x64_f8f6f4: {
1382 llvm::FixedVectorType *VT = FixedVectorType::get(
Builder.getInt32Ty(), 8);
1384 BuiltinID == AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_32x32x64_f8f6f4
1385 ? Intrinsic::amdgcn_mfma_scale_f32_32x32x64_f8f6f4
1386 : Intrinsic::amdgcn_mfma_scale_f32_16x16x128_f8f6f4,
1390 for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++I)
1392 return Builder.CreateCall(F, Args);
1394 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32:
1395 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w32:
1396 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64:
1397 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w64:
1398 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32:
1399 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w32:
1400 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64:
1401 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w64:
1402 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32:
1403 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64:
1404 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32:
1405 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64:
1406 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32:
1407 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64:
1408 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32:
1409 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64:
1410 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32_gfx12:
1411 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64_gfx12:
1412 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32_gfx12:
1413 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64_gfx12:
1414 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32_gfx12:
1415 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64_gfx12:
1416 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32_gfx12:
1417 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64_gfx12:
1418 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32_gfx12:
1419 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64_gfx12:
1420 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32_gfx12:
1421 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64_gfx12:
1422 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w32_gfx12:
1423 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w64_gfx12:
1424 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w32_gfx12:
1425 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w64_gfx12:
1426 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w32_gfx12:
1427 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w64_gfx12:
1428 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w32_gfx12:
1429 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w64_gfx12:
1430 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w32_gfx12:
1431 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w64_gfx12:
1432 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w32:
1433 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w64:
1434 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w32:
1435 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w64:
1436 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w32:
1437 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w64:
1438 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w32:
1439 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w64:
1440 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w32:
1441 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w64:
1442 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w32:
1443 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w64:
1444 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w32:
1445 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w64:
1446 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w32:
1447 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w64:
1448 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w32:
1449 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w64:
1450 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w32:
1451 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w64:
1452 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w32:
1453 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w64:
1455 case AMDGPU::BI__builtin_amdgcn_wmma_f64_16x16x4_f64:
1456 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x4_f32:
1457 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_bf16:
1458 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_f16:
1459 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x32_f16:
1460 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x32_bf16:
1461 case AMDGPU::BI__builtin_amdgcn_wmma_bf16f32_16x16x32_bf16:
1462 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_fp8:
1463 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_bf8:
1464 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_fp8:
1465 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_bf8:
1466 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_fp8:
1467 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_bf8:
1468 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_fp8:
1469 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_bf8:
1470 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_fp8:
1471 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_bf8:
1472 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_fp8:
1473 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_bf8:
1474 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_fp8:
1475 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_bf8:
1476 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_fp8:
1477 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_bf8:
1478 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8:
1479 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_f8f6f4:
1480 case AMDGPU::BI__builtin_amdgcn_wmma_f32_32x16x128_f4:
1481 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_16x16x128_f8f6f4:
1482 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4:
1483 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_32x16x128_f4:
1484 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_32x16x128_f4:
1485 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_f16:
1486 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_bf16:
1487 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x64_f16:
1488 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x64_bf16:
1489 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16f32_16x16x64_bf16:
1490 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_fp8:
1491 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_bf8:
1492 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_fp8:
1493 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_bf8:
1494 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_fp8:
1495 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_bf8:
1496 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_fp8:
1497 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_bf8:
1498 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8: {
1511 bool AppendFalseForOpselArg =
false;
1512 unsigned BuiltinWMMAOp;
1514 bool NeedReturnType =
false;
1516 bool RemoveABNeg =
false;
1518 switch (BuiltinID) {
1519 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32:
1520 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64:
1521 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32_gfx12:
1522 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64_gfx12:
1523 ArgsForMatchingMatrixTypes = {2, 0};
1524 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_f16;
1526 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32:
1527 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64:
1528 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32_gfx12:
1529 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64_gfx12:
1530 ArgsForMatchingMatrixTypes = {2, 0};
1531 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_bf16;
1533 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32_gfx12:
1534 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64_gfx12:
1535 AppendFalseForOpselArg =
true;
1537 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32:
1538 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64:
1539 ArgsForMatchingMatrixTypes = {2, 0};
1540 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x16_f16;
1542 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32_gfx12:
1543 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64_gfx12:
1544 AppendFalseForOpselArg =
true;
1546 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32:
1547 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64:
1548 ArgsForMatchingMatrixTypes = {2, 0};
1549 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16_16x16x16_bf16;
1551 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w32:
1552 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w64:
1553 ArgsForMatchingMatrixTypes = {2, 0};
1554 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x16_f16_tied;
1556 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w32:
1557 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w64:
1558 ArgsForMatchingMatrixTypes = {2, 0};
1559 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16_16x16x16_bf16_tied;
1561 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32:
1562 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64:
1563 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32_gfx12:
1564 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64_gfx12:
1565 ArgsForMatchingMatrixTypes = {4, 1};
1566 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x16_iu8;
1568 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32:
1569 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64:
1570 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32_gfx12:
1571 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64_gfx12:
1572 ArgsForMatchingMatrixTypes = {4, 1};
1573 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x16_iu4;
1575 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w32_gfx12:
1576 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w64_gfx12:
1577 ArgsForMatchingMatrixTypes = {2, 0};
1578 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_fp8_fp8;
1580 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w32_gfx12:
1581 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w64_gfx12:
1582 ArgsForMatchingMatrixTypes = {2, 0};
1583 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_fp8_bf8;
1585 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w32_gfx12:
1586 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w64_gfx12:
1587 ArgsForMatchingMatrixTypes = {2, 0};
1588 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_bf8_fp8;
1590 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w32_gfx12:
1591 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w64_gfx12:
1592 ArgsForMatchingMatrixTypes = {2, 0};
1593 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_bf8_bf8;
1595 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w32_gfx12:
1596 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w64_gfx12:
1597 ArgsForMatchingMatrixTypes = {4, 1};
1598 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x32_iu4;
1600 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w32:
1601 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w64:
1602 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1603 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_f16;
1605 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w32:
1606 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w64:
1607 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1608 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_bf16;
1610 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w32:
1611 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w64:
1612 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1613 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x32_f16;
1615 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w32:
1616 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w64:
1617 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1618 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_bf16_16x16x32_bf16;
1620 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w32:
1621 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w64:
1622 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1623 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x32_iu8;
1625 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w32:
1626 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w64:
1627 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1628 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x32_iu4;
1630 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w32:
1631 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w64:
1632 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1633 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x64_iu4;
1635 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w32:
1636 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w64:
1637 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1638 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_fp8_fp8;
1640 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w32:
1641 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w64:
1642 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1643 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_fp8_bf8;
1645 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w32:
1646 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w64:
1647 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1648 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_bf8_fp8;
1650 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w32:
1651 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w64:
1652 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1653 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_bf8_bf8;
1656 case AMDGPU::BI__builtin_amdgcn_wmma_f64_16x16x4_f64:
1657 ArgsForMatchingMatrixTypes = {5, 1};
1658 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f64_16x16x4_f64;
1660 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x4_f32:
1661 ArgsForMatchingMatrixTypes = {3, 0};
1662 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x4_f32;
1665 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_bf16:
1666 ArgsForMatchingMatrixTypes = {3, 0};
1667 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x32_bf16;
1670 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_f16:
1671 ArgsForMatchingMatrixTypes = {3, 0};
1672 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x32_f16;
1675 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x32_f16:
1676 ArgsForMatchingMatrixTypes = {3, 0};
1677 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x32_f16;
1680 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x32_bf16:
1681 ArgsForMatchingMatrixTypes = {3, 0};
1682 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16_16x16x32_bf16;
1685 case AMDGPU::BI__builtin_amdgcn_wmma_bf16f32_16x16x32_bf16:
1686 NeedReturnType =
true;
1687 ArgsForMatchingMatrixTypes = {0, 3};
1688 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16f32_16x16x32_bf16;
1691 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_fp8:
1692 ArgsForMatchingMatrixTypes = {3, 0};
1693 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_fp8_fp8;
1695 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_bf8:
1696 ArgsForMatchingMatrixTypes = {3, 0};
1697 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_fp8_bf8;
1699 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_fp8:
1700 ArgsForMatchingMatrixTypes = {3, 0};
1701 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_bf8_fp8;
1703 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_bf8:
1704 ArgsForMatchingMatrixTypes = {3, 0};
1705 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_bf8_bf8;
1707 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_fp8:
1708 ArgsForMatchingMatrixTypes = {3, 0};
1709 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_fp8_fp8;
1711 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_bf8:
1712 ArgsForMatchingMatrixTypes = {3, 0};
1713 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_fp8_bf8;
1715 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_fp8:
1716 ArgsForMatchingMatrixTypes = {3, 0};
1717 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_bf8_fp8;
1719 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_bf8:
1720 ArgsForMatchingMatrixTypes = {3, 0};
1721 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_bf8_bf8;
1723 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_fp8:
1724 ArgsForMatchingMatrixTypes = {3, 0};
1725 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_fp8_fp8;
1727 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_bf8:
1728 ArgsForMatchingMatrixTypes = {3, 0};
1729 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_fp8_bf8;
1731 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_fp8:
1732 ArgsForMatchingMatrixTypes = {3, 0};
1733 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_bf8_fp8;
1735 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_bf8:
1736 ArgsForMatchingMatrixTypes = {3, 0};
1737 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_bf8_bf8;
1739 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_fp8:
1740 ArgsForMatchingMatrixTypes = {3, 0};
1741 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_fp8_fp8;
1743 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_bf8:
1744 ArgsForMatchingMatrixTypes = {3, 0};
1745 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_fp8_bf8;
1747 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_fp8:
1748 ArgsForMatchingMatrixTypes = {3, 0};
1749 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_bf8_fp8;
1751 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_bf8:
1752 ArgsForMatchingMatrixTypes = {3, 0};
1753 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_bf8_bf8;
1755 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8:
1756 ArgsForMatchingMatrixTypes = {4, 1};
1757 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x64_iu8;
1759 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_f8f6f4:
1760 ArgsForMatchingMatrixTypes = {5, 1, 3};
1761 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_f8f6f4;
1763 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_16x16x128_f8f6f4:
1764 ArgsForMatchingMatrixTypes = {5, 1, 3};
1765 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale_f32_16x16x128_f8f6f4;
1767 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4:
1768 ArgsForMatchingMatrixTypes = {5, 1, 3};
1769 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale16_f32_16x16x128_f8f6f4;
1771 case AMDGPU::BI__builtin_amdgcn_wmma_f32_32x16x128_f4:
1772 ArgsForMatchingMatrixTypes = {3, 0, 1};
1773 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_32x16x128_f4;
1775 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_32x16x128_f4:
1776 ArgsForMatchingMatrixTypes = {3, 0, 1};
1777 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale_f32_32x16x128_f4;
1779 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_32x16x128_f4:
1780 ArgsForMatchingMatrixTypes = {3, 0, 1};
1781 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale16_f32_32x16x128_f4;
1783 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_f16:
1784 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1785 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x64_f16;
1787 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_bf16:
1788 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1789 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x64_bf16;
1791 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x64_f16:
1792 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1793 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x64_f16;
1795 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x64_bf16:
1796 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1797 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_bf16_16x16x64_bf16;
1799 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16f32_16x16x64_bf16:
1800 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1801 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_bf16f32_16x16x64_bf16;
1803 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_fp8:
1804 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1805 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_fp8_fp8;
1807 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_bf8:
1808 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1809 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_fp8_bf8;
1811 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_fp8:
1812 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1813 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_bf8_fp8;
1815 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_bf8:
1816 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1817 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_bf8_bf8;
1819 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_fp8:
1820 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1821 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_fp8_fp8;
1823 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_bf8:
1824 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1825 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_fp8_bf8;
1827 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_fp8:
1828 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1829 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_bf8_fp8;
1831 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_bf8:
1832 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1833 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_bf8_bf8;
1835 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8:
1836 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1837 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x128_iu8;
1842 for (
int i = 0, e = E->
getNumArgs(); i != e; ++i) {
1844 if (RemoveABNeg && (i == 0 || i == 2))
1848 if (AppendFalseForOpselArg)
1849 Args.push_back(
Builder.getFalse());
1852 if (BuiltinID == AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8) {
1853 if (Args.size() == 7)
1854 Args.push_back(
Builder.getFalse());
1855 assert(Args.size() == 8 &&
"Expected 8 arguments");
1856 Args[7] =
Builder.CreateZExtOrTrunc(Args[7],
Builder.getInt1Ty());
1857 }
else if (BuiltinID ==
1858 AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8) {
1859 if (Args.size() == 8)
1860 Args.push_back(
Builder.getFalse());
1861 assert(Args.size() == 9 &&
"Expected 9 arguments");
1862 Args[8] =
Builder.CreateZExtOrTrunc(Args[8],
Builder.getInt1Ty());
1868 for (
auto ArgIdx : ArgsForMatchingMatrixTypes)
1869 ArgTypes.push_back(Args[ArgIdx]->
getType());
1871 Function *F =
CGM.getIntrinsic(BuiltinWMMAOp, ArgTypes);
1872 return Builder.CreateCall(F, Args);
1875 case AMDGPU::BI__builtin_amdgcn_workgroup_size_x:
1876 return EmitAMDGPUWorkGroupSize(*
this, 0);
1877 case AMDGPU::BI__builtin_amdgcn_workgroup_size_y:
1878 return EmitAMDGPUWorkGroupSize(*
this, 1);
1879 case AMDGPU::BI__builtin_amdgcn_workgroup_size_z:
1880 return EmitAMDGPUWorkGroupSize(*
this, 2);
1883 case AMDGPU::BI__builtin_amdgcn_grid_size_x:
1884 return EmitAMDGPUGridSize(*
this, 0);
1885 case AMDGPU::BI__builtin_amdgcn_grid_size_y:
1886 return EmitAMDGPUGridSize(*
this, 1);
1887 case AMDGPU::BI__builtin_amdgcn_grid_size_z:
1888 return EmitAMDGPUGridSize(*
this, 2);
1891 case AMDGPU::BI__builtin_r600_recipsqrt_ieee:
1892 case AMDGPU::BI__builtin_r600_recipsqrt_ieeef:
1894 Intrinsic::r600_recipsqrt_ieee);
1895 case AMDGPU::BI__builtin_amdgcn_alignbit: {
1899 Function *F =
CGM.getIntrinsic(Intrinsic::fshr, Src0->getType());
1900 return Builder.CreateCall(F, { Src0, Src1, Src2 });
1902 case AMDGPU::BI__builtin_amdgcn_fence: {
1905 FenceInst *Fence =
Builder.CreateFence(AO, SSID);
1910 case AMDGPU::BI__builtin_amdgcn_atomic_inc32:
1911 case AMDGPU::BI__builtin_amdgcn_atomic_inc64:
1912 case AMDGPU::BI__builtin_amdgcn_atomic_dec32:
1913 case AMDGPU::BI__builtin_amdgcn_atomic_dec64:
1914 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f64:
1915 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f32:
1916 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2f16:
1917 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16:
1918 case AMDGPU::BI__builtin_amdgcn_ds_faddf:
1919 case AMDGPU::BI__builtin_amdgcn_ds_fminf:
1920 case AMDGPU::BI__builtin_amdgcn_ds_fmaxf:
1921 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f32:
1922 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f64:
1923 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2f16:
1924 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2f16:
1925 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f32:
1926 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f64:
1927 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16:
1928 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16:
1929 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmin_f64:
1930 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmax_f64:
1931 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmin_f64:
1932 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmax_f64: {
1933 llvm::AtomicRMWInst::BinOp BinOp;
1934 switch (BuiltinID) {
1935 case AMDGPU::BI__builtin_amdgcn_atomic_inc32:
1936 case AMDGPU::BI__builtin_amdgcn_atomic_inc64:
1937 BinOp = llvm::AtomicRMWInst::UIncWrap;
1939 case AMDGPU::BI__builtin_amdgcn_atomic_dec32:
1940 case AMDGPU::BI__builtin_amdgcn_atomic_dec64:
1941 BinOp = llvm::AtomicRMWInst::UDecWrap;
1943 case AMDGPU::BI__builtin_amdgcn_ds_faddf:
1944 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f64:
1945 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f32:
1946 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2f16:
1947 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16:
1948 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f32:
1949 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f64:
1950 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2f16:
1951 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2f16:
1952 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f32:
1953 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f64:
1954 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16:
1955 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16:
1956 BinOp = llvm::AtomicRMWInst::FAdd;
1958 case AMDGPU::BI__builtin_amdgcn_ds_fminf:
1959 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmin_f64:
1960 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmin_f64:
1961 BinOp = llvm::AtomicRMWInst::FMin;
1963 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmax_f64:
1964 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmax_f64:
1965 case AMDGPU::BI__builtin_amdgcn_ds_fmaxf:
1966 BinOp = llvm::AtomicRMWInst::FMax;
1972 llvm::Type *OrigTy = Val->
getType();
1977 if (BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_faddf ||
1978 BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_fminf ||
1979 BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_fmaxf) {
2004 AO = AtomicOrdering::Monotonic;
2007 if (BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16 ||
2008 BuiltinID == AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16 ||
2009 BuiltinID == AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16) {
2010 llvm::Type *V2BF16Ty = FixedVectorType::get(
2011 llvm::Type::getBFloatTy(
Builder.getContext()), 2);
2012 Val =
Builder.CreateBitCast(Val, V2BF16Ty);
2016 llvm::AtomicRMWInst *RMW =
2017 Builder.CreateAtomicRMW(BinOp, Ptr, Val, AO, SSID);
2019 RMW->setVolatile(
true);
2021 unsigned AddrSpace = Ptr.
getType()->getAddressSpace();
2022 if (AddrSpace != llvm::AMDGPUAS::LOCAL_ADDRESS) {
2026 RMW->setMetadata(
"amdgpu.no.fine.grained.memory", EmptyMD);
2030 if (BinOp == llvm::AtomicRMWInst::FAdd && Val->
getType()->isFloatTy())
2031 RMW->setMetadata(
"amdgpu.ignore.denormal.mode", EmptyMD);
2034 return Builder.CreateBitCast(RMW, OrigTy);
2036 case AMDGPU::BI__builtin_amdgcn_s_sendmsg_rtn:
2037 case AMDGPU::BI__builtin_amdgcn_s_sendmsg_rtnl: {
2042 CGM.getIntrinsic(Intrinsic::amdgcn_s_sendmsg_rtn, {ResultType});
2043 return Builder.CreateCall(F, {Arg});
2045 case AMDGPU::BI__builtin_amdgcn_permlane16_swap:
2046 case AMDGPU::BI__builtin_amdgcn_permlane32_swap: {
2054 CGM.getIntrinsic(BuiltinID == AMDGPU::BI__builtin_amdgcn_permlane16_swap
2055 ? Intrinsic::amdgcn_permlane16_swap
2056 : Intrinsic::amdgcn_permlane32_swap);
2057 llvm::CallInst *
Call =
2058 Builder.CreateCall(F, {VDstOld, VSrcOld, FI, BoundCtrl});
2060 llvm::Value *Elt0 =
Builder.CreateExtractValue(
Call, 0);
2061 llvm::Value *Elt1 =
Builder.CreateExtractValue(
Call, 1);
2065 llvm::Value *Insert0 =
Builder.CreateInsertElement(
2066 llvm::PoisonValue::get(ResultType), Elt0, UINT64_C(0));
2067 llvm::Value *AsVector =
2068 Builder.CreateInsertElement(Insert0, Elt1, UINT64_C(1));
2071 case AMDGPU::BI__builtin_amdgcn_bitop3_b32:
2072 case AMDGPU::BI__builtin_amdgcn_bitop3_b16:
2074 Intrinsic::amdgcn_bitop3);
2075 case AMDGPU::BI__builtin_amdgcn_make_buffer_rsrc: {
2080 for (
unsigned I = 0; I < 4; ++I)
2082 llvm::PointerType *RetTy = llvm::PointerType::get(
2083 Builder.getContext(), llvm::AMDGPUAS::BUFFER_RESOURCE);
2084 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_make_buffer_rsrc,
2085 {RetTy, Args[0]->getType()});
2086 return Builder.CreateCall(F, Args);
2088 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b8:
2089 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b16:
2090 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b32:
2091 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b64:
2092 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b96:
2093 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b128:
2095 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_store);
2096 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_format_v4f32:
2097 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_format_v4f16:
2099 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_store_format);
2100 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b8:
2101 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b16:
2102 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b32:
2103 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b64:
2104 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b96:
2105 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b128: {
2106 llvm::Type *RetTy =
nullptr;
2107 switch (BuiltinID) {
2108 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b8:
2111 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b16:
2114 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b32:
2117 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b64:
2118 RetTy = llvm::FixedVectorType::get(
Int32Ty, 2);
2120 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b96:
2121 RetTy = llvm::FixedVectorType::get(
Int32Ty, 3);
2123 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b128:
2124 RetTy = llvm::FixedVectorType::get(
Int32Ty, 4);
2128 CGM.getIntrinsic(Intrinsic::amdgcn_raw_ptr_buffer_load, RetTy);
2133 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_format_v4f32:
2134 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_format_v4f16: {
2137 CGM.getIntrinsic(Intrinsic::amdgcn_raw_ptr_buffer_load_format, {RetTy});
2143 case AMDGPU::BI__builtin_amdgcn_struct_buffer_store_format_v4f32:
2144 case AMDGPU::BI__builtin_amdgcn_struct_buffer_store_format_v4f16:
2146 *
this, E, Intrinsic::amdgcn_struct_ptr_buffer_store_format);
2147 case AMDGPU::BI__builtin_amdgcn_struct_buffer_load_format_v4f32:
2148 case AMDGPU::BI__builtin_amdgcn_struct_buffer_load_format_v4f16: {
2151 Intrinsic::amdgcn_struct_ptr_buffer_load_format, {RetTy});
2158 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_add_i32:
2160 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_add);
2161 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_f32:
2162 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_v2f16:
2164 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_fadd);
2165 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmin_f32:
2166 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmin_f64:
2168 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_fmin);
2169 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmax_f32:
2170 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmax_f64:
2172 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_fmax);
2173 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_i32:
2174 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v2i32:
2175 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v3i32:
2176 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v4i32:
2177 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v8i32:
2178 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v16i32:
2179 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_f32:
2180 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v2f32:
2181 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v3f32:
2182 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v4f32:
2183 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v8f32:
2184 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v16f32:
2185 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_i8:
2186 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_u8:
2187 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_i16:
2188 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_u16:
2189 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v2i8:
2190 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v3i8:
2191 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v4i8:
2192 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_f16:
2193 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v2f16:
2194 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v3f16:
2195 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v4f16:
2196 return emitAMDGPUSBufferLoadBuiltin(*
this, E);
2197 case AMDGPU::BI__builtin_amdgcn_s_prefetch_data:
2199 *
this, E, Intrinsic::amdgcn_s_prefetch_data);
2200 case Builtin::BIlogbf:
2201 case Builtin::BI__builtin_logbf: {
2205 CallInst *FrExp =
Builder.CreateCall(FrExpFunc, Src0);
2208 Exp, ConstantInt::getSigned(Exp->
getType(), -1),
"",
false,
true);
2213 Fabs, ConstantFP::getInfinity(
Builder.getFloatTy()));
2214 Value *Sel1 =
Builder.CreateSelect(FCmpONE, SIToFP, Fabs);
2216 Builder.CreateFCmpOEQ(Src0, ConstantFP::getZero(
Builder.getFloatTy()));
2219 ConstantFP::getInfinity(
Builder.getFloatTy(),
true), Sel1);
2222 case Builtin::BIlogb:
2223 case Builtin::BI__builtin_logb: {
2227 CallInst *FrExp =
Builder.CreateCall(FrExpFunc, Src0);
2230 Exp, ConstantInt::getSigned(Exp->
getType(), -1),
"",
false,
true);
2235 Fabs, ConstantFP::getInfinity(
Builder.getDoubleTy()));
2236 Value *Sel1 =
Builder.CreateSelect(FCmpONE, SIToFP, Fabs);
2238 Builder.CreateFCmpOEQ(Src0, ConstantFP::getZero(
Builder.getDoubleTy()));
2241 ConstantFP::getInfinity(
Builder.getDoubleTy(),
true),
2245 case Builtin::BIscalbnf:
2246 case Builtin::BI__builtin_scalbnf:
2247 case Builtin::BIscalbn:
2248 case Builtin::BI__builtin_scalbn:
2250 *
this, E, Intrinsic::ldexp, Intrinsic::experimental_constrained_ldexp);
2251 case AMDGPU::BI__builtin_amdgcn_permlane_bcast:
2253 *
this, E, Intrinsic::amdgcn_permlane_bcast);
2254 case AMDGPU::BI__builtin_amdgcn_permlane_up:
2256 Intrinsic::amdgcn_permlane_up);
2257 case AMDGPU::BI__builtin_amdgcn_permlane_down:
2259 Intrinsic::amdgcn_permlane_down);
2260 case AMDGPU::BI__builtin_amdgcn_permlane_xor:
2262 Intrinsic::amdgcn_permlane_xor);