561 llvm::AtomicOrdering AO = llvm::AtomicOrdering::SequentiallyConsistent;
562 llvm::SyncScope::ID SSID;
564 case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u32:
565 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fadd_f32:
566 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fadd_f64:
567 case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u32:
568 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fsub_f32:
569 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fsub_f64:
570 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i32:
571 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u32:
572 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmin_f32:
573 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmin_f64:
574 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i32:
575 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u32:
576 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmax_f32:
577 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmax_f64:
578 case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b32:
579 case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b32:
580 case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b32:
581 case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u64:
582 case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u64:
583 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i64:
584 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u64:
585 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i64:
586 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u64:
587 case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b64:
588 case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b64:
589 case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b64: {
596 case AMDGPU::BI__builtin_amdgcn_div_scale:
597 case AMDGPU::BI__builtin_amdgcn_div_scalef: {
607 llvm::Function *Callee =
CGM.getIntrinsic(Intrinsic::amdgcn_div_scale,
610 llvm::Value *Tmp =
Builder.CreateCall(Callee, {
X, Y, Z});
613 llvm::Value *Flag =
Builder.CreateExtractValue(Tmp, 1);
617 llvm::Value *FlagExt =
Builder.CreateZExt(Flag, RealFlagType);
618 Builder.CreateStore(FlagExt, FlagOutPtr);
621 case AMDGPU::BI__builtin_amdgcn_div_fmas:
622 case AMDGPU::BI__builtin_amdgcn_div_fmasf: {
628 llvm::Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_div_fmas,
630 llvm::Value *Src3ToBool =
Builder.CreateIsNotNull(Src3);
631 return Builder.CreateCall(F, {Src0, Src1, Src2, Src3ToBool});
634 case AMDGPU::BI__builtin_amdgcn_mov_dpp8:
635 case AMDGPU::BI__builtin_amdgcn_mov_dpp:
636 case AMDGPU::BI__builtin_amdgcn_update_dpp: {
640 unsigned ICEArguments = 0;
645 unsigned Size = DataTy->getPrimitiveSizeInBits();
647 llvm::IntegerType::get(
Builder.getContext(), std::max(Size, 32u));
649 CGM.getIntrinsic(BuiltinID == AMDGPU::BI__builtin_amdgcn_mov_dpp8
650 ? Intrinsic::amdgcn_mov_dpp8
651 : Intrinsic::amdgcn_update_dpp,
655 bool InsertOld = BuiltinID == AMDGPU::BI__builtin_amdgcn_mov_dpp;
657 Args.push_back(llvm::PoisonValue::get(
IntTy));
658 for (
unsigned I = 0; I != E->
getNumArgs(); ++I) {
660 if (I < (BuiltinID == AMDGPU::BI__builtin_amdgcn_update_dpp ? 2u : 1u) &&
662 if (!DataTy->isIntegerTy())
664 V, llvm::IntegerType::get(
Builder.getContext(), Size));
668 F->getFunctionType()->getFunctionParamType(I + InsertOld);
669 Args.push_back(
Builder.CreateTruncOrBitCast(
V, ExpTy));
672 if (Size < 32 && !DataTy->isIntegerTy())
674 V, llvm::IntegerType::get(
Builder.getContext(), Size));
675 return Builder.CreateTruncOrBitCast(
V, DataTy);
677 case AMDGPU::BI__builtin_amdgcn_permlane16:
678 case AMDGPU::BI__builtin_amdgcn_permlanex16:
681 BuiltinID == AMDGPU::BI__builtin_amdgcn_permlane16
682 ? Intrinsic::amdgcn_permlane16
683 : Intrinsic::amdgcn_permlanex16);
684 case AMDGPU::BI__builtin_amdgcn_permlane64:
686 Intrinsic::amdgcn_permlane64);
687 case AMDGPU::BI__builtin_amdgcn_readlane:
689 Intrinsic::amdgcn_readlane);
690 case AMDGPU::BI__builtin_amdgcn_wave_shuffle:
692 Intrinsic::amdgcn_wave_shuffle);
693 case AMDGPU::BI__builtin_amdgcn_readfirstlane:
695 Intrinsic::amdgcn_readfirstlane);
696 case AMDGPU::BI__builtin_amdgcn_div_fixup:
697 case AMDGPU::BI__builtin_amdgcn_div_fixupf:
698 case AMDGPU::BI__builtin_amdgcn_div_fixuph:
700 Intrinsic::amdgcn_div_fixup);
701 case AMDGPU::BI__builtin_amdgcn_trig_preop:
702 case AMDGPU::BI__builtin_amdgcn_trig_preopf:
704 case AMDGPU::BI__builtin_amdgcn_rcp:
705 case AMDGPU::BI__builtin_amdgcn_rcpf:
706 case AMDGPU::BI__builtin_amdgcn_rcph:
707 case AMDGPU::BI__builtin_amdgcn_rcp_bf16:
709 case AMDGPU::BI__builtin_amdgcn_sqrt:
710 case AMDGPU::BI__builtin_amdgcn_sqrtf:
711 case AMDGPU::BI__builtin_amdgcn_sqrth:
712 case AMDGPU::BI__builtin_amdgcn_sqrt_bf16:
714 Intrinsic::amdgcn_sqrt);
715 case AMDGPU::BI__builtin_amdgcn_rsq:
716 case AMDGPU::BI__builtin_amdgcn_rsqf:
717 case AMDGPU::BI__builtin_amdgcn_rsqh:
718 case AMDGPU::BI__builtin_amdgcn_rsq_bf16:
720 case AMDGPU::BI__builtin_amdgcn_rsq_clamp:
721 case AMDGPU::BI__builtin_amdgcn_rsq_clampf:
723 Intrinsic::amdgcn_rsq_clamp);
724 case AMDGPU::BI__builtin_amdgcn_sinf:
725 case AMDGPU::BI__builtin_amdgcn_sinh:
726 case AMDGPU::BI__builtin_amdgcn_sin_bf16:
728 case AMDGPU::BI__builtin_amdgcn_cosf:
729 case AMDGPU::BI__builtin_amdgcn_cosh:
730 case AMDGPU::BI__builtin_amdgcn_cos_bf16:
732 case AMDGPU::BI__builtin_amdgcn_dispatch_ptr:
733 return EmitAMDGPUDispatchPtr(*
this, E);
734 case AMDGPU::BI__builtin_amdgcn_logf:
735 case AMDGPU::BI__builtin_amdgcn_log_bf16:
737 case AMDGPU::BI__builtin_amdgcn_exp2f:
738 case AMDGPU::BI__builtin_amdgcn_exp2_bf16:
740 Intrinsic::amdgcn_exp2);
741 case AMDGPU::BI__builtin_amdgcn_log_clampf:
743 Intrinsic::amdgcn_log_clamp);
744 case AMDGPU::BI__builtin_amdgcn_ldexp:
745 case AMDGPU::BI__builtin_amdgcn_ldexpf: {
749 CGM.getIntrinsic(Intrinsic::ldexp, {Src0->getType(), Src1->getType()});
750 return Builder.CreateCall(F, {Src0, Src1});
752 case AMDGPU::BI__builtin_amdgcn_ldexph: {
758 CGM.getIntrinsic(Intrinsic::ldexp, {Src0->getType(),
Int16Ty});
761 case AMDGPU::BI__builtin_amdgcn_frexp_mant:
762 case AMDGPU::BI__builtin_amdgcn_frexp_mantf:
763 case AMDGPU::BI__builtin_amdgcn_frexp_manth:
765 Intrinsic::amdgcn_frexp_mant);
766 case AMDGPU::BI__builtin_amdgcn_frexp_exp:
767 case AMDGPU::BI__builtin_amdgcn_frexp_expf: {
769 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_frexp_exp,
771 return Builder.CreateCall(F, Src0);
773 case AMDGPU::BI__builtin_amdgcn_frexp_exph: {
775 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_frexp_exp,
777 return Builder.CreateCall(F, Src0);
779 case AMDGPU::BI__builtin_amdgcn_fract:
780 case AMDGPU::BI__builtin_amdgcn_fractf:
781 case AMDGPU::BI__builtin_amdgcn_fracth:
783 Intrinsic::amdgcn_fract);
784 case AMDGPU::BI__builtin_amdgcn_ubfe:
786 Intrinsic::amdgcn_ubfe);
787 case AMDGPU::BI__builtin_amdgcn_sbfe:
789 Intrinsic::amdgcn_sbfe);
790 case AMDGPU::BI__builtin_amdgcn_ballot_w32:
791 case AMDGPU::BI__builtin_amdgcn_ballot_w64: {
794 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_ballot, {ResultType});
795 return Builder.CreateCall(F, {Src});
797 case AMDGPU::BI__builtin_amdgcn_inverse_ballot_w32:
798 case AMDGPU::BI__builtin_amdgcn_inverse_ballot_w64: {
801 CGM.getIntrinsic(Intrinsic::amdgcn_inverse_ballot, {Src->getType()});
802 return Builder.CreateCall(F, {Src});
804 case AMDGPU::BI__builtin_amdgcn_tanhf:
805 case AMDGPU::BI__builtin_amdgcn_tanhh:
806 case AMDGPU::BI__builtin_amdgcn_tanh_bf16:
808 Intrinsic::amdgcn_tanh);
809 case AMDGPU::BI__builtin_amdgcn_uicmp:
810 case AMDGPU::BI__builtin_amdgcn_uicmpl:
811 case AMDGPU::BI__builtin_amdgcn_sicmp:
812 case AMDGPU::BI__builtin_amdgcn_sicmpl:
813 case AMDGPU::BI__builtin_amdgcn_fcmp:
814 case AMDGPU::BI__builtin_amdgcn_fcmpf: {
817 CmpInst::Predicate Pred =
static_cast<CmpInst::Predicate
>(
822 Intrinsic::amdgcn_ballot,
823 Builder.CreateCmp(Pred, LHS, RHS));
825 case AMDGPU::BI__builtin_amdgcn_class:
826 case AMDGPU::BI__builtin_amdgcn_classf:
827 case AMDGPU::BI__builtin_amdgcn_classh:
829 case AMDGPU::BI__builtin_amdgcn_fmed3f:
830 case AMDGPU::BI__builtin_amdgcn_fmed3h:
832 Intrinsic::amdgcn_fmed3);
833 case AMDGPU::BI__builtin_amdgcn_ds_append:
834 case AMDGPU::BI__builtin_amdgcn_ds_consume: {
835 Intrinsic::ID Intrin = BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_append ?
836 Intrinsic::amdgcn_ds_append : Intrinsic::amdgcn_ds_consume;
841 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_i32:
842 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_v2i32:
843 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4i16:
844 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4f16:
845 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4bf16:
846 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8i16:
847 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8f16:
848 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8bf16:
849 case AMDGPU::BI__builtin_amdgcn_global_load_tr4_b64_v2i32:
850 case AMDGPU::BI__builtin_amdgcn_global_load_tr8_b64_v2i32:
851 case AMDGPU::BI__builtin_amdgcn_global_load_tr6_b96_v3i32:
852 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8i16:
853 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8f16:
854 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8bf16:
855 case AMDGPU::BI__builtin_amdgcn_ds_load_tr4_b64_v2i32:
856 case AMDGPU::BI__builtin_amdgcn_ds_load_tr8_b64_v2i32:
857 case AMDGPU::BI__builtin_amdgcn_ds_load_tr6_b96_v3i32:
858 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8i16:
859 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8f16:
860 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8bf16:
861 case AMDGPU::BI__builtin_amdgcn_ds_read_tr4_b64_v2i32:
862 case AMDGPU::BI__builtin_amdgcn_ds_read_tr8_b64_v2i32:
863 case AMDGPU::BI__builtin_amdgcn_ds_read_tr6_b96_v3i32:
864 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4f16:
865 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4bf16:
866 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4i16: {
869 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_i32:
870 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_v2i32:
871 case AMDGPU::BI__builtin_amdgcn_global_load_tr8_b64_v2i32:
872 IID = Intrinsic::amdgcn_global_load_tr_b64;
874 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4i16:
875 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4f16:
876 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4bf16:
877 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8i16:
878 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8f16:
879 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8bf16:
880 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8i16:
881 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8f16:
882 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8bf16:
883 IID = Intrinsic::amdgcn_global_load_tr_b128;
885 case AMDGPU::BI__builtin_amdgcn_global_load_tr4_b64_v2i32:
886 IID = Intrinsic::amdgcn_global_load_tr4_b64;
888 case AMDGPU::BI__builtin_amdgcn_global_load_tr6_b96_v3i32:
889 IID = Intrinsic::amdgcn_global_load_tr6_b96;
891 case AMDGPU::BI__builtin_amdgcn_ds_load_tr4_b64_v2i32:
892 IID = Intrinsic::amdgcn_ds_load_tr4_b64;
894 case AMDGPU::BI__builtin_amdgcn_ds_load_tr6_b96_v3i32:
895 IID = Intrinsic::amdgcn_ds_load_tr6_b96;
897 case AMDGPU::BI__builtin_amdgcn_ds_load_tr8_b64_v2i32:
898 IID = Intrinsic::amdgcn_ds_load_tr8_b64;
900 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8i16:
901 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8f16:
902 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8bf16:
903 IID = Intrinsic::amdgcn_ds_load_tr16_b128;
905 case AMDGPU::BI__builtin_amdgcn_ds_read_tr4_b64_v2i32:
906 IID = Intrinsic::amdgcn_ds_read_tr4_b64;
908 case AMDGPU::BI__builtin_amdgcn_ds_read_tr8_b64_v2i32:
909 IID = Intrinsic::amdgcn_ds_read_tr8_b64;
911 case AMDGPU::BI__builtin_amdgcn_ds_read_tr6_b96_v3i32:
912 IID = Intrinsic::amdgcn_ds_read_tr6_b96;
914 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4i16:
915 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4f16:
916 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4bf16:
917 IID = Intrinsic::amdgcn_ds_read_tr16_b64;
922 llvm::Function *F =
CGM.getIntrinsic(IID, {LoadTy});
925 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b32:
926 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b64:
927 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b128:
928 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b32:
929 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b64:
930 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b128: {
934 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b32:
935 IID = Intrinsic::amdgcn_global_load_monitor_b32;
937 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b64:
938 IID = Intrinsic::amdgcn_global_load_monitor_b64;
940 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b128:
941 IID = Intrinsic::amdgcn_global_load_monitor_b128;
943 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b32:
944 IID = Intrinsic::amdgcn_flat_load_monitor_b32;
946 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b64:
947 IID = Intrinsic::amdgcn_flat_load_monitor_b64;
949 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b128:
950 IID = Intrinsic::amdgcn_flat_load_monitor_b128;
961 llvm::Value *ScopeMD =
emitScopeMD(*
this, ScopeExpr->getZExtValue(), AO);
962 llvm::Function *F =
CGM.getIntrinsic(IID, {LoadTy});
963 return Builder.CreateCall(F, {
Addr, AOExpr, ScopeMD});
965 case AMDGPU::BI__builtin_amdgcn_cluster_load_b32:
966 case AMDGPU::BI__builtin_amdgcn_cluster_load_b64:
967 case AMDGPU::BI__builtin_amdgcn_cluster_load_b128: {
970 case AMDGPU::BI__builtin_amdgcn_cluster_load_b32:
971 IID = Intrinsic::amdgcn_cluster_load_b32;
973 case AMDGPU::BI__builtin_amdgcn_cluster_load_b64:
974 IID = Intrinsic::amdgcn_cluster_load_b64;
976 case AMDGPU::BI__builtin_amdgcn_cluster_load_b128:
977 IID = Intrinsic::amdgcn_cluster_load_b128;
981 for (
int i = 0, e = E->
getNumArgs(); i != e; ++i)
984 return Builder.CreateCall(F, {Args});
986 case AMDGPU::BI__builtin_amdgcn_load_to_lds: {
989 Intrinsic::amdgcn_load_to_lds);
991 case AMDGPU::BI__builtin_amdgcn_load_async_to_lds: {
994 *
this, E, Intrinsic::amdgcn_load_async_to_lds);
996 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_32x4B:
997 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_32x4B:
998 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_16x8B:
999 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_16x8B:
1000 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_8x16B:
1001 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_8x16B: {
1003 switch (BuiltinID) {
1004 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_32x4B:
1005 IID = Intrinsic::amdgcn_cooperative_atomic_load_32x4B;
1007 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_32x4B:
1008 IID = Intrinsic::amdgcn_cooperative_atomic_store_32x4B;
1010 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_16x8B:
1011 IID = Intrinsic::amdgcn_cooperative_atomic_load_16x8B;
1013 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_16x8B:
1014 IID = Intrinsic::amdgcn_cooperative_atomic_store_16x8B;
1016 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_8x16B:
1017 IID = Intrinsic::amdgcn_cooperative_atomic_load_8x16B;
1019 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_8x16B:
1020 IID = Intrinsic::amdgcn_cooperative_atomic_store_8x16B;
1024 LLVMContext &Ctx =
CGM.getLLVMContext();
1027 const unsigned ScopeArg = E->
getNumArgs() - 1;
1028 for (
unsigned i = 0; i != ScopeArg; ++i)
1032 llvm::MDNode *MD = llvm::MDNode::get(Ctx, {llvm::MDString::get(Ctx, Arg)});
1033 Args.push_back(llvm::MetadataAsValue::get(Ctx, MD));
1036 llvm::Function *F =
CGM.getIntrinsic(IID, {Args[0]->getType()});
1037 return Builder.CreateCall(F, {Args});
1039 case AMDGPU::BI__builtin_amdgcn_av_load_b128:
1040 case AMDGPU::BI__builtin_amdgcn_av_store_b128: {
1041 const bool IsStore = BuiltinID == AMDGPU::BI__builtin_amdgcn_av_store_b128;
1045 const unsigned ScopeIdx = E->
getNumArgs() - 1;
1048 Args.push_back(
emitScopeMD(*
this, ScopeExpr->getZExtValue()));
1050 CGM.getIntrinsic(IsStore ? Intrinsic::amdgcn_av_store_b128
1051 : Intrinsic::amdgcn_av_load_b128,
1052 {Args[0]->getType()});
1053 return Builder.CreateCall(F, Args);
1055 case AMDGPU::BI__builtin_amdgcn_get_fpenv: {
1056 Function *F =
CGM.getIntrinsic(Intrinsic::get_fpenv,
1060 case AMDGPU::BI__builtin_amdgcn_set_fpenv: {
1061 Function *F =
CGM.getIntrinsic(Intrinsic::set_fpenv,
1064 return Builder.CreateCall(F, {Env});
1066 case AMDGPU::BI__builtin_amdgcn_processor_is: {
1067 assert(
CGM.getTriple().isSPIRV() &&
1068 "__builtin_amdgcn_processor_is should never reach CodeGen for "
1069 "concrete targets!");
1073 case AMDGPU::BI__builtin_amdgcn_is_invocable: {
1074 assert(
CGM.getTriple().isSPIRV() &&
1075 "__builtin_amdgcn_is_invocable should never reach CodeGen for "
1076 "concrete targets!");
1083 case AMDGPU::BI__builtin_amdgcn_read_exec:
1085 case AMDGPU::BI__builtin_amdgcn_read_exec_lo:
1087 case AMDGPU::BI__builtin_amdgcn_read_exec_hi:
1089 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray:
1090 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_h:
1091 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_l:
1092 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_lh: {
1102 RayOrigin =
Builder.CreateShuffleVector(RayOrigin, RayOrigin,
1105 Builder.CreateShuffleVector(RayDir, RayDir, {0, 1, 2});
1106 RayInverseDir =
Builder.CreateShuffleVector(RayInverseDir, RayInverseDir,
1109 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_image_bvh_intersect_ray,
1110 {NodePtr->getType(), RayDir->getType()});
1111 return Builder.CreateCall(F, {NodePtr, RayExtent, RayOrigin, RayDir,
1112 RayInverseDir, TextureDescr});
1114 case AMDGPU::BI__builtin_amdgcn_image_bvh8_intersect_ray:
1115 case AMDGPU::BI__builtin_amdgcn_image_bvh_dual_intersect_ray: {
1117 switch (BuiltinID) {
1118 case AMDGPU::BI__builtin_amdgcn_image_bvh8_intersect_ray:
1119 IID = Intrinsic::amdgcn_image_bvh8_intersect_ray;
1121 case AMDGPU::BI__builtin_amdgcn_image_bvh_dual_intersect_ray:
1122 IID = Intrinsic::amdgcn_image_bvh_dual_intersect_ray;
1136 llvm::Function *IntrinsicFunc =
CGM.getIntrinsic(IID);
1138 llvm::CallInst *CI =
Builder.CreateCall(
1139 IntrinsicFunc, {NodePtr, RayExtent, InstanceMask, RayOrigin, RayDir,
1140 Offset, TextureDescr});
1142 llvm::Value *RetVData =
Builder.CreateExtractValue(CI, 0);
1143 llvm::Value *RetRayOrigin =
Builder.CreateExtractValue(CI, 1);
1144 llvm::Value *RetRayDir =
Builder.CreateExtractValue(CI, 2);
1146 Builder.CreateStore(RetRayOrigin, RetRayOriginPtr);
1147 Builder.CreateStore(RetRayDir, RetRayDirPtr);
1152 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_rtn:
1153 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push4_pop1_rtn:
1154 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop1_rtn:
1155 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop2_rtn: {
1157 switch (BuiltinID) {
1158 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_rtn:
1159 IID = Intrinsic::amdgcn_ds_bvh_stack_rtn;
1161 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push4_pop1_rtn:
1162 IID = Intrinsic::amdgcn_ds_bvh_stack_push4_pop1_rtn;
1164 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop1_rtn:
1165 IID = Intrinsic::amdgcn_ds_bvh_stack_push8_pop1_rtn;
1167 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop2_rtn:
1168 IID = Intrinsic::amdgcn_ds_bvh_stack_push8_pop2_rtn;
1173 for (
int i = 0, e = E->
getNumArgs(); i != e; ++i)
1181 Value *I0 =
Builder.CreateInsertElement(PoisonValue::get(RetTy), Rtn,
1185 if (A->
getType()->getPrimitiveSizeInBits() <
1186 RetTy->getScalarType()->getPrimitiveSizeInBits())
1187 A =
Builder.CreateZExt(A, RetTy->getScalarType());
1189 return Builder.CreateInsertElement(I0, A, 1);
1191 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f32_i32:
1192 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f16_i32:
1194 *
this, E, Intrinsic::amdgcn_image_load_1d,
false);
1195 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f32_i32:
1196 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f16_i32:
1198 *
this, E, Intrinsic::amdgcn_image_load_1darray,
false);
1199 case AMDGPU::BI__builtin_amdgcn_image_load_2d_f32_i32:
1200 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f32_i32:
1201 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f16_i32:
1203 *
this, E, Intrinsic::amdgcn_image_load_2d,
false);
1204 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_f32_i32:
1205 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f32_i32:
1206 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f16_i32:
1208 *
this, E, Intrinsic::amdgcn_image_load_2darray,
false);
1209 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f32_i32:
1210 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f16_i32:
1212 *
this, E, Intrinsic::amdgcn_image_load_3d,
false);
1213 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f32_i32:
1214 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f16_i32:
1216 *
this, E, Intrinsic::amdgcn_image_load_cube,
false);
1217 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f32_i32:
1218 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f16_i32:
1220 *
this, E, Intrinsic::amdgcn_image_load_mip_1d,
false);
1221 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f32_i32:
1222 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f16_i32:
1224 *
this, E, Intrinsic::amdgcn_image_load_mip_1darray,
false);
1225 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_f32_i32:
1226 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f32_i32:
1227 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f16_i32:
1229 *
this, E, Intrinsic::amdgcn_image_load_mip_2d,
false);
1230 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_f32_i32:
1231 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f32_i32:
1232 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f16_i32:
1234 *
this, E, Intrinsic::amdgcn_image_load_mip_2darray,
false);
1235 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f32_i32:
1236 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f16_i32:
1238 *
this, E, Intrinsic::amdgcn_image_load_mip_3d,
false);
1239 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f32_i32:
1240 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f16_i32:
1242 *
this, E, Intrinsic::amdgcn_image_load_mip_cube,
false);
1243 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f32_i32:
1244 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f16_i32:
1246 *
this, E, Intrinsic::amdgcn_image_store_1d,
true);
1247 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f32_i32:
1248 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f16_i32:
1250 *
this, E, Intrinsic::amdgcn_image_store_1darray,
true);
1251 case AMDGPU::BI__builtin_amdgcn_image_store_2d_f32_i32:
1252 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f32_i32:
1253 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f16_i32:
1255 *
this, E, Intrinsic::amdgcn_image_store_2d,
true);
1256 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_f32_i32:
1257 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f32_i32:
1258 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f16_i32:
1260 *
this, E, Intrinsic::amdgcn_image_store_2darray,
true);
1261 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f32_i32:
1262 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f16_i32:
1264 *
this, E, Intrinsic::amdgcn_image_store_3d,
true);
1265 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f32_i32:
1266 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f16_i32:
1268 *
this, E, Intrinsic::amdgcn_image_store_cube,
true);
1269 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f32_i32:
1270 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f16_i32:
1272 *
this, E, Intrinsic::amdgcn_image_store_mip_1d,
true);
1273 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f32_i32:
1274 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f16_i32:
1276 *
this, E, Intrinsic::amdgcn_image_store_mip_1darray,
true);
1277 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_f32_i32:
1278 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f32_i32:
1279 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f16_i32:
1281 *
this, E, Intrinsic::amdgcn_image_store_mip_2d,
true);
1282 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_f32_i32:
1283 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f32_i32:
1284 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f16_i32:
1286 *
this, E, Intrinsic::amdgcn_image_store_mip_2darray,
true);
1287 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f32_i32:
1288 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f16_i32:
1290 *
this, E, Intrinsic::amdgcn_image_store_mip_3d,
true);
1291 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f32_i32:
1292 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f16_i32:
1294 *
this, E, Intrinsic::amdgcn_image_store_mip_cube,
true);
1295 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f32_f32:
1296 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f16_f32:
1298 *
this, E, Intrinsic::amdgcn_image_sample_1d,
false);
1299 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f32_f32:
1300 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f16_f32:
1302 *
this, E, Intrinsic::amdgcn_image_sample_1darray,
false);
1303 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_f32_f32:
1304 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f32_f32:
1305 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f16_f32:
1307 *
this, E, Intrinsic::amdgcn_image_sample_2d,
false);
1308 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_f32_f32:
1309 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f32_f32:
1310 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f16_f32:
1312 *
this, E, Intrinsic::amdgcn_image_sample_2darray,
false);
1313 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f32_f32:
1314 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f16_f32:
1316 *
this, E, Intrinsic::amdgcn_image_sample_3d,
false);
1317 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f32_f32:
1318 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f16_f32:
1320 *
this, E, Intrinsic::amdgcn_image_sample_cube,
false);
1321 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1d_v4f32_f32:
1322 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1d_v4f16_f32:
1324 *
this, E, Intrinsic::amdgcn_image_sample_lz_1d,
false);
1325 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1d_v4f32_f32:
1326 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1d_v4f16_f32:
1328 *
this, E, Intrinsic::amdgcn_image_sample_l_1d,
false);
1329 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1d_v4f32_f32:
1330 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1d_v4f16_f32:
1332 *
this, E, Intrinsic::amdgcn_image_sample_d_1d,
false);
1333 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_v4f32_f32:
1334 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_v4f16_f32:
1335 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_f32_f32:
1337 *
this, E, Intrinsic::amdgcn_image_sample_lz_2d,
false);
1338 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_v4f32_f32:
1339 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_v4f16_f32:
1340 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_f32_f32:
1342 *
this, E, Intrinsic::amdgcn_image_sample_l_2d,
false);
1343 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_v4f32_f32:
1344 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_v4f16_f32:
1345 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_f32_f32:
1347 *
this, E, Intrinsic::amdgcn_image_sample_d_2d,
false);
1348 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_3d_v4f32_f32:
1349 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_3d_v4f16_f32:
1351 *
this, E, Intrinsic::amdgcn_image_sample_lz_3d,
false);
1352 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_3d_v4f32_f32:
1353 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_3d_v4f16_f32:
1355 *
this, E, Intrinsic::amdgcn_image_sample_l_3d,
false);
1356 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_3d_v4f32_f32:
1357 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_3d_v4f16_f32:
1359 *
this, E, Intrinsic::amdgcn_image_sample_d_3d,
false);
1360 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_cube_v4f32_f32:
1361 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_cube_v4f16_f32:
1363 *
this, E, Intrinsic::amdgcn_image_sample_lz_cube,
false);
1364 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_cube_v4f32_f32:
1365 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_cube_v4f16_f32:
1367 *
this, E, Intrinsic::amdgcn_image_sample_l_cube,
false);
1368 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1darray_v4f32_f32:
1369 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1darray_v4f16_f32:
1371 *
this, E, Intrinsic::amdgcn_image_sample_lz_1darray,
false);
1372 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1darray_v4f32_f32:
1373 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1darray_v4f16_f32:
1375 *
this, E, Intrinsic::amdgcn_image_sample_l_1darray,
false);
1376 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1darray_v4f32_f32:
1377 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1darray_v4f16_f32:
1379 *
this, E, Intrinsic::amdgcn_image_sample_d_1darray,
false);
1380 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_v4f32_f32:
1381 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_v4f16_f32:
1382 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_f32_f32:
1384 *
this, E, Intrinsic::amdgcn_image_sample_lz_2darray,
false);
1385 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_v4f32_f32:
1386 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_v4f16_f32:
1387 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_f32_f32:
1389 *
this, E, Intrinsic::amdgcn_image_sample_l_2darray,
false);
1390 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_v4f32_f32:
1391 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_v4f16_f32:
1392 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_f32_f32:
1394 *
this, E, Intrinsic::amdgcn_image_sample_d_2darray,
false);
1395 case clang::AMDGPU::BI__builtin_amdgcn_image_gather4_lz_2d_v4f32_f32:
1396 case clang::AMDGPU::BI__builtin_amdgcn_image_gather4_lz_2d_v4f16_f32:
1398 *
this, E, Intrinsic::amdgcn_image_gather4_lz_2d,
false);
1399 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_16x16x128_f8f6f4:
1400 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_32x32x64_f8f6f4: {
1401 llvm::FixedVectorType *VT = FixedVectorType::get(
Builder.getInt32Ty(), 8);
1403 BuiltinID == AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_32x32x64_f8f6f4
1404 ? Intrinsic::amdgcn_mfma_scale_f32_32x32x64_f8f6f4
1405 : Intrinsic::amdgcn_mfma_scale_f32_16x16x128_f8f6f4,
1409 for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++I)
1411 return Builder.CreateCall(F, Args);
1413 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32:
1414 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w32:
1415 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64:
1416 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w64:
1417 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32:
1418 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w32:
1419 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64:
1420 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w64:
1421 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32:
1422 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64:
1423 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32:
1424 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64:
1425 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32:
1426 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64:
1427 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32:
1428 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64:
1429 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32_gfx12:
1430 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64_gfx12:
1431 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32_gfx12:
1432 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64_gfx12:
1433 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32_gfx12:
1434 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64_gfx12:
1435 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32_gfx12:
1436 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64_gfx12:
1437 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32_gfx12:
1438 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64_gfx12:
1439 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32_gfx12:
1440 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64_gfx12:
1441 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w32_gfx12:
1442 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w64_gfx12:
1443 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w32_gfx12:
1444 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w64_gfx12:
1445 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w32_gfx12:
1446 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w64_gfx12:
1447 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w32_gfx12:
1448 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w64_gfx12:
1449 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w32_gfx12:
1450 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w64_gfx12:
1451 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w32:
1452 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w64:
1453 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w32:
1454 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w64:
1455 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w32:
1456 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w64:
1457 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w32:
1458 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w64:
1459 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w32:
1460 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w64:
1461 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w32:
1462 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w64:
1463 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w32:
1464 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w64:
1465 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w32:
1466 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w64:
1467 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w32:
1468 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w64:
1469 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w32:
1470 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w64:
1471 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w32:
1472 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w64:
1474 case AMDGPU::BI__builtin_amdgcn_wmma_f64_16x16x4_f64:
1475 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x4_f32:
1476 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_bf16:
1477 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_f16:
1478 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x32_f16:
1479 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x32_bf16:
1480 case AMDGPU::BI__builtin_amdgcn_wmma_bf16f32_16x16x32_bf16:
1481 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_fp8:
1482 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_bf8:
1483 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_fp8:
1484 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_bf8:
1485 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_fp8:
1486 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_bf8:
1487 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_fp8:
1488 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_bf8:
1489 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_fp8:
1490 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_bf8:
1491 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_fp8:
1492 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_bf8:
1493 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_fp8:
1494 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_bf8:
1495 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_fp8:
1496 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_bf8:
1497 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8:
1498 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_f8f6f4:
1499 case AMDGPU::BI__builtin_amdgcn_wmma_f32_32x16x128_f4:
1500 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_16x16x128_f8f6f4:
1501 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4:
1502 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_32x16x128_f4:
1503 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_32x16x128_f4:
1504 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_f16:
1505 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_bf16:
1506 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x64_f16:
1507 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x64_bf16:
1508 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16f32_16x16x64_bf16:
1509 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_fp8:
1510 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_bf8:
1511 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_fp8:
1512 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_bf8:
1513 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_fp8:
1514 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_bf8:
1515 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_fp8:
1516 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_bf8:
1517 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8: {
1530 bool AppendFalseForOpselArg =
false;
1531 unsigned BuiltinWMMAOp;
1533 bool NeedReturnType =
false;
1535 bool RemoveABNeg =
false;
1537 switch (BuiltinID) {
1538 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32:
1539 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64:
1540 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32_gfx12:
1541 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64_gfx12:
1542 ArgsForMatchingMatrixTypes = {2, 0};
1543 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_f16;
1545 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32:
1546 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64:
1547 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32_gfx12:
1548 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64_gfx12:
1549 ArgsForMatchingMatrixTypes = {2, 0};
1550 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_bf16;
1552 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32_gfx12:
1553 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64_gfx12:
1554 AppendFalseForOpselArg =
true;
1556 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32:
1557 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64:
1558 ArgsForMatchingMatrixTypes = {2, 0};
1559 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x16_f16;
1561 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32_gfx12:
1562 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64_gfx12:
1563 AppendFalseForOpselArg =
true;
1565 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32:
1566 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64:
1567 ArgsForMatchingMatrixTypes = {2, 0};
1568 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16_16x16x16_bf16;
1570 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w32:
1571 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w64:
1572 ArgsForMatchingMatrixTypes = {2, 0};
1573 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x16_f16_tied;
1575 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w32:
1576 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w64:
1577 ArgsForMatchingMatrixTypes = {2, 0};
1578 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16_16x16x16_bf16_tied;
1580 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32:
1581 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64:
1582 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32_gfx12:
1583 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64_gfx12:
1584 ArgsForMatchingMatrixTypes = {4, 1};
1585 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x16_iu8;
1587 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32:
1588 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64:
1589 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32_gfx12:
1590 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64_gfx12:
1591 ArgsForMatchingMatrixTypes = {4, 1};
1592 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x16_iu4;
1594 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w32_gfx12:
1595 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w64_gfx12:
1596 ArgsForMatchingMatrixTypes = {2, 0};
1597 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_fp8_fp8;
1599 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w32_gfx12:
1600 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w64_gfx12:
1601 ArgsForMatchingMatrixTypes = {2, 0};
1602 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_fp8_bf8;
1604 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w32_gfx12:
1605 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w64_gfx12:
1606 ArgsForMatchingMatrixTypes = {2, 0};
1607 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_bf8_fp8;
1609 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w32_gfx12:
1610 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w64_gfx12:
1611 ArgsForMatchingMatrixTypes = {2, 0};
1612 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_bf8_bf8;
1614 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w32_gfx12:
1615 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w64_gfx12:
1616 ArgsForMatchingMatrixTypes = {4, 1};
1617 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x32_iu4;
1619 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w32:
1620 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w64:
1621 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1622 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_f16;
1624 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w32:
1625 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w64:
1626 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1627 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_bf16;
1629 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w32:
1630 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w64:
1631 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1632 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x32_f16;
1634 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w32:
1635 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w64:
1636 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1637 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_bf16_16x16x32_bf16;
1639 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w32:
1640 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w64:
1641 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1642 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x32_iu8;
1644 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w32:
1645 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w64:
1646 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1647 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x32_iu4;
1649 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w32:
1650 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w64:
1651 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1652 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x64_iu4;
1654 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w32:
1655 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w64:
1656 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1657 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_fp8_fp8;
1659 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w32:
1660 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w64:
1661 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1662 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_fp8_bf8;
1664 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w32:
1665 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w64:
1666 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1667 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_bf8_fp8;
1669 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w32:
1670 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w64:
1671 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1672 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_bf8_bf8;
1675 case AMDGPU::BI__builtin_amdgcn_wmma_f64_16x16x4_f64:
1676 ArgsForMatchingMatrixTypes = {5, 1};
1677 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f64_16x16x4_f64;
1679 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x4_f32:
1680 ArgsForMatchingMatrixTypes = {3, 0};
1681 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x4_f32;
1684 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_bf16:
1685 ArgsForMatchingMatrixTypes = {3, 0};
1686 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x32_bf16;
1689 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_f16:
1690 ArgsForMatchingMatrixTypes = {3, 0};
1691 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x32_f16;
1694 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x32_f16:
1695 ArgsForMatchingMatrixTypes = {3, 0};
1696 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x32_f16;
1699 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x32_bf16:
1700 ArgsForMatchingMatrixTypes = {3, 0};
1701 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16_16x16x32_bf16;
1704 case AMDGPU::BI__builtin_amdgcn_wmma_bf16f32_16x16x32_bf16:
1705 NeedReturnType =
true;
1706 ArgsForMatchingMatrixTypes = {0, 3};
1707 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16f32_16x16x32_bf16;
1710 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_fp8:
1711 ArgsForMatchingMatrixTypes = {3, 0};
1712 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_fp8_fp8;
1714 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_bf8:
1715 ArgsForMatchingMatrixTypes = {3, 0};
1716 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_fp8_bf8;
1718 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_fp8:
1719 ArgsForMatchingMatrixTypes = {3, 0};
1720 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_bf8_fp8;
1722 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_bf8:
1723 ArgsForMatchingMatrixTypes = {3, 0};
1724 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_bf8_bf8;
1726 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_fp8:
1727 ArgsForMatchingMatrixTypes = {3, 0};
1728 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_fp8_fp8;
1730 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_bf8:
1731 ArgsForMatchingMatrixTypes = {3, 0};
1732 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_fp8_bf8;
1734 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_fp8:
1735 ArgsForMatchingMatrixTypes = {3, 0};
1736 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_bf8_fp8;
1738 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_bf8:
1739 ArgsForMatchingMatrixTypes = {3, 0};
1740 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_bf8_bf8;
1742 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_fp8:
1743 ArgsForMatchingMatrixTypes = {3, 0};
1744 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_fp8_fp8;
1746 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_bf8:
1747 ArgsForMatchingMatrixTypes = {3, 0};
1748 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_fp8_bf8;
1750 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_fp8:
1751 ArgsForMatchingMatrixTypes = {3, 0};
1752 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_bf8_fp8;
1754 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_bf8:
1755 ArgsForMatchingMatrixTypes = {3, 0};
1756 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_bf8_bf8;
1758 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_fp8:
1759 ArgsForMatchingMatrixTypes = {3, 0};
1760 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_fp8_fp8;
1762 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_bf8:
1763 ArgsForMatchingMatrixTypes = {3, 0};
1764 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_fp8_bf8;
1766 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_fp8:
1767 ArgsForMatchingMatrixTypes = {3, 0};
1768 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_bf8_fp8;
1770 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_bf8:
1771 ArgsForMatchingMatrixTypes = {3, 0};
1772 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_bf8_bf8;
1774 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8:
1775 ArgsForMatchingMatrixTypes = {4, 1};
1776 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x64_iu8;
1778 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_f8f6f4:
1779 ArgsForMatchingMatrixTypes = {5, 1, 3};
1780 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_f8f6f4;
1782 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_16x16x128_f8f6f4:
1783 ArgsForMatchingMatrixTypes = {5, 1, 3};
1784 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale_f32_16x16x128_f8f6f4;
1786 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4:
1787 ArgsForMatchingMatrixTypes = {5, 1, 3};
1788 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale16_f32_16x16x128_f8f6f4;
1790 case AMDGPU::BI__builtin_amdgcn_wmma_f32_32x16x128_f4:
1791 ArgsForMatchingMatrixTypes = {3, 0, 1};
1792 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_32x16x128_f4;
1794 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_32x16x128_f4:
1795 ArgsForMatchingMatrixTypes = {3, 0, 1};
1796 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale_f32_32x16x128_f4;
1798 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_32x16x128_f4:
1799 ArgsForMatchingMatrixTypes = {3, 0, 1};
1800 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale16_f32_32x16x128_f4;
1802 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_f16:
1803 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1804 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x64_f16;
1806 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_bf16:
1807 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1808 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x64_bf16;
1810 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x64_f16:
1811 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1812 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x64_f16;
1814 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x64_bf16:
1815 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1816 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_bf16_16x16x64_bf16;
1818 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16f32_16x16x64_bf16:
1819 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1820 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_bf16f32_16x16x64_bf16;
1822 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_fp8:
1823 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1824 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_fp8_fp8;
1826 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_bf8:
1827 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1828 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_fp8_bf8;
1830 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_fp8:
1831 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1832 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_bf8_fp8;
1834 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_bf8:
1835 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1836 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_bf8_bf8;
1838 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_fp8:
1839 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1840 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_fp8_fp8;
1842 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_bf8:
1843 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1844 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_fp8_bf8;
1846 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_fp8:
1847 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1848 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_bf8_fp8;
1850 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_bf8:
1851 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1852 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_bf8_bf8;
1854 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8:
1855 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1856 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x128_iu8;
1861 for (
int i = 0, e = E->
getNumArgs(); i != e; ++i) {
1863 if (RemoveABNeg && (i == 0 || i == 2))
1867 if (AppendFalseForOpselArg)
1868 Args.push_back(
Builder.getFalse());
1871 if (BuiltinID == AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8) {
1872 if (Args.size() == 7)
1873 Args.push_back(
Builder.getFalse());
1874 assert(Args.size() == 8 &&
"Expected 8 arguments");
1875 Args[7] =
Builder.CreateZExtOrTrunc(Args[7],
Builder.getInt1Ty());
1876 }
else if (BuiltinID ==
1877 AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8) {
1878 if (Args.size() == 8)
1879 Args.push_back(
Builder.getFalse());
1880 assert(Args.size() == 9 &&
"Expected 9 arguments");
1881 Args[8] =
Builder.CreateZExtOrTrunc(Args[8],
Builder.getInt1Ty());
1887 for (
auto ArgIdx : ArgsForMatchingMatrixTypes)
1888 ArgTypes.push_back(Args[ArgIdx]->
getType());
1890 Function *F =
CGM.getIntrinsic(BuiltinWMMAOp, ArgTypes);
1891 return Builder.CreateCall(F, Args);
1894 case AMDGPU::BI__builtin_amdgcn_workgroup_size_x:
1895 return EmitAMDGPUWorkGroupSize(*
this, 0);
1896 case AMDGPU::BI__builtin_amdgcn_workgroup_size_y:
1897 return EmitAMDGPUWorkGroupSize(*
this, 1);
1898 case AMDGPU::BI__builtin_amdgcn_workgroup_size_z:
1899 return EmitAMDGPUWorkGroupSize(*
this, 2);
1902 case AMDGPU::BI__builtin_amdgcn_grid_size_x:
1903 return EmitAMDGPUGridSize(*
this, 0);
1904 case AMDGPU::BI__builtin_amdgcn_grid_size_y:
1905 return EmitAMDGPUGridSize(*
this, 1);
1906 case AMDGPU::BI__builtin_amdgcn_grid_size_z:
1907 return EmitAMDGPUGridSize(*
this, 2);
1910 case AMDGPU::BI__builtin_r600_recipsqrt_ieee:
1911 case AMDGPU::BI__builtin_r600_recipsqrt_ieeef:
1913 Intrinsic::r600_recipsqrt_ieee);
1914 case AMDGPU::BI__builtin_amdgcn_alignbit: {
1918 Function *F =
CGM.getIntrinsic(Intrinsic::fshr, Src0->getType());
1919 return Builder.CreateCall(F, { Src0, Src1, Src2 });
1921 case AMDGPU::BI__builtin_amdgcn_fence: {
1924 FenceInst *Fence =
Builder.CreateFence(AO, SSID);
1930 case AMDGPU::BI__builtin_amdgcn_atomic_inc32:
1931 case AMDGPU::BI__builtin_amdgcn_atomic_inc64:
1932 case AMDGPU::BI__builtin_amdgcn_atomic_dec32:
1933 case AMDGPU::BI__builtin_amdgcn_atomic_dec64:
1934 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f64:
1935 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f32:
1936 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2f16:
1937 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16:
1938 case AMDGPU::BI__builtin_amdgcn_ds_faddf:
1939 case AMDGPU::BI__builtin_amdgcn_ds_fminf:
1940 case AMDGPU::BI__builtin_amdgcn_ds_fmaxf:
1941 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f32:
1942 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f64:
1943 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2f16:
1944 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2f16:
1945 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f32:
1946 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f64:
1947 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16:
1948 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16:
1949 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmin_f64:
1950 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmax_f64:
1951 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmin_f64:
1952 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmax_f64: {
1953 llvm::AtomicRMWInst::BinOp BinOp;
1954 switch (BuiltinID) {
1955 case AMDGPU::BI__builtin_amdgcn_atomic_inc32:
1956 case AMDGPU::BI__builtin_amdgcn_atomic_inc64:
1957 BinOp = llvm::AtomicRMWInst::UIncWrap;
1959 case AMDGPU::BI__builtin_amdgcn_atomic_dec32:
1960 case AMDGPU::BI__builtin_amdgcn_atomic_dec64:
1961 BinOp = llvm::AtomicRMWInst::UDecWrap;
1963 case AMDGPU::BI__builtin_amdgcn_ds_faddf:
1964 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f64:
1965 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f32:
1966 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2f16:
1967 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16:
1968 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f32:
1969 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f64:
1970 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2f16:
1971 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2f16:
1972 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f32:
1973 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f64:
1974 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16:
1975 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16:
1976 BinOp = llvm::AtomicRMWInst::FAdd;
1978 case AMDGPU::BI__builtin_amdgcn_ds_fminf:
1979 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmin_f64:
1980 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmin_f64:
1981 BinOp = llvm::AtomicRMWInst::FMin;
1983 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmax_f64:
1984 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmax_f64:
1985 case AMDGPU::BI__builtin_amdgcn_ds_fmaxf:
1986 BinOp = llvm::AtomicRMWInst::FMax;
1992 llvm::Type *OrigTy = Val->
getType();
1997 if (BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_faddf ||
1998 BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_fminf ||
1999 BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_fmaxf) {
2021 getLLVMContext().getOrInsertSyncScopeID(*llvm::getAtomicScopeIRString(
2023 AO = AtomicOrdering::Monotonic;
2026 if (BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16 ||
2027 BuiltinID == AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16 ||
2028 BuiltinID == AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16) {
2029 llvm::Type *V2BF16Ty = FixedVectorType::get(
2030 llvm::Type::getBFloatTy(
Builder.getContext()), 2);
2031 Val =
Builder.CreateBitCast(Val, V2BF16Ty);
2035 llvm::AtomicRMWInst *RMW =
2036 Builder.CreateAtomicRMW(BinOp, Ptr, Val, AO, SSID);
2038 RMW->setVolatile(
true);
2041 unsigned AddrSpace = Ptr.getType()->getAddressSpace();
2042 if (AddrSpace != llvm::AMDGPUAS::LOCAL_ADDRESS) {
2046 RMW->setMetadata(
"amdgpu.no.fine.grained.memory", EmptyMD);
2050 if (BinOp == llvm::AtomicRMWInst::FAdd && Val->
getType()->isFloatTy())
2051 RMW->setMetadata(llvm::LLVMContext::MD_atomic_ignore_denormal_mode,
2055 return Builder.CreateBitCast(RMW, OrigTy);
2057 case AMDGPU::BI__builtin_amdgcn_s_sendmsg_rtn:
2058 case AMDGPU::BI__builtin_amdgcn_s_sendmsg_rtnl: {
2063 CGM.getIntrinsic(Intrinsic::amdgcn_s_sendmsg_rtn, {ResultType});
2064 return Builder.CreateCall(F, {Arg});
2066 case AMDGPU::BI__builtin_amdgcn_permlane16_swap:
2067 case AMDGPU::BI__builtin_amdgcn_permlane32_swap: {
2075 CGM.getIntrinsic(BuiltinID == AMDGPU::BI__builtin_amdgcn_permlane16_swap
2076 ? Intrinsic::amdgcn_permlane16_swap
2077 : Intrinsic::amdgcn_permlane32_swap);
2078 llvm::CallInst *
Call =
2079 Builder.CreateCall(F, {VDstOld, VSrcOld, FI, BoundCtrl});
2081 llvm::Value *Elt0 =
Builder.CreateExtractValue(
Call, 0);
2082 llvm::Value *Elt1 =
Builder.CreateExtractValue(
Call, 1);
2086 llvm::Value *Insert0 =
Builder.CreateInsertElement(
2087 llvm::PoisonValue::get(ResultType), Elt0, UINT64_C(0));
2088 llvm::Value *AsVector =
2089 Builder.CreateInsertElement(Insert0, Elt1, UINT64_C(1));
2092 case AMDGPU::BI__builtin_amdgcn_bitop3_b32:
2093 case AMDGPU::BI__builtin_amdgcn_bitop3_b16:
2095 Intrinsic::amdgcn_bitop3);
2096 case AMDGPU::BI__builtin_amdgcn_make_buffer_rsrc: {
2101 for (
unsigned I = 0; I < 4; ++I)
2103 llvm::PointerType *RetTy = llvm::PointerType::get(
2104 Builder.getContext(), llvm::AMDGPUAS::BUFFER_RESOURCE);
2106 CGM.getIntrinsic(Intrinsic::amdgcn_make_buffer_rsrc,
2107 {RetTy, Args[0]->getType(), Args[2]->getType()});
2108 return Builder.CreateCall(F, Args);
2110 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b8:
2111 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b16:
2112 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b32:
2113 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b64:
2114 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b96:
2115 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b128:
2117 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_store);
2118 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_format_v4f32:
2119 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_format_v4f16:
2121 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_store_format);
2122 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b8:
2123 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b16:
2124 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b32:
2125 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b64:
2126 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b96:
2127 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b128: {
2128 llvm::Type *RetTy =
nullptr;
2129 switch (BuiltinID) {
2130 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b8:
2133 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b16:
2136 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b32:
2139 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b64:
2140 RetTy = llvm::FixedVectorType::get(
Int32Ty, 2);
2142 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b96:
2143 RetTy = llvm::FixedVectorType::get(
Int32Ty, 3);
2145 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b128:
2146 RetTy = llvm::FixedVectorType::get(
Int32Ty, 4);
2150 CGM.getIntrinsic(Intrinsic::amdgcn_raw_ptr_buffer_load, RetTy);
2155 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_format_v4f32:
2156 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_format_v4f16: {
2159 CGM.getIntrinsic(Intrinsic::amdgcn_raw_ptr_buffer_load_format, {RetTy});
2165 case AMDGPU::BI__builtin_amdgcn_struct_buffer_store_format_v4f32:
2166 case AMDGPU::BI__builtin_amdgcn_struct_buffer_store_format_v4f16:
2168 *
this, E, Intrinsic::amdgcn_struct_ptr_buffer_store_format);
2169 case AMDGPU::BI__builtin_amdgcn_struct_buffer_load_format_v4f32:
2170 case AMDGPU::BI__builtin_amdgcn_struct_buffer_load_format_v4f16: {
2173 Intrinsic::amdgcn_struct_ptr_buffer_load_format, {RetTy});
2180 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_add_i32:
2182 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_add);
2183 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_f32:
2184 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_f64:
2185 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_v2f16:
2187 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_fadd);
2188 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmin_f32:
2189 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmin_f64:
2191 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_fmin);
2192 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmax_f32:
2193 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmax_f64:
2195 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_fmax);
2196 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_i32:
2197 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v2i32:
2198 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v3i32:
2199 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v4i32:
2200 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v8i32:
2201 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v16i32:
2202 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_f32:
2203 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v2f32:
2204 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v3f32:
2205 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v4f32:
2206 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v8f32:
2207 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v16f32:
2208 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_i8:
2209 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_u8:
2210 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_i16:
2211 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_u16:
2212 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v2i8:
2213 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v3i8:
2214 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v4i8:
2215 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_f16:
2216 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v2f16:
2217 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v3f16:
2218 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v4f16:
2219 return emitAMDGPUSBufferLoadBuiltin(*
this, E);
2220 case AMDGPU::BI__builtin_amdgcn_s_prefetch_data:
2222 *
this, E, Intrinsic::amdgcn_s_prefetch_data);
2223 case AMDGPU::BI__builtin_amdgcn_s_prefetch_inst:
2225 *
this, E, Intrinsic::amdgcn_s_prefetch_inst);
2226 case Builtin::BIlogbf:
2227 case Builtin::BI__builtin_logbf: {
2231 CallInst *FrExp =
Builder.CreateCall(FrExpFunc, Src0);
2234 Exp, ConstantInt::getSigned(Exp->
getType(), -1),
"",
false,
true);
2239 Fabs, ConstantFP::getInfinity(
Builder.getFloatTy()));
2240 Value *Sel1 =
Builder.CreateSelect(FCmpONE, SIToFP, Fabs);
2242 Builder.CreateFCmpOEQ(Src0, ConstantFP::getZero(
Builder.getFloatTy()));
2245 ConstantFP::getInfinity(
Builder.getFloatTy(),
true), Sel1);
2248 case Builtin::BIlogb:
2249 case Builtin::BI__builtin_logb: {
2253 CallInst *FrExp =
Builder.CreateCall(FrExpFunc, Src0);
2256 Exp, ConstantInt::getSigned(Exp->
getType(), -1),
"",
false,
true);
2261 Fabs, ConstantFP::getInfinity(
Builder.getDoubleTy()));
2262 Value *Sel1 =
Builder.CreateSelect(FCmpONE, SIToFP, Fabs);
2264 Builder.CreateFCmpOEQ(Src0, ConstantFP::getZero(
Builder.getDoubleTy()));
2267 ConstantFP::getInfinity(
Builder.getDoubleTy(),
true),
2271 case Builtin::BIscalbnf:
2272 case Builtin::BI__builtin_scalbnf:
2273 case Builtin::BIscalbn:
2274 case Builtin::BI__builtin_scalbn:
2276 *
this, E, Intrinsic::ldexp, Intrinsic::experimental_constrained_ldexp);
2277 case AMDGPU::BI__builtin_amdgcn_permlane_bcast:
2279 *
this, E, Intrinsic::amdgcn_permlane_bcast);
2280 case AMDGPU::BI__builtin_amdgcn_permlane_up:
2282 Intrinsic::amdgcn_permlane_up);
2283 case AMDGPU::BI__builtin_amdgcn_permlane_down:
2285 Intrinsic::amdgcn_permlane_down);
2286 case AMDGPU::BI__builtin_amdgcn_permlane_xor:
2288 Intrinsic::amdgcn_permlane_xor);