575 llvm::AtomicOrdering AO = llvm::AtomicOrdering::SequentiallyConsistent;
576 llvm::SyncScope::ID SSID;
578 case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u32:
579 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fadd_f32:
580 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fadd_f64:
581 case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u32:
582 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fsub_f32:
583 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fsub_f64:
584 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i32:
585 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u32:
586 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmin_f32:
587 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmin_f64:
588 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i32:
589 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u32:
590 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmax_f32:
591 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmax_f64:
592 case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b32:
593 case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b32:
594 case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b32:
595 case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u64:
596 case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u64:
597 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i64:
598 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u64:
599 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i64:
600 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u64:
601 case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b64:
602 case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b64:
603 case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b64: {
610 case AMDGPU::BI__builtin_amdgcn_div_scale:
611 case AMDGPU::BI__builtin_amdgcn_div_scalef: {
621 llvm::Function *Callee =
CGM.getIntrinsic(Intrinsic::amdgcn_div_scale,
624 llvm::Value *Tmp =
Builder.CreateCall(Callee, {
X, Y, Z});
627 llvm::Value *Flag =
Builder.CreateExtractValue(Tmp, 1);
631 llvm::Value *FlagExt =
Builder.CreateZExt(Flag, RealFlagType);
632 Builder.CreateStore(FlagExt, FlagOutPtr);
635 case AMDGPU::BI__builtin_amdgcn_div_fmas:
636 case AMDGPU::BI__builtin_amdgcn_div_fmasf: {
642 llvm::Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_div_fmas,
644 llvm::Value *Src3ToBool =
Builder.CreateIsNotNull(Src3);
645 return Builder.CreateCall(F, {Src0, Src1, Src2, Src3ToBool});
648 case AMDGPU::BI__builtin_amdgcn_mov_dpp8:
649 case AMDGPU::BI__builtin_amdgcn_mov_dpp:
650 case AMDGPU::BI__builtin_amdgcn_update_dpp: {
654 unsigned ICEArguments = 0;
659 unsigned Size = DataTy->getPrimitiveSizeInBits();
661 llvm::IntegerType::get(
Builder.getContext(), std::max(Size, 32u));
663 CGM.getIntrinsic(BuiltinID == AMDGPU::BI__builtin_amdgcn_mov_dpp8
664 ? Intrinsic::amdgcn_mov_dpp8
665 : Intrinsic::amdgcn_update_dpp,
669 bool InsertOld = BuiltinID == AMDGPU::BI__builtin_amdgcn_mov_dpp;
671 Args.push_back(llvm::PoisonValue::get(
IntTy));
672 for (
unsigned I = 0; I != E->
getNumArgs(); ++I) {
674 if (I < (BuiltinID == AMDGPU::BI__builtin_amdgcn_update_dpp ? 2u : 1u) &&
676 if (!DataTy->isIntegerTy())
678 V, llvm::IntegerType::get(
Builder.getContext(), Size));
682 F->getFunctionType()->getFunctionParamType(I + InsertOld);
683 Args.push_back(
Builder.CreateTruncOrBitCast(
V, ExpTy));
686 if (Size < 32 && !DataTy->isIntegerTy())
688 V, llvm::IntegerType::get(
Builder.getContext(), Size));
689 return Builder.CreateTruncOrBitCast(
V, DataTy);
691 case AMDGPU::BI__builtin_amdgcn_permlane16:
692 case AMDGPU::BI__builtin_amdgcn_permlanex16:
695 BuiltinID == AMDGPU::BI__builtin_amdgcn_permlane16
696 ? Intrinsic::amdgcn_permlane16
697 : Intrinsic::amdgcn_permlanex16);
698 case AMDGPU::BI__builtin_amdgcn_permlane64:
700 Intrinsic::amdgcn_permlane64);
701 case AMDGPU::BI__builtin_amdgcn_readlane: {
717 case AMDGPU::BI__builtin_amdgcn_wave_shuffle: {
734 case AMDGPU::BI__builtin_amdgcn_readfirstlane:
736 Intrinsic::amdgcn_readfirstlane);
737 case AMDGPU::BI__builtin_amdgcn_div_fixup:
738 case AMDGPU::BI__builtin_amdgcn_div_fixupf:
739 case AMDGPU::BI__builtin_amdgcn_div_fixuph:
741 Intrinsic::amdgcn_div_fixup);
742 case AMDGPU::BI__builtin_amdgcn_trig_preop:
743 case AMDGPU::BI__builtin_amdgcn_trig_preopf:
745 case AMDGPU::BI__builtin_amdgcn_rcp:
746 case AMDGPU::BI__builtin_amdgcn_rcpf:
747 case AMDGPU::BI__builtin_amdgcn_rcph:
748 case AMDGPU::BI__builtin_amdgcn_rcp_bf16:
750 case AMDGPU::BI__builtin_amdgcn_sqrt:
751 case AMDGPU::BI__builtin_amdgcn_sqrtf:
752 case AMDGPU::BI__builtin_amdgcn_sqrth:
753 case AMDGPU::BI__builtin_amdgcn_sqrt_bf16:
755 Intrinsic::amdgcn_sqrt);
756 case AMDGPU::BI__builtin_amdgcn_rsq:
757 case AMDGPU::BI__builtin_amdgcn_rsqf:
758 case AMDGPU::BI__builtin_amdgcn_rsqh:
759 case AMDGPU::BI__builtin_amdgcn_rsq_bf16:
761 case AMDGPU::BI__builtin_amdgcn_rsq_clamp:
762 case AMDGPU::BI__builtin_amdgcn_rsq_clampf:
764 Intrinsic::amdgcn_rsq_clamp);
765 case AMDGPU::BI__builtin_amdgcn_sinf:
766 case AMDGPU::BI__builtin_amdgcn_sinh:
767 case AMDGPU::BI__builtin_amdgcn_sin_bf16:
769 case AMDGPU::BI__builtin_amdgcn_cosf:
770 case AMDGPU::BI__builtin_amdgcn_cosh:
771 case AMDGPU::BI__builtin_amdgcn_cos_bf16:
773 case AMDGPU::BI__builtin_amdgcn_dispatch_ptr:
774 return EmitAMDGPUDispatchPtr(*
this, E);
775 case AMDGPU::BI__builtin_amdgcn_logf:
776 case AMDGPU::BI__builtin_amdgcn_log_bf16:
778 case AMDGPU::BI__builtin_amdgcn_exp2f:
779 case AMDGPU::BI__builtin_amdgcn_exp2_bf16:
781 Intrinsic::amdgcn_exp2);
782 case AMDGPU::BI__builtin_amdgcn_log_clampf:
784 Intrinsic::amdgcn_log_clamp);
785 case AMDGPU::BI__builtin_amdgcn_ldexp:
786 case AMDGPU::BI__builtin_amdgcn_ldexpf: {
790 CGM.getIntrinsic(Intrinsic::ldexp, {Src0->getType(), Src1->getType()});
791 return Builder.CreateCall(F, {Src0, Src1});
793 case AMDGPU::BI__builtin_amdgcn_ldexph: {
799 CGM.getIntrinsic(Intrinsic::ldexp, {Src0->getType(),
Int16Ty});
802 case AMDGPU::BI__builtin_amdgcn_frexp_mant:
803 case AMDGPU::BI__builtin_amdgcn_frexp_mantf:
804 case AMDGPU::BI__builtin_amdgcn_frexp_manth:
806 Intrinsic::amdgcn_frexp_mant);
807 case AMDGPU::BI__builtin_amdgcn_frexp_exp:
808 case AMDGPU::BI__builtin_amdgcn_frexp_expf: {
810 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_frexp_exp,
812 return Builder.CreateCall(F, Src0);
814 case AMDGPU::BI__builtin_amdgcn_frexp_exph: {
816 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_frexp_exp,
818 return Builder.CreateCall(F, Src0);
820 case AMDGPU::BI__builtin_amdgcn_fract:
821 case AMDGPU::BI__builtin_amdgcn_fractf:
822 case AMDGPU::BI__builtin_amdgcn_fracth:
824 Intrinsic::amdgcn_fract);
825 case AMDGPU::BI__builtin_amdgcn_ubfe:
827 Intrinsic::amdgcn_ubfe);
828 case AMDGPU::BI__builtin_amdgcn_sbfe:
830 Intrinsic::amdgcn_sbfe);
831 case AMDGPU::BI__builtin_amdgcn_ballot_w32:
832 case AMDGPU::BI__builtin_amdgcn_ballot_w64: {
835 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_ballot, {ResultType});
836 return Builder.CreateCall(F, {Src});
838 case AMDGPU::BI__builtin_amdgcn_inverse_ballot_w32:
839 case AMDGPU::BI__builtin_amdgcn_inverse_ballot_w64: {
842 CGM.getIntrinsic(Intrinsic::amdgcn_inverse_ballot, {Src->getType()});
843 return Builder.CreateCall(F, {Src});
845 case AMDGPU::BI__builtin_amdgcn_tanhf:
846 case AMDGPU::BI__builtin_amdgcn_tanhh:
847 case AMDGPU::BI__builtin_amdgcn_tanh_bf16:
849 Intrinsic::amdgcn_tanh);
850 case AMDGPU::BI__builtin_amdgcn_uicmp:
851 case AMDGPU::BI__builtin_amdgcn_uicmpl:
852 case AMDGPU::BI__builtin_amdgcn_sicmp:
853 case AMDGPU::BI__builtin_amdgcn_sicmpl:
854 case AMDGPU::BI__builtin_amdgcn_fcmp:
855 case AMDGPU::BI__builtin_amdgcn_fcmpf: {
858 CmpInst::Predicate Pred =
static_cast<CmpInst::Predicate
>(
863 Intrinsic::amdgcn_ballot,
864 Builder.CreateCmp(Pred, LHS, RHS));
866 case AMDGPU::BI__builtin_amdgcn_class:
867 case AMDGPU::BI__builtin_amdgcn_classf:
868 case AMDGPU::BI__builtin_amdgcn_classh:
870 case AMDGPU::BI__builtin_amdgcn_fmed3f:
871 case AMDGPU::BI__builtin_amdgcn_fmed3h:
873 Intrinsic::amdgcn_fmed3);
874 case AMDGPU::BI__builtin_amdgcn_ds_append:
875 case AMDGPU::BI__builtin_amdgcn_ds_consume: {
876 Intrinsic::ID Intrin = BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_append ?
877 Intrinsic::amdgcn_ds_append : Intrinsic::amdgcn_ds_consume;
882 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_i32:
883 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_v2i32:
884 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4i16:
885 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4f16:
886 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4bf16:
887 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8i16:
888 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8f16:
889 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8bf16:
890 case AMDGPU::BI__builtin_amdgcn_global_load_tr4_b64_v2i32:
891 case AMDGPU::BI__builtin_amdgcn_global_load_tr8_b64_v2i32:
892 case AMDGPU::BI__builtin_amdgcn_global_load_tr6_b96_v3i32:
893 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8i16:
894 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8f16:
895 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8bf16:
896 case AMDGPU::BI__builtin_amdgcn_ds_load_tr4_b64_v2i32:
897 case AMDGPU::BI__builtin_amdgcn_ds_load_tr8_b64_v2i32:
898 case AMDGPU::BI__builtin_amdgcn_ds_load_tr6_b96_v3i32:
899 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8i16:
900 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8f16:
901 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8bf16:
902 case AMDGPU::BI__builtin_amdgcn_ds_read_tr4_b64_v2i32:
903 case AMDGPU::BI__builtin_amdgcn_ds_read_tr8_b64_v2i32:
904 case AMDGPU::BI__builtin_amdgcn_ds_read_tr6_b96_v3i32:
905 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4f16:
906 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4bf16:
907 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4i16: {
910 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_i32:
911 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_v2i32:
912 case AMDGPU::BI__builtin_amdgcn_global_load_tr8_b64_v2i32:
913 IID = Intrinsic::amdgcn_global_load_tr_b64;
915 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4i16:
916 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4f16:
917 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4bf16:
918 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8i16:
919 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8f16:
920 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8bf16:
921 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8i16:
922 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8f16:
923 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8bf16:
924 IID = Intrinsic::amdgcn_global_load_tr_b128;
926 case AMDGPU::BI__builtin_amdgcn_global_load_tr4_b64_v2i32:
927 IID = Intrinsic::amdgcn_global_load_tr4_b64;
929 case AMDGPU::BI__builtin_amdgcn_global_load_tr6_b96_v3i32:
930 IID = Intrinsic::amdgcn_global_load_tr6_b96;
932 case AMDGPU::BI__builtin_amdgcn_ds_load_tr4_b64_v2i32:
933 IID = Intrinsic::amdgcn_ds_load_tr4_b64;
935 case AMDGPU::BI__builtin_amdgcn_ds_load_tr6_b96_v3i32:
936 IID = Intrinsic::amdgcn_ds_load_tr6_b96;
938 case AMDGPU::BI__builtin_amdgcn_ds_load_tr8_b64_v2i32:
939 IID = Intrinsic::amdgcn_ds_load_tr8_b64;
941 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8i16:
942 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8f16:
943 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8bf16:
944 IID = Intrinsic::amdgcn_ds_load_tr16_b128;
946 case AMDGPU::BI__builtin_amdgcn_ds_read_tr4_b64_v2i32:
947 IID = Intrinsic::amdgcn_ds_read_tr4_b64;
949 case AMDGPU::BI__builtin_amdgcn_ds_read_tr8_b64_v2i32:
950 IID = Intrinsic::amdgcn_ds_read_tr8_b64;
952 case AMDGPU::BI__builtin_amdgcn_ds_read_tr6_b96_v3i32:
953 IID = Intrinsic::amdgcn_ds_read_tr6_b96;
955 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4i16:
956 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4f16:
957 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4bf16:
958 IID = Intrinsic::amdgcn_ds_read_tr16_b64;
963 llvm::Function *F =
CGM.getIntrinsic(IID, {LoadTy});
966 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b32:
967 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b64:
968 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b128:
969 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b32:
970 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b64:
971 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b128: {
975 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b32:
976 IID = Intrinsic::amdgcn_global_load_monitor_b32;
978 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b64:
979 IID = Intrinsic::amdgcn_global_load_monitor_b64;
981 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b128:
982 IID = Intrinsic::amdgcn_global_load_monitor_b128;
984 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b32:
985 IID = Intrinsic::amdgcn_flat_load_monitor_b32;
987 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b64:
988 IID = Intrinsic::amdgcn_flat_load_monitor_b64;
990 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b128:
991 IID = Intrinsic::amdgcn_flat_load_monitor_b128;
1002 llvm::Value *ScopeMD =
emitScopeMD(*
this, ScopeExpr->getZExtValue(), AO);
1003 llvm::Function *F =
CGM.getIntrinsic(IID, {LoadTy});
1004 return Builder.CreateCall(F, {
Addr, AOExpr, ScopeMD});
1006 case AMDGPU::BI__builtin_amdgcn_cluster_load_b32:
1007 case AMDGPU::BI__builtin_amdgcn_cluster_load_b64:
1008 case AMDGPU::BI__builtin_amdgcn_cluster_load_b128: {
1010 switch (BuiltinID) {
1011 case AMDGPU::BI__builtin_amdgcn_cluster_load_b32:
1012 IID = Intrinsic::amdgcn_cluster_load_b32;
1014 case AMDGPU::BI__builtin_amdgcn_cluster_load_b64:
1015 IID = Intrinsic::amdgcn_cluster_load_b64;
1017 case AMDGPU::BI__builtin_amdgcn_cluster_load_b128:
1018 IID = Intrinsic::amdgcn_cluster_load_b128;
1022 for (
int i = 0, e = E->
getNumArgs(); i != e; ++i)
1025 return Builder.CreateCall(F, {Args});
1027 case AMDGPU::BI__builtin_amdgcn_load_to_lds: {
1030 Intrinsic::amdgcn_load_to_lds);
1032 case AMDGPU::BI__builtin_amdgcn_load_async_to_lds: {
1035 *
this, E, Intrinsic::amdgcn_load_async_to_lds);
1037 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_32x4B:
1038 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_32x4B:
1039 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_16x8B:
1040 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_16x8B:
1041 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_8x16B:
1042 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_8x16B: {
1044 switch (BuiltinID) {
1045 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_32x4B:
1046 IID = Intrinsic::amdgcn_cooperative_atomic_load_32x4B;
1048 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_32x4B:
1049 IID = Intrinsic::amdgcn_cooperative_atomic_store_32x4B;
1051 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_16x8B:
1052 IID = Intrinsic::amdgcn_cooperative_atomic_load_16x8B;
1054 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_16x8B:
1055 IID = Intrinsic::amdgcn_cooperative_atomic_store_16x8B;
1057 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_8x16B:
1058 IID = Intrinsic::amdgcn_cooperative_atomic_load_8x16B;
1060 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_8x16B:
1061 IID = Intrinsic::amdgcn_cooperative_atomic_store_8x16B;
1065 LLVMContext &Ctx =
CGM.getLLVMContext();
1068 const unsigned ScopeArg = E->
getNumArgs() - 1;
1069 for (
unsigned i = 0; i != ScopeArg; ++i)
1073 llvm::MDNode *MD = llvm::MDNode::get(Ctx, {llvm::MDString::get(Ctx, Arg)});
1074 Args.push_back(llvm::MetadataAsValue::get(Ctx, MD));
1077 llvm::Function *F =
CGM.getIntrinsic(IID, {Args[0]->getType()});
1078 return Builder.CreateCall(F, {Args});
1080 case AMDGPU::BI__builtin_amdgcn_av_load_b8:
1081 case AMDGPU::BI__builtin_amdgcn_av_load_b16:
1082 case AMDGPU::BI__builtin_amdgcn_av_load_b32:
1083 case AMDGPU::BI__builtin_amdgcn_av_load_b64:
1084 case AMDGPU::BI__builtin_amdgcn_av_load_b128:
1085 case AMDGPU::BI__builtin_amdgcn_av_store_b8:
1086 case AMDGPU::BI__builtin_amdgcn_av_store_b16:
1087 case AMDGPU::BI__builtin_amdgcn_av_store_b32:
1088 case AMDGPU::BI__builtin_amdgcn_av_store_b64:
1089 case AMDGPU::BI__builtin_amdgcn_av_store_b128: {
1091 switch (BuiltinID) {
1092 case AMDGPU::BI__builtin_amdgcn_av_load_b8:
1093 IID = Intrinsic::amdgcn_av_load_b8;
1095 case AMDGPU::BI__builtin_amdgcn_av_load_b16:
1096 IID = Intrinsic::amdgcn_av_load_b16;
1098 case AMDGPU::BI__builtin_amdgcn_av_load_b32:
1099 IID = Intrinsic::amdgcn_av_load_b32;
1101 case AMDGPU::BI__builtin_amdgcn_av_load_b64:
1102 IID = Intrinsic::amdgcn_av_load_b64;
1104 case AMDGPU::BI__builtin_amdgcn_av_load_b128:
1105 IID = Intrinsic::amdgcn_av_load_b128;
1107 case AMDGPU::BI__builtin_amdgcn_av_store_b8:
1108 IID = Intrinsic::amdgcn_av_store_b8;
1110 case AMDGPU::BI__builtin_amdgcn_av_store_b16:
1111 IID = Intrinsic::amdgcn_av_store_b16;
1113 case AMDGPU::BI__builtin_amdgcn_av_store_b32:
1114 IID = Intrinsic::amdgcn_av_store_b32;
1116 case AMDGPU::BI__builtin_amdgcn_av_store_b64:
1117 IID = Intrinsic::amdgcn_av_store_b64;
1119 case AMDGPU::BI__builtin_amdgcn_av_store_b128:
1120 IID = Intrinsic::amdgcn_av_store_b128;
1127 const unsigned ScopeIdx = E->
getNumArgs() - 1;
1130 Args.push_back(
emitScopeMD(*
this, ScopeExpr->getZExtValue()));
1131 llvm::Function *F =
CGM.getIntrinsic(IID, {Args[0]->getType()});
1132 return Builder.CreateCall(F, Args);
1134 case AMDGPU::BI__builtin_amdgcn_get_fpenv: {
1135 Function *F =
CGM.getIntrinsic(Intrinsic::get_fpenv,
1139 case AMDGPU::BI__builtin_amdgcn_set_fpenv: {
1140 Function *F =
CGM.getIntrinsic(Intrinsic::set_fpenv,
1143 return Builder.CreateCall(F, {Env});
1145 case AMDGPU::BI__builtin_amdgcn_processor_is: {
1146 assert(
CGM.getTriple().isSPIRV() &&
1147 "__builtin_amdgcn_processor_is should never reach CodeGen for "
1148 "concrete targets!");
1152 case AMDGPU::BI__builtin_amdgcn_is_invocable: {
1153 assert(
CGM.getTriple().isSPIRV() &&
1154 "__builtin_amdgcn_is_invocable should never reach CodeGen for "
1155 "concrete targets!");
1162 case AMDGPU::BI__builtin_amdgcn_read_exec:
1164 case AMDGPU::BI__builtin_amdgcn_read_exec_lo:
1166 case AMDGPU::BI__builtin_amdgcn_read_exec_hi:
1168 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray:
1169 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_h:
1170 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_l:
1171 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_lh: {
1181 RayOrigin =
Builder.CreateShuffleVector(RayOrigin, RayOrigin,
1184 Builder.CreateShuffleVector(RayDir, RayDir, {0, 1, 2});
1185 RayInverseDir =
Builder.CreateShuffleVector(RayInverseDir, RayInverseDir,
1188 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_image_bvh_intersect_ray,
1189 {NodePtr->getType(), RayDir->getType()});
1190 return Builder.CreateCall(F, {NodePtr, RayExtent, RayOrigin, RayDir,
1191 RayInverseDir, TextureDescr});
1193 case AMDGPU::BI__builtin_amdgcn_image_bvh8_intersect_ray:
1194 case AMDGPU::BI__builtin_amdgcn_image_bvh_dual_intersect_ray: {
1196 switch (BuiltinID) {
1197 case AMDGPU::BI__builtin_amdgcn_image_bvh8_intersect_ray:
1198 IID = Intrinsic::amdgcn_image_bvh8_intersect_ray;
1200 case AMDGPU::BI__builtin_amdgcn_image_bvh_dual_intersect_ray:
1201 IID = Intrinsic::amdgcn_image_bvh_dual_intersect_ray;
1215 llvm::Function *IntrinsicFunc =
CGM.getIntrinsic(IID);
1217 llvm::CallInst *CI =
Builder.CreateCall(
1218 IntrinsicFunc, {NodePtr, RayExtent, InstanceMask, RayOrigin, RayDir,
1219 Offset, TextureDescr});
1221 llvm::Value *RetVData =
Builder.CreateExtractValue(CI, 0);
1222 llvm::Value *RetRayOrigin =
Builder.CreateExtractValue(CI, 1);
1223 llvm::Value *RetRayDir =
Builder.CreateExtractValue(CI, 2);
1225 Builder.CreateStore(RetRayOrigin, RetRayOriginPtr);
1226 Builder.CreateStore(RetRayDir, RetRayDirPtr);
1231 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_rtn:
1232 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push4_pop1_rtn:
1233 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop1_rtn:
1234 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop2_rtn: {
1236 switch (BuiltinID) {
1237 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_rtn:
1238 IID = Intrinsic::amdgcn_ds_bvh_stack_rtn;
1240 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push4_pop1_rtn:
1241 IID = Intrinsic::amdgcn_ds_bvh_stack_push4_pop1_rtn;
1243 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop1_rtn:
1244 IID = Intrinsic::amdgcn_ds_bvh_stack_push8_pop1_rtn;
1246 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop2_rtn:
1247 IID = Intrinsic::amdgcn_ds_bvh_stack_push8_pop2_rtn;
1252 for (
int i = 0, e = E->
getNumArgs(); i != e; ++i)
1260 Value *I0 =
Builder.CreateInsertElement(PoisonValue::get(RetTy), Rtn,
1264 if (A->
getType()->getPrimitiveSizeInBits() <
1265 RetTy->getScalarType()->getPrimitiveSizeInBits())
1266 A =
Builder.CreateZExt(A, RetTy->getScalarType());
1268 return Builder.CreateInsertElement(I0, A, 1);
1270 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f32_i32:
1271 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f16_i32:
1273 *
this, E, Intrinsic::amdgcn_image_load_1d,
false);
1274 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f32_i32:
1275 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f16_i32:
1277 *
this, E, Intrinsic::amdgcn_image_load_1darray,
false);
1278 case AMDGPU::BI__builtin_amdgcn_image_load_2d_f32_i32:
1279 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f32_i32:
1280 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f16_i32:
1282 *
this, E, Intrinsic::amdgcn_image_load_2d,
false);
1283 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_f32_i32:
1284 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f32_i32:
1285 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f16_i32:
1287 *
this, E, Intrinsic::amdgcn_image_load_2darray,
false);
1288 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f32_i32:
1289 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f16_i32:
1291 *
this, E, Intrinsic::amdgcn_image_load_3d,
false);
1292 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f32_i32:
1293 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f16_i32:
1295 *
this, E, Intrinsic::amdgcn_image_load_cube,
false);
1296 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f32_i32:
1297 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f16_i32:
1299 *
this, E, Intrinsic::amdgcn_image_load_mip_1d,
false);
1300 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f32_i32:
1301 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f16_i32:
1303 *
this, E, Intrinsic::amdgcn_image_load_mip_1darray,
false);
1304 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_f32_i32:
1305 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f32_i32:
1306 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f16_i32:
1308 *
this, E, Intrinsic::amdgcn_image_load_mip_2d,
false);
1309 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_f32_i32:
1310 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f32_i32:
1311 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f16_i32:
1313 *
this, E, Intrinsic::amdgcn_image_load_mip_2darray,
false);
1314 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f32_i32:
1315 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f16_i32:
1317 *
this, E, Intrinsic::amdgcn_image_load_mip_3d,
false);
1318 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f32_i32:
1319 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f16_i32:
1321 *
this, E, Intrinsic::amdgcn_image_load_mip_cube,
false);
1322 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f32_i32:
1323 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f16_i32:
1325 *
this, E, Intrinsic::amdgcn_image_store_1d,
true);
1326 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f32_i32:
1327 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f16_i32:
1329 *
this, E, Intrinsic::amdgcn_image_store_1darray,
true);
1330 case AMDGPU::BI__builtin_amdgcn_image_store_2d_f32_i32:
1331 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f32_i32:
1332 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f16_i32:
1334 *
this, E, Intrinsic::amdgcn_image_store_2d,
true);
1335 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_f32_i32:
1336 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f32_i32:
1337 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f16_i32:
1339 *
this, E, Intrinsic::amdgcn_image_store_2darray,
true);
1340 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f32_i32:
1341 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f16_i32:
1343 *
this, E, Intrinsic::amdgcn_image_store_3d,
true);
1344 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f32_i32:
1345 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f16_i32:
1347 *
this, E, Intrinsic::amdgcn_image_store_cube,
true);
1348 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f32_i32:
1349 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f16_i32:
1351 *
this, E, Intrinsic::amdgcn_image_store_mip_1d,
true);
1352 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f32_i32:
1353 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f16_i32:
1355 *
this, E, Intrinsic::amdgcn_image_store_mip_1darray,
true);
1356 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_f32_i32:
1357 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f32_i32:
1358 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f16_i32:
1360 *
this, E, Intrinsic::amdgcn_image_store_mip_2d,
true);
1361 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_f32_i32:
1362 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f32_i32:
1363 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f16_i32:
1365 *
this, E, Intrinsic::amdgcn_image_store_mip_2darray,
true);
1366 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f32_i32:
1367 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f16_i32:
1369 *
this, E, Intrinsic::amdgcn_image_store_mip_3d,
true);
1370 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f32_i32:
1371 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f16_i32:
1373 *
this, E, Intrinsic::amdgcn_image_store_mip_cube,
true);
1374 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f32_f32:
1375 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f16_f32:
1377 *
this, E, Intrinsic::amdgcn_image_sample_1d,
false);
1378 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f32_f32:
1379 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f16_f32:
1381 *
this, E, Intrinsic::amdgcn_image_sample_1darray,
false);
1382 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_f32_f32:
1383 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f32_f32:
1384 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f16_f32:
1386 *
this, E, Intrinsic::amdgcn_image_sample_2d,
false);
1387 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_f32_f32:
1388 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f32_f32:
1389 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f16_f32:
1391 *
this, E, Intrinsic::amdgcn_image_sample_2darray,
false);
1392 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f32_f32:
1393 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f16_f32:
1395 *
this, E, Intrinsic::amdgcn_image_sample_3d,
false);
1396 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f32_f32:
1397 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f16_f32:
1399 *
this, E, Intrinsic::amdgcn_image_sample_cube,
false);
1400 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1d_v4f32_f32:
1401 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1d_v4f16_f32:
1403 *
this, E, Intrinsic::amdgcn_image_sample_lz_1d,
false);
1404 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1d_v4f32_f32:
1405 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1d_v4f16_f32:
1407 *
this, E, Intrinsic::amdgcn_image_sample_l_1d,
false);
1408 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1d_v4f32_f32:
1409 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1d_v4f16_f32:
1411 *
this, E, Intrinsic::amdgcn_image_sample_d_1d,
false);
1412 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_v4f32_f32:
1413 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_v4f16_f32:
1414 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_f32_f32:
1416 *
this, E, Intrinsic::amdgcn_image_sample_lz_2d,
false);
1417 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_v4f32_f32:
1418 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_v4f16_f32:
1419 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_f32_f32:
1421 *
this, E, Intrinsic::amdgcn_image_sample_l_2d,
false);
1422 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_v4f32_f32:
1423 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_v4f16_f32:
1424 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_f32_f32:
1426 *
this, E, Intrinsic::amdgcn_image_sample_d_2d,
false);
1427 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_3d_v4f32_f32:
1428 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_3d_v4f16_f32:
1430 *
this, E, Intrinsic::amdgcn_image_sample_lz_3d,
false);
1431 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_3d_v4f32_f32:
1432 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_3d_v4f16_f32:
1434 *
this, E, Intrinsic::amdgcn_image_sample_l_3d,
false);
1435 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_3d_v4f32_f32:
1436 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_3d_v4f16_f32:
1438 *
this, E, Intrinsic::amdgcn_image_sample_d_3d,
false);
1439 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_cube_v4f32_f32:
1440 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_cube_v4f16_f32:
1442 *
this, E, Intrinsic::amdgcn_image_sample_lz_cube,
false);
1443 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_cube_v4f32_f32:
1444 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_cube_v4f16_f32:
1446 *
this, E, Intrinsic::amdgcn_image_sample_l_cube,
false);
1447 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1darray_v4f32_f32:
1448 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1darray_v4f16_f32:
1450 *
this, E, Intrinsic::amdgcn_image_sample_lz_1darray,
false);
1451 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1darray_v4f32_f32:
1452 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1darray_v4f16_f32:
1454 *
this, E, Intrinsic::amdgcn_image_sample_l_1darray,
false);
1455 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1darray_v4f32_f32:
1456 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1darray_v4f16_f32:
1458 *
this, E, Intrinsic::amdgcn_image_sample_d_1darray,
false);
1459 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_v4f32_f32:
1460 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_v4f16_f32:
1461 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_f32_f32:
1463 *
this, E, Intrinsic::amdgcn_image_sample_lz_2darray,
false);
1464 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_v4f32_f32:
1465 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_v4f16_f32:
1466 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_f32_f32:
1468 *
this, E, Intrinsic::amdgcn_image_sample_l_2darray,
false);
1469 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_v4f32_f32:
1470 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_v4f16_f32:
1471 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_f32_f32:
1473 *
this, E, Intrinsic::amdgcn_image_sample_d_2darray,
false);
1474 case clang::AMDGPU::BI__builtin_amdgcn_image_gather4_lz_2d_v4f32_f32:
1475 case clang::AMDGPU::BI__builtin_amdgcn_image_gather4_lz_2d_v4f16_f32:
1477 *
this, E, Intrinsic::amdgcn_image_gather4_lz_2d,
false);
1478 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_16x16x128_f8f6f4:
1479 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_32x32x64_f8f6f4: {
1480 llvm::FixedVectorType *VT = FixedVectorType::get(
Builder.getInt32Ty(), 8);
1482 BuiltinID == AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_32x32x64_f8f6f4
1483 ? Intrinsic::amdgcn_mfma_scale_f32_32x32x64_f8f6f4
1484 : Intrinsic::amdgcn_mfma_scale_f32_16x16x128_f8f6f4,
1488 for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++I)
1490 return Builder.CreateCall(F, Args);
1492 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32:
1493 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w32:
1494 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64:
1495 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w64:
1496 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32:
1497 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w32:
1498 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64:
1499 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w64:
1500 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32:
1501 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64:
1502 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32:
1503 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64:
1504 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32:
1505 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64:
1506 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32:
1507 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64:
1508 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32_gfx12:
1509 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64_gfx12:
1510 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32_gfx12:
1511 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64_gfx12:
1512 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32_gfx12:
1513 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64_gfx12:
1514 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32_gfx12:
1515 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64_gfx12:
1516 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32_gfx12:
1517 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64_gfx12:
1518 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32_gfx12:
1519 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64_gfx12:
1520 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w32_gfx12:
1521 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w64_gfx12:
1522 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w32_gfx12:
1523 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w64_gfx12:
1524 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w32_gfx12:
1525 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w64_gfx12:
1526 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w32_gfx12:
1527 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w64_gfx12:
1528 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w32_gfx12:
1529 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w64_gfx12:
1530 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w32:
1531 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w64:
1532 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w32:
1533 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w64:
1534 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w32:
1535 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w64:
1536 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w32:
1537 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w64:
1538 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w32:
1539 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w64:
1540 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w32:
1541 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w64:
1542 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w32:
1543 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w64:
1544 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w32:
1545 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w64:
1546 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w32:
1547 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w64:
1548 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w32:
1549 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w64:
1550 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w32:
1551 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w64:
1553 case AMDGPU::BI__builtin_amdgcn_wmma_f64_16x16x4_f64:
1554 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x4_f32:
1555 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_bf16:
1556 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_f16:
1557 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x32_f16:
1558 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x32_bf16:
1559 case AMDGPU::BI__builtin_amdgcn_wmma_bf16f32_16x16x32_bf16:
1560 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_fp8:
1561 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_bf8:
1562 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_fp8:
1563 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_bf8:
1564 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_fp8:
1565 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_bf8:
1566 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_fp8:
1567 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_bf8:
1568 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_fp8:
1569 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_bf8:
1570 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_fp8:
1571 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_bf8:
1572 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_fp8:
1573 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_bf8:
1574 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_fp8:
1575 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_bf8:
1576 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8:
1577 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_f8f6f4:
1578 case AMDGPU::BI__builtin_amdgcn_wmma_f32_32x16x128_f4:
1579 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_16x16x128_f8f6f4:
1580 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4:
1581 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_32x16x128_f4:
1582 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_32x16x128_f4:
1583 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_f16:
1584 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_bf16:
1585 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x64_f16:
1586 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x64_bf16:
1587 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16f32_16x16x64_bf16:
1588 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_fp8:
1589 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_bf8:
1590 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_fp8:
1591 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_bf8:
1592 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_fp8:
1593 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_bf8:
1594 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_fp8:
1595 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_bf8:
1596 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8: {
1609 bool AppendFalseForOpselArg =
false;
1610 unsigned BuiltinWMMAOp;
1612 bool NeedReturnType =
false;
1614 bool RemoveABNeg =
false;
1616 switch (BuiltinID) {
1617 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32:
1618 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64:
1619 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32_gfx12:
1620 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64_gfx12:
1621 ArgsForMatchingMatrixTypes = {2, 0};
1622 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_f16;
1624 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32:
1625 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64:
1626 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32_gfx12:
1627 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64_gfx12:
1628 ArgsForMatchingMatrixTypes = {2, 0};
1629 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_bf16;
1631 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32_gfx12:
1632 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64_gfx12:
1633 AppendFalseForOpselArg =
true;
1635 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32:
1636 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64:
1637 ArgsForMatchingMatrixTypes = {2, 0};
1638 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x16_f16;
1640 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32_gfx12:
1641 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64_gfx12:
1642 AppendFalseForOpselArg =
true;
1644 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32:
1645 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64:
1646 ArgsForMatchingMatrixTypes = {2, 0};
1647 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16_16x16x16_bf16;
1649 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w32:
1650 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w64:
1651 ArgsForMatchingMatrixTypes = {2, 0};
1652 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x16_f16_tied;
1654 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w32:
1655 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w64:
1656 ArgsForMatchingMatrixTypes = {2, 0};
1657 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16_16x16x16_bf16_tied;
1659 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32:
1660 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64:
1661 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32_gfx12:
1662 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64_gfx12:
1663 ArgsForMatchingMatrixTypes = {4, 1};
1664 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x16_iu8;
1666 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32:
1667 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64:
1668 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32_gfx12:
1669 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64_gfx12:
1670 ArgsForMatchingMatrixTypes = {4, 1};
1671 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x16_iu4;
1673 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w32_gfx12:
1674 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w64_gfx12:
1675 ArgsForMatchingMatrixTypes = {2, 0};
1676 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_fp8_fp8;
1678 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w32_gfx12:
1679 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w64_gfx12:
1680 ArgsForMatchingMatrixTypes = {2, 0};
1681 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_fp8_bf8;
1683 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w32_gfx12:
1684 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w64_gfx12:
1685 ArgsForMatchingMatrixTypes = {2, 0};
1686 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_bf8_fp8;
1688 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w32_gfx12:
1689 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w64_gfx12:
1690 ArgsForMatchingMatrixTypes = {2, 0};
1691 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_bf8_bf8;
1693 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w32_gfx12:
1694 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w64_gfx12:
1695 ArgsForMatchingMatrixTypes = {4, 1};
1696 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x32_iu4;
1698 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w32:
1699 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w64:
1700 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1701 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_f16;
1703 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w32:
1704 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w64:
1705 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1706 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_bf16;
1708 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w32:
1709 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w64:
1710 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1711 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x32_f16;
1713 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w32:
1714 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w64:
1715 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1716 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_bf16_16x16x32_bf16;
1718 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w32:
1719 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w64:
1720 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1721 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x32_iu8;
1723 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w32:
1724 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w64:
1725 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1726 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x32_iu4;
1728 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w32:
1729 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w64:
1730 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1731 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x64_iu4;
1733 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w32:
1734 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w64:
1735 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1736 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_fp8_fp8;
1738 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w32:
1739 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w64:
1740 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1741 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_fp8_bf8;
1743 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w32:
1744 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w64:
1745 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1746 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_bf8_fp8;
1748 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w32:
1749 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w64:
1750 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1751 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_bf8_bf8;
1754 case AMDGPU::BI__builtin_amdgcn_wmma_f64_16x16x4_f64:
1755 ArgsForMatchingMatrixTypes = {5, 1};
1756 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f64_16x16x4_f64;
1758 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x4_f32:
1759 ArgsForMatchingMatrixTypes = {3, 0};
1760 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x4_f32;
1763 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_bf16:
1764 ArgsForMatchingMatrixTypes = {3, 0};
1765 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x32_bf16;
1768 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_f16:
1769 ArgsForMatchingMatrixTypes = {3, 0};
1770 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x32_f16;
1773 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x32_f16:
1774 ArgsForMatchingMatrixTypes = {3, 0};
1775 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x32_f16;
1778 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x32_bf16:
1779 ArgsForMatchingMatrixTypes = {3, 0};
1780 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16_16x16x32_bf16;
1783 case AMDGPU::BI__builtin_amdgcn_wmma_bf16f32_16x16x32_bf16:
1784 NeedReturnType =
true;
1785 ArgsForMatchingMatrixTypes = {0, 3};
1786 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16f32_16x16x32_bf16;
1789 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_fp8:
1790 ArgsForMatchingMatrixTypes = {3, 0};
1791 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_fp8_fp8;
1793 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_bf8:
1794 ArgsForMatchingMatrixTypes = {3, 0};
1795 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_fp8_bf8;
1797 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_fp8:
1798 ArgsForMatchingMatrixTypes = {3, 0};
1799 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_bf8_fp8;
1801 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_bf8:
1802 ArgsForMatchingMatrixTypes = {3, 0};
1803 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_bf8_bf8;
1805 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_fp8:
1806 ArgsForMatchingMatrixTypes = {3, 0};
1807 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_fp8_fp8;
1809 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_bf8:
1810 ArgsForMatchingMatrixTypes = {3, 0};
1811 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_fp8_bf8;
1813 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_fp8:
1814 ArgsForMatchingMatrixTypes = {3, 0};
1815 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_bf8_fp8;
1817 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_bf8:
1818 ArgsForMatchingMatrixTypes = {3, 0};
1819 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_bf8_bf8;
1821 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_fp8:
1822 ArgsForMatchingMatrixTypes = {3, 0};
1823 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_fp8_fp8;
1825 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_bf8:
1826 ArgsForMatchingMatrixTypes = {3, 0};
1827 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_fp8_bf8;
1829 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_fp8:
1830 ArgsForMatchingMatrixTypes = {3, 0};
1831 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_bf8_fp8;
1833 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_bf8:
1834 ArgsForMatchingMatrixTypes = {3, 0};
1835 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_bf8_bf8;
1837 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_fp8:
1838 ArgsForMatchingMatrixTypes = {3, 0};
1839 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_fp8_fp8;
1841 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_bf8:
1842 ArgsForMatchingMatrixTypes = {3, 0};
1843 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_fp8_bf8;
1845 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_fp8:
1846 ArgsForMatchingMatrixTypes = {3, 0};
1847 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_bf8_fp8;
1849 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_bf8:
1850 ArgsForMatchingMatrixTypes = {3, 0};
1851 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_bf8_bf8;
1853 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8:
1854 ArgsForMatchingMatrixTypes = {4, 1};
1855 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x64_iu8;
1857 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_f8f6f4:
1858 ArgsForMatchingMatrixTypes = {5, 1, 3};
1859 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_f8f6f4;
1861 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_16x16x128_f8f6f4:
1862 ArgsForMatchingMatrixTypes = {5, 1, 3};
1863 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale_f32_16x16x128_f8f6f4;
1865 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4:
1866 ArgsForMatchingMatrixTypes = {5, 1, 3};
1867 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale16_f32_16x16x128_f8f6f4;
1869 case AMDGPU::BI__builtin_amdgcn_wmma_f32_32x16x128_f4:
1870 ArgsForMatchingMatrixTypes = {3, 0, 1};
1871 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_32x16x128_f4;
1873 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_32x16x128_f4:
1874 ArgsForMatchingMatrixTypes = {3, 0, 1};
1875 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale_f32_32x16x128_f4;
1877 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_32x16x128_f4:
1878 ArgsForMatchingMatrixTypes = {3, 0, 1};
1879 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale16_f32_32x16x128_f4;
1881 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_f16:
1882 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1883 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x64_f16;
1885 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_bf16:
1886 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1887 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x64_bf16;
1889 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x64_f16:
1890 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1891 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x64_f16;
1893 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x64_bf16:
1894 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1895 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_bf16_16x16x64_bf16;
1897 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16f32_16x16x64_bf16:
1898 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1899 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_bf16f32_16x16x64_bf16;
1901 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_fp8:
1902 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1903 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_fp8_fp8;
1905 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_bf8:
1906 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1907 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_fp8_bf8;
1909 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_fp8:
1910 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1911 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_bf8_fp8;
1913 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_bf8:
1914 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1915 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_bf8_bf8;
1917 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_fp8:
1918 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1919 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_fp8_fp8;
1921 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_bf8:
1922 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1923 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_fp8_bf8;
1925 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_fp8:
1926 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1927 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_bf8_fp8;
1929 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_bf8:
1930 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1931 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_bf8_bf8;
1933 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8:
1934 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1935 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x128_iu8;
1940 for (
int i = 0, e = E->
getNumArgs(); i != e; ++i) {
1942 if (RemoveABNeg && (i == 0 || i == 2))
1946 if (AppendFalseForOpselArg)
1947 Args.push_back(
Builder.getFalse());
1950 if (BuiltinID == AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8) {
1951 if (Args.size() == 7)
1952 Args.push_back(
Builder.getFalse());
1953 assert(Args.size() == 8 &&
"Expected 8 arguments");
1954 Args[7] =
Builder.CreateZExtOrTrunc(Args[7],
Builder.getInt1Ty());
1955 }
else if (BuiltinID ==
1956 AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8) {
1957 if (Args.size() == 8)
1958 Args.push_back(
Builder.getFalse());
1959 assert(Args.size() == 9 &&
"Expected 9 arguments");
1960 Args[8] =
Builder.CreateZExtOrTrunc(Args[8],
Builder.getInt1Ty());
1966 for (
auto ArgIdx : ArgsForMatchingMatrixTypes)
1967 ArgTypes.push_back(Args[ArgIdx]->
getType());
1969 Function *F =
CGM.getIntrinsic(BuiltinWMMAOp, ArgTypes);
1970 return Builder.CreateCall(F, Args);
1973 case AMDGPU::BI__builtin_amdgcn_workgroup_size_x:
1974 return EmitAMDGPUWorkGroupSize(*
this, 0);
1975 case AMDGPU::BI__builtin_amdgcn_workgroup_size_y:
1976 return EmitAMDGPUWorkGroupSize(*
this, 1);
1977 case AMDGPU::BI__builtin_amdgcn_workgroup_size_z:
1978 return EmitAMDGPUWorkGroupSize(*
this, 2);
1981 case AMDGPU::BI__builtin_amdgcn_grid_size_x:
1982 return EmitAMDGPUGridSize(*
this, 0);
1983 case AMDGPU::BI__builtin_amdgcn_grid_size_y:
1984 return EmitAMDGPUGridSize(*
this, 1);
1985 case AMDGPU::BI__builtin_amdgcn_grid_size_z:
1986 return EmitAMDGPUGridSize(*
this, 2);
1989 case AMDGPU::BI__builtin_r600_recipsqrt_ieee:
1990 case AMDGPU::BI__builtin_r600_recipsqrt_ieeef:
1992 Intrinsic::r600_recipsqrt_ieee);
1993 case AMDGPU::BI__builtin_amdgcn_alignbit: {
1997 Function *F =
CGM.getIntrinsic(Intrinsic::fshr, Src0->getType());
1998 return Builder.CreateCall(F, { Src0, Src1, Src2 });
2000 case AMDGPU::BI__builtin_amdgcn_fence: {
2003 FenceInst *Fence =
Builder.CreateFence(AO, SSID);
2009 case AMDGPU::BI__builtin_amdgcn_atomic_inc32:
2010 case AMDGPU::BI__builtin_amdgcn_atomic_inc64:
2011 case AMDGPU::BI__builtin_amdgcn_atomic_dec32:
2012 case AMDGPU::BI__builtin_amdgcn_atomic_dec64:
2013 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f64:
2014 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f32:
2015 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2f16:
2016 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16:
2017 case AMDGPU::BI__builtin_amdgcn_ds_faddf:
2018 case AMDGPU::BI__builtin_amdgcn_ds_fminf:
2019 case AMDGPU::BI__builtin_amdgcn_ds_fmaxf:
2020 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f32:
2021 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f64:
2022 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2f16:
2023 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2f16:
2024 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f32:
2025 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f64:
2026 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16:
2027 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16:
2028 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmin_f64:
2029 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmax_f64:
2030 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmin_f64:
2031 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmax_f64: {
2032 llvm::AtomicRMWInst::BinOp BinOp;
2033 switch (BuiltinID) {
2034 case AMDGPU::BI__builtin_amdgcn_atomic_inc32:
2035 case AMDGPU::BI__builtin_amdgcn_atomic_inc64:
2036 BinOp = llvm::AtomicRMWInst::UIncWrap;
2038 case AMDGPU::BI__builtin_amdgcn_atomic_dec32:
2039 case AMDGPU::BI__builtin_amdgcn_atomic_dec64:
2040 BinOp = llvm::AtomicRMWInst::UDecWrap;
2042 case AMDGPU::BI__builtin_amdgcn_ds_faddf:
2043 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f64:
2044 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f32:
2045 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2f16:
2046 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16:
2047 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f32:
2048 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f64:
2049 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2f16:
2050 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2f16:
2051 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f32:
2052 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f64:
2053 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16:
2054 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16:
2055 BinOp = llvm::AtomicRMWInst::FAdd;
2057 case AMDGPU::BI__builtin_amdgcn_ds_fminf:
2058 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmin_f64:
2059 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmin_f64:
2060 BinOp = llvm::AtomicRMWInst::FMin;
2062 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmax_f64:
2063 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmax_f64:
2064 case AMDGPU::BI__builtin_amdgcn_ds_fmaxf:
2065 BinOp = llvm::AtomicRMWInst::FMax;
2071 llvm::Type *OrigTy = Val->
getType();
2076 if (BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_faddf ||
2077 BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_fminf ||
2078 BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_fmaxf) {
2100 getLLVMContext().getOrInsertSyncScopeID(*llvm::getAtomicScopeIRString(
2102 AO = AtomicOrdering::Monotonic;
2105 if (BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16 ||
2106 BuiltinID == AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16 ||
2107 BuiltinID == AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16) {
2108 llvm::Type *V2BF16Ty = FixedVectorType::get(
2109 llvm::Type::getBFloatTy(
Builder.getContext()), 2);
2110 Val =
Builder.CreateBitCast(Val, V2BF16Ty);
2114 llvm::AtomicRMWInst *RMW =
2115 Builder.CreateAtomicRMW(BinOp, Ptr, Val, AO, SSID);
2117 RMW->setVolatile(
true);
2120 unsigned AddrSpace = Ptr.getType()->getAddressSpace();
2121 if (AddrSpace != llvm::AMDGPUAS::LOCAL_ADDRESS) {
2125 RMW->setMetadata(
"amdgpu.no.fine.grained.memory", EmptyMD);
2132 return Builder.CreateBitCast(RMW, OrigTy);
2134 case AMDGPU::BI__builtin_amdgcn_s_sendmsg_rtn:
2135 case AMDGPU::BI__builtin_amdgcn_s_sendmsg_rtnl: {
2140 CGM.getIntrinsic(Intrinsic::amdgcn_s_sendmsg_rtn, {ResultType});
2141 return Builder.CreateCall(F, {Arg});
2143 case AMDGPU::BI__builtin_amdgcn_permlane16_swap:
2144 case AMDGPU::BI__builtin_amdgcn_permlane32_swap: {
2152 CGM.getIntrinsic(BuiltinID == AMDGPU::BI__builtin_amdgcn_permlane16_swap
2153 ? Intrinsic::amdgcn_permlane16_swap
2154 : Intrinsic::amdgcn_permlane32_swap);
2155 llvm::CallInst *
Call =
2156 Builder.CreateCall(F, {VDstOld, VSrcOld, FI, BoundCtrl});
2158 llvm::Value *Elt0 =
Builder.CreateExtractValue(
Call, 0);
2159 llvm::Value *Elt1 =
Builder.CreateExtractValue(
Call, 1);
2163 llvm::Value *Insert0 =
Builder.CreateInsertElement(
2164 llvm::PoisonValue::get(ResultType), Elt0, UINT64_C(0));
2165 llvm::Value *AsVector =
2166 Builder.CreateInsertElement(Insert0, Elt1, UINT64_C(1));
2169 case AMDGPU::BI__builtin_amdgcn_bitop3_b32:
2170 case AMDGPU::BI__builtin_amdgcn_bitop3_b16:
2172 Intrinsic::amdgcn_bitop3);
2173 case AMDGPU::BI__builtin_amdgcn_make_buffer_rsrc: {
2178 for (
unsigned I = 0; I < 4; ++I)
2180 llvm::PointerType *RetTy = llvm::PointerType::get(
2181 Builder.getContext(), llvm::AMDGPUAS::BUFFER_RESOURCE);
2183 CGM.getIntrinsic(Intrinsic::amdgcn_make_buffer_rsrc,
2184 {RetTy, Args[0]->getType(), Args[2]->getType()});
2185 return Builder.CreateCall(F, Args);
2187 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b8:
2188 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b16:
2189 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b32:
2190 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b64:
2191 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b96:
2192 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b128:
2194 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_store);
2195 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_format_v4f32:
2196 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_format_v4f16:
2198 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_store_format);
2199 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b8:
2200 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b16:
2201 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b32:
2202 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b64:
2203 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b96:
2204 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b128: {
2205 llvm::Type *RetTy =
nullptr;
2206 switch (BuiltinID) {
2207 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b8:
2210 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b16:
2213 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b32:
2216 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b64:
2217 RetTy = llvm::FixedVectorType::get(
Int32Ty, 2);
2219 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b96:
2220 RetTy = llvm::FixedVectorType::get(
Int32Ty, 3);
2222 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b128:
2223 RetTy = llvm::FixedVectorType::get(
Int32Ty, 4);
2227 CGM.getIntrinsic(Intrinsic::amdgcn_raw_ptr_buffer_load, RetTy);
2232 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_format_v4f32:
2233 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_format_v4f16: {
2236 CGM.getIntrinsic(Intrinsic::amdgcn_raw_ptr_buffer_load_format, {RetTy});
2242 case AMDGPU::BI__builtin_amdgcn_struct_buffer_store_format_v4f32:
2243 case AMDGPU::BI__builtin_amdgcn_struct_buffer_store_format_v4f16:
2245 *
this, E, Intrinsic::amdgcn_struct_ptr_buffer_store_format);
2246 case AMDGPU::BI__builtin_amdgcn_struct_buffer_load_format_v4f32:
2247 case AMDGPU::BI__builtin_amdgcn_struct_buffer_load_format_v4f16: {
2250 Intrinsic::amdgcn_struct_ptr_buffer_load_format, {RetTy});
2257 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_add_i32:
2259 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_add);
2260 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_f32:
2261 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_f64:
2262 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_v2f16:
2264 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_fadd);
2265 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmin_f32:
2266 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmin_f64:
2268 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_fmin);
2269 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmax_f32:
2270 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmax_f64:
2272 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_fmax);
2273 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_i32:
2274 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v2i32:
2275 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v3i32:
2276 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v4i32:
2277 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v8i32:
2278 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v16i32:
2279 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_f32:
2280 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v2f32:
2281 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v3f32:
2282 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v4f32:
2283 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v8f32:
2284 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v16f32:
2285 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_i8:
2286 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_u8:
2287 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_i16:
2288 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_u16:
2289 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v2i8:
2290 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v3i8:
2291 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v4i8:
2292 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_f16:
2293 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v2f16:
2294 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v3f16:
2295 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v4f16:
2296 return emitAMDGPUSBufferLoadBuiltin(*
this, E);
2297 case AMDGPU::BI__builtin_amdgcn_s_prefetch_data:
2299 *
this, E, Intrinsic::amdgcn_s_prefetch_data);
2300 case AMDGPU::BI__builtin_amdgcn_s_prefetch_inst:
2302 *
this, E, Intrinsic::amdgcn_s_prefetch_inst);
2303 case Builtin::BIlogbf:
2304 case Builtin::BI__builtin_logbf: {
2308 CallInst *FrExp =
Builder.CreateCall(FrExpFunc, Src0);
2311 Exp, ConstantInt::getSigned(Exp->
getType(), -1),
"",
false,
true);
2316 Fabs, ConstantFP::getInfinity(
Builder.getFloatTy()));
2317 Value *Sel1 =
Builder.CreateSelect(FCmpONE, SIToFP, Fabs);
2319 Builder.CreateFCmpOEQ(Src0, ConstantFP::getZero(
Builder.getFloatTy()));
2322 ConstantFP::getInfinity(
Builder.getFloatTy(),
true), Sel1);
2325 case Builtin::BIlogb:
2326 case Builtin::BI__builtin_logb: {
2330 CallInst *FrExp =
Builder.CreateCall(FrExpFunc, Src0);
2333 Exp, ConstantInt::getSigned(Exp->
getType(), -1),
"",
false,
true);
2338 Fabs, ConstantFP::getInfinity(
Builder.getDoubleTy()));
2339 Value *Sel1 =
Builder.CreateSelect(FCmpONE, SIToFP, Fabs);
2341 Builder.CreateFCmpOEQ(Src0, ConstantFP::getZero(
Builder.getDoubleTy()));
2344 ConstantFP::getInfinity(
Builder.getDoubleTy(),
true),
2348 case Builtin::BIscalbnf:
2349 case Builtin::BI__builtin_scalbnf:
2350 case Builtin::BIscalbn:
2351 case Builtin::BI__builtin_scalbn:
2353 *
this, E, Intrinsic::ldexp, Intrinsic::experimental_constrained_ldexp);
2354 case AMDGPU::BI__builtin_amdgcn_permlane_bcast:
2356 *
this, E, Intrinsic::amdgcn_permlane_bcast);
2357 case AMDGPU::BI__builtin_amdgcn_permlane_up:
2359 Intrinsic::amdgcn_permlane_up);
2360 case AMDGPU::BI__builtin_amdgcn_permlane_down:
2362 Intrinsic::amdgcn_permlane_down);
2363 case AMDGPU::BI__builtin_amdgcn_permlane_xor:
2365 Intrinsic::amdgcn_permlane_xor);