560 llvm::AtomicOrdering AO = llvm::AtomicOrdering::SequentiallyConsistent;
561 llvm::SyncScope::ID SSID;
563 case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u32:
564 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fadd_f32:
565 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fadd_f64:
566 case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u32:
567 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fsub_f32:
568 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fsub_f64:
569 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i32:
570 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u32:
571 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmin_f32:
572 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmin_f64:
573 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i32:
574 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u32:
575 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmax_f32:
576 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmax_f64:
577 case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b32:
578 case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b32:
579 case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b32:
580 case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u64:
581 case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u64:
582 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i64:
583 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u64:
584 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i64:
585 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u64:
586 case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b64:
587 case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b64:
588 case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b64: {
595 case AMDGPU::BI__builtin_amdgcn_div_scale:
596 case AMDGPU::BI__builtin_amdgcn_div_scalef: {
606 llvm::Function *Callee =
CGM.getIntrinsic(Intrinsic::amdgcn_div_scale,
609 llvm::Value *Tmp =
Builder.CreateCall(Callee, {
X, Y, Z});
612 llvm::Value *Flag =
Builder.CreateExtractValue(Tmp, 1);
616 llvm::Value *FlagExt =
Builder.CreateZExt(Flag, RealFlagType);
617 Builder.CreateStore(FlagExt, FlagOutPtr);
620 case AMDGPU::BI__builtin_amdgcn_div_fmas:
621 case AMDGPU::BI__builtin_amdgcn_div_fmasf: {
627 llvm::Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_div_fmas,
629 llvm::Value *Src3ToBool =
Builder.CreateIsNotNull(Src3);
630 return Builder.CreateCall(F, {Src0, Src1, Src2, Src3ToBool});
633 case AMDGPU::BI__builtin_amdgcn_ds_swizzle:
635 Intrinsic::amdgcn_ds_swizzle);
636 case AMDGPU::BI__builtin_amdgcn_mov_dpp8:
637 case AMDGPU::BI__builtin_amdgcn_mov_dpp:
638 case AMDGPU::BI__builtin_amdgcn_update_dpp: {
642 unsigned ICEArguments = 0;
647 unsigned Size = DataTy->getPrimitiveSizeInBits();
649 llvm::IntegerType::get(
Builder.getContext(), std::max(Size, 32u));
651 CGM.getIntrinsic(BuiltinID == AMDGPU::BI__builtin_amdgcn_mov_dpp8
652 ? Intrinsic::amdgcn_mov_dpp8
653 : Intrinsic::amdgcn_update_dpp,
657 bool InsertOld = BuiltinID == AMDGPU::BI__builtin_amdgcn_mov_dpp;
659 Args.push_back(llvm::PoisonValue::get(
IntTy));
660 for (
unsigned I = 0; I != E->
getNumArgs(); ++I) {
662 if (I < (BuiltinID == AMDGPU::BI__builtin_amdgcn_update_dpp ? 2u : 1u) &&
664 if (!DataTy->isIntegerTy())
666 V, llvm::IntegerType::get(
Builder.getContext(), Size));
670 F->getFunctionType()->getFunctionParamType(I + InsertOld);
671 Args.push_back(
Builder.CreateTruncOrBitCast(
V, ExpTy));
674 if (Size < 32 && !DataTy->isIntegerTy())
676 V, llvm::IntegerType::get(
Builder.getContext(), Size));
677 return Builder.CreateTruncOrBitCast(
V, DataTy);
679 case AMDGPU::BI__builtin_amdgcn_permlane16:
680 case AMDGPU::BI__builtin_amdgcn_permlanex16:
683 BuiltinID == AMDGPU::BI__builtin_amdgcn_permlane16
684 ? Intrinsic::amdgcn_permlane16
685 : Intrinsic::amdgcn_permlanex16);
686 case AMDGPU::BI__builtin_amdgcn_permlane64:
688 Intrinsic::amdgcn_permlane64);
689 case AMDGPU::BI__builtin_amdgcn_readlane:
691 Intrinsic::amdgcn_readlane);
692 case AMDGPU::BI__builtin_amdgcn_wave_shuffle:
694 Intrinsic::amdgcn_wave_shuffle);
695 case AMDGPU::BI__builtin_amdgcn_readfirstlane:
697 Intrinsic::amdgcn_readfirstlane);
698 case AMDGPU::BI__builtin_amdgcn_div_fixup:
699 case AMDGPU::BI__builtin_amdgcn_div_fixupf:
700 case AMDGPU::BI__builtin_amdgcn_div_fixuph:
702 Intrinsic::amdgcn_div_fixup);
703 case AMDGPU::BI__builtin_amdgcn_trig_preop:
704 case AMDGPU::BI__builtin_amdgcn_trig_preopf:
706 case AMDGPU::BI__builtin_amdgcn_rcp:
707 case AMDGPU::BI__builtin_amdgcn_rcpf:
708 case AMDGPU::BI__builtin_amdgcn_rcph:
709 case AMDGPU::BI__builtin_amdgcn_rcp_bf16:
711 case AMDGPU::BI__builtin_amdgcn_sqrt:
712 case AMDGPU::BI__builtin_amdgcn_sqrtf:
713 case AMDGPU::BI__builtin_amdgcn_sqrth:
714 case AMDGPU::BI__builtin_amdgcn_sqrt_bf16:
716 Intrinsic::amdgcn_sqrt);
717 case AMDGPU::BI__builtin_amdgcn_rsq:
718 case AMDGPU::BI__builtin_amdgcn_rsqf:
719 case AMDGPU::BI__builtin_amdgcn_rsqh:
720 case AMDGPU::BI__builtin_amdgcn_rsq_bf16:
722 case AMDGPU::BI__builtin_amdgcn_rsq_clamp:
723 case AMDGPU::BI__builtin_amdgcn_rsq_clampf:
725 Intrinsic::amdgcn_rsq_clamp);
726 case AMDGPU::BI__builtin_amdgcn_sinf:
727 case AMDGPU::BI__builtin_amdgcn_sinh:
728 case AMDGPU::BI__builtin_amdgcn_sin_bf16:
730 case AMDGPU::BI__builtin_amdgcn_cosf:
731 case AMDGPU::BI__builtin_amdgcn_cosh:
732 case AMDGPU::BI__builtin_amdgcn_cos_bf16:
734 case AMDGPU::BI__builtin_amdgcn_dispatch_ptr:
735 return EmitAMDGPUDispatchPtr(*
this, E);
736 case AMDGPU::BI__builtin_amdgcn_logf:
737 case AMDGPU::BI__builtin_amdgcn_log_bf16:
739 case AMDGPU::BI__builtin_amdgcn_exp2f:
740 case AMDGPU::BI__builtin_amdgcn_exp2_bf16:
742 Intrinsic::amdgcn_exp2);
743 case AMDGPU::BI__builtin_amdgcn_log_clampf:
745 Intrinsic::amdgcn_log_clamp);
746 case AMDGPU::BI__builtin_amdgcn_ldexp:
747 case AMDGPU::BI__builtin_amdgcn_ldexpf: {
751 CGM.getIntrinsic(Intrinsic::ldexp, {Src0->getType(), Src1->getType()});
752 return Builder.CreateCall(F, {Src0, Src1});
754 case AMDGPU::BI__builtin_amdgcn_ldexph: {
760 CGM.getIntrinsic(Intrinsic::ldexp, {Src0->getType(),
Int16Ty});
763 case AMDGPU::BI__builtin_amdgcn_frexp_mant:
764 case AMDGPU::BI__builtin_amdgcn_frexp_mantf:
765 case AMDGPU::BI__builtin_amdgcn_frexp_manth:
767 Intrinsic::amdgcn_frexp_mant);
768 case AMDGPU::BI__builtin_amdgcn_frexp_exp:
769 case AMDGPU::BI__builtin_amdgcn_frexp_expf: {
771 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_frexp_exp,
773 return Builder.CreateCall(F, Src0);
775 case AMDGPU::BI__builtin_amdgcn_frexp_exph: {
777 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_frexp_exp,
779 return Builder.CreateCall(F, Src0);
781 case AMDGPU::BI__builtin_amdgcn_fract:
782 case AMDGPU::BI__builtin_amdgcn_fractf:
783 case AMDGPU::BI__builtin_amdgcn_fracth:
785 Intrinsic::amdgcn_fract);
786 case AMDGPU::BI__builtin_amdgcn_lerp:
788 Intrinsic::amdgcn_lerp);
789 case AMDGPU::BI__builtin_amdgcn_ubfe:
791 Intrinsic::amdgcn_ubfe);
792 case AMDGPU::BI__builtin_amdgcn_sbfe:
794 Intrinsic::amdgcn_sbfe);
795 case AMDGPU::BI__builtin_amdgcn_ballot_w32:
796 case AMDGPU::BI__builtin_amdgcn_ballot_w64: {
799 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_ballot, {ResultType});
800 return Builder.CreateCall(F, {Src});
802 case AMDGPU::BI__builtin_amdgcn_inverse_ballot_w32:
803 case AMDGPU::BI__builtin_amdgcn_inverse_ballot_w64: {
806 CGM.getIntrinsic(Intrinsic::amdgcn_inverse_ballot, {Src->getType()});
807 return Builder.CreateCall(F, {Src});
809 case AMDGPU::BI__builtin_amdgcn_tanhf:
810 case AMDGPU::BI__builtin_amdgcn_tanhh:
811 case AMDGPU::BI__builtin_amdgcn_tanh_bf16:
813 Intrinsic::amdgcn_tanh);
814 case AMDGPU::BI__builtin_amdgcn_uicmp:
815 case AMDGPU::BI__builtin_amdgcn_uicmpl:
816 case AMDGPU::BI__builtin_amdgcn_sicmp:
817 case AMDGPU::BI__builtin_amdgcn_sicmpl:
818 case AMDGPU::BI__builtin_amdgcn_fcmp:
819 case AMDGPU::BI__builtin_amdgcn_fcmpf: {
822 CmpInst::Predicate Pred =
static_cast<CmpInst::Predicate
>(
827 Intrinsic::amdgcn_ballot,
828 Builder.CreateCmp(Pred, LHS, RHS));
830 case AMDGPU::BI__builtin_amdgcn_class:
831 case AMDGPU::BI__builtin_amdgcn_classf:
832 case AMDGPU::BI__builtin_amdgcn_classh:
834 case AMDGPU::BI__builtin_amdgcn_fmed3f:
835 case AMDGPU::BI__builtin_amdgcn_fmed3h:
837 Intrinsic::amdgcn_fmed3);
838 case AMDGPU::BI__builtin_amdgcn_ds_append:
839 case AMDGPU::BI__builtin_amdgcn_ds_consume: {
840 Intrinsic::ID Intrin = BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_append ?
841 Intrinsic::amdgcn_ds_append : Intrinsic::amdgcn_ds_consume;
846 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_i32:
847 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_v2i32:
848 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4i16:
849 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4f16:
850 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4bf16:
851 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8i16:
852 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8f16:
853 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8bf16:
854 case AMDGPU::BI__builtin_amdgcn_global_load_tr4_b64_v2i32:
855 case AMDGPU::BI__builtin_amdgcn_global_load_tr8_b64_v2i32:
856 case AMDGPU::BI__builtin_amdgcn_global_load_tr6_b96_v3i32:
857 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8i16:
858 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8f16:
859 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8bf16:
860 case AMDGPU::BI__builtin_amdgcn_ds_load_tr4_b64_v2i32:
861 case AMDGPU::BI__builtin_amdgcn_ds_load_tr8_b64_v2i32:
862 case AMDGPU::BI__builtin_amdgcn_ds_load_tr6_b96_v3i32:
863 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8i16:
864 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8f16:
865 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8bf16:
866 case AMDGPU::BI__builtin_amdgcn_ds_read_tr4_b64_v2i32:
867 case AMDGPU::BI__builtin_amdgcn_ds_read_tr8_b64_v2i32:
868 case AMDGPU::BI__builtin_amdgcn_ds_read_tr6_b96_v3i32:
869 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4f16:
870 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4bf16:
871 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4i16: {
874 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_i32:
875 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_v2i32:
876 case AMDGPU::BI__builtin_amdgcn_global_load_tr8_b64_v2i32:
877 IID = Intrinsic::amdgcn_global_load_tr_b64;
879 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4i16:
880 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4f16:
881 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4bf16:
882 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8i16:
883 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8f16:
884 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8bf16:
885 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8i16:
886 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8f16:
887 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8bf16:
888 IID = Intrinsic::amdgcn_global_load_tr_b128;
890 case AMDGPU::BI__builtin_amdgcn_global_load_tr4_b64_v2i32:
891 IID = Intrinsic::amdgcn_global_load_tr4_b64;
893 case AMDGPU::BI__builtin_amdgcn_global_load_tr6_b96_v3i32:
894 IID = Intrinsic::amdgcn_global_load_tr6_b96;
896 case AMDGPU::BI__builtin_amdgcn_ds_load_tr4_b64_v2i32:
897 IID = Intrinsic::amdgcn_ds_load_tr4_b64;
899 case AMDGPU::BI__builtin_amdgcn_ds_load_tr6_b96_v3i32:
900 IID = Intrinsic::amdgcn_ds_load_tr6_b96;
902 case AMDGPU::BI__builtin_amdgcn_ds_load_tr8_b64_v2i32:
903 IID = Intrinsic::amdgcn_ds_load_tr8_b64;
905 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8i16:
906 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8f16:
907 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8bf16:
908 IID = Intrinsic::amdgcn_ds_load_tr16_b128;
910 case AMDGPU::BI__builtin_amdgcn_ds_read_tr4_b64_v2i32:
911 IID = Intrinsic::amdgcn_ds_read_tr4_b64;
913 case AMDGPU::BI__builtin_amdgcn_ds_read_tr8_b64_v2i32:
914 IID = Intrinsic::amdgcn_ds_read_tr8_b64;
916 case AMDGPU::BI__builtin_amdgcn_ds_read_tr6_b96_v3i32:
917 IID = Intrinsic::amdgcn_ds_read_tr6_b96;
919 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4i16:
920 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4f16:
921 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4bf16:
922 IID = Intrinsic::amdgcn_ds_read_tr16_b64;
927 llvm::Function *F =
CGM.getIntrinsic(IID, {LoadTy});
930 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b32:
931 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b64:
932 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b128:
933 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b32:
934 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b64:
935 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b128: {
939 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b32:
940 IID = Intrinsic::amdgcn_global_load_monitor_b32;
942 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b64:
943 IID = Intrinsic::amdgcn_global_load_monitor_b64;
945 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b128:
946 IID = Intrinsic::amdgcn_global_load_monitor_b128;
948 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b32:
949 IID = Intrinsic::amdgcn_flat_load_monitor_b32;
951 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b64:
952 IID = Intrinsic::amdgcn_flat_load_monitor_b64;
954 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b128:
955 IID = Intrinsic::amdgcn_flat_load_monitor_b128;
966 llvm::Value *ScopeMD =
emitScopeMD(*
this, ScopeExpr->getZExtValue(), AO);
967 llvm::Function *F =
CGM.getIntrinsic(IID, {LoadTy});
968 return Builder.CreateCall(F, {
Addr, AOExpr, ScopeMD});
970 case AMDGPU::BI__builtin_amdgcn_cluster_load_b32:
971 case AMDGPU::BI__builtin_amdgcn_cluster_load_b64:
972 case AMDGPU::BI__builtin_amdgcn_cluster_load_b128: {
975 case AMDGPU::BI__builtin_amdgcn_cluster_load_b32:
976 IID = Intrinsic::amdgcn_cluster_load_b32;
978 case AMDGPU::BI__builtin_amdgcn_cluster_load_b64:
979 IID = Intrinsic::amdgcn_cluster_load_b64;
981 case AMDGPU::BI__builtin_amdgcn_cluster_load_b128:
982 IID = Intrinsic::amdgcn_cluster_load_b128;
986 for (
int i = 0, e = E->
getNumArgs(); i != e; ++i)
989 return Builder.CreateCall(F, {Args});
991 case AMDGPU::BI__builtin_amdgcn_load_to_lds: {
994 Intrinsic::amdgcn_load_to_lds);
996 case AMDGPU::BI__builtin_amdgcn_load_async_to_lds: {
999 *
this, E, Intrinsic::amdgcn_load_async_to_lds);
1001 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_32x4B:
1002 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_32x4B:
1003 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_16x8B:
1004 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_16x8B:
1005 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_8x16B:
1006 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_8x16B: {
1008 switch (BuiltinID) {
1009 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_32x4B:
1010 IID = Intrinsic::amdgcn_cooperative_atomic_load_32x4B;
1012 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_32x4B:
1013 IID = Intrinsic::amdgcn_cooperative_atomic_store_32x4B;
1015 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_16x8B:
1016 IID = Intrinsic::amdgcn_cooperative_atomic_load_16x8B;
1018 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_16x8B:
1019 IID = Intrinsic::amdgcn_cooperative_atomic_store_16x8B;
1021 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_8x16B:
1022 IID = Intrinsic::amdgcn_cooperative_atomic_load_8x16B;
1024 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_8x16B:
1025 IID = Intrinsic::amdgcn_cooperative_atomic_store_8x16B;
1029 LLVMContext &Ctx =
CGM.getLLVMContext();
1032 const unsigned ScopeArg = E->
getNumArgs() - 1;
1033 for (
unsigned i = 0; i != ScopeArg; ++i)
1037 llvm::MDNode *MD = llvm::MDNode::get(Ctx, {llvm::MDString::get(Ctx, Arg)});
1038 Args.push_back(llvm::MetadataAsValue::get(Ctx, MD));
1041 llvm::Function *F =
CGM.getIntrinsic(IID, {Args[0]->getType()});
1042 return Builder.CreateCall(F, {Args});
1044 case AMDGPU::BI__builtin_amdgcn_av_load_b128:
1045 case AMDGPU::BI__builtin_amdgcn_av_store_b128: {
1046 const bool IsStore = BuiltinID == AMDGPU::BI__builtin_amdgcn_av_store_b128;
1050 const unsigned ScopeIdx = E->
getNumArgs() - 1;
1053 Args.push_back(
emitScopeMD(*
this, ScopeExpr->getZExtValue()));
1055 CGM.getIntrinsic(IsStore ? Intrinsic::amdgcn_av_store_b128
1056 : Intrinsic::amdgcn_av_load_b128,
1057 {Args[0]->getType()});
1058 return Builder.CreateCall(F, Args);
1060 case AMDGPU::BI__builtin_amdgcn_get_fpenv: {
1061 Function *F =
CGM.getIntrinsic(Intrinsic::get_fpenv,
1065 case AMDGPU::BI__builtin_amdgcn_set_fpenv: {
1066 Function *F =
CGM.getIntrinsic(Intrinsic::set_fpenv,
1069 return Builder.CreateCall(F, {Env});
1071 case AMDGPU::BI__builtin_amdgcn_processor_is: {
1072 assert(
CGM.getTriple().isSPIRV() &&
1073 "__builtin_amdgcn_processor_is should never reach CodeGen for "
1074 "concrete targets!");
1078 case AMDGPU::BI__builtin_amdgcn_is_invocable: {
1079 assert(
CGM.getTriple().isSPIRV() &&
1080 "__builtin_amdgcn_is_invocable should never reach CodeGen for "
1081 "concrete targets!");
1088 case AMDGPU::BI__builtin_amdgcn_read_exec:
1090 case AMDGPU::BI__builtin_amdgcn_read_exec_lo:
1092 case AMDGPU::BI__builtin_amdgcn_read_exec_hi:
1094 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray:
1095 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_h:
1096 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_l:
1097 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_lh: {
1107 RayOrigin =
Builder.CreateShuffleVector(RayOrigin, RayOrigin,
1110 Builder.CreateShuffleVector(RayDir, RayDir, {0, 1, 2});
1111 RayInverseDir =
Builder.CreateShuffleVector(RayInverseDir, RayInverseDir,
1114 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_image_bvh_intersect_ray,
1115 {NodePtr->getType(), RayDir->getType()});
1116 return Builder.CreateCall(F, {NodePtr, RayExtent, RayOrigin, RayDir,
1117 RayInverseDir, TextureDescr});
1119 case AMDGPU::BI__builtin_amdgcn_image_bvh8_intersect_ray:
1120 case AMDGPU::BI__builtin_amdgcn_image_bvh_dual_intersect_ray: {
1122 switch (BuiltinID) {
1123 case AMDGPU::BI__builtin_amdgcn_image_bvh8_intersect_ray:
1124 IID = Intrinsic::amdgcn_image_bvh8_intersect_ray;
1126 case AMDGPU::BI__builtin_amdgcn_image_bvh_dual_intersect_ray:
1127 IID = Intrinsic::amdgcn_image_bvh_dual_intersect_ray;
1141 llvm::Function *IntrinsicFunc =
CGM.getIntrinsic(IID);
1143 llvm::CallInst *CI =
Builder.CreateCall(
1144 IntrinsicFunc, {NodePtr, RayExtent, InstanceMask, RayOrigin, RayDir,
1145 Offset, TextureDescr});
1147 llvm::Value *RetVData =
Builder.CreateExtractValue(CI, 0);
1148 llvm::Value *RetRayOrigin =
Builder.CreateExtractValue(CI, 1);
1149 llvm::Value *RetRayDir =
Builder.CreateExtractValue(CI, 2);
1151 Builder.CreateStore(RetRayOrigin, RetRayOriginPtr);
1152 Builder.CreateStore(RetRayDir, RetRayDirPtr);
1157 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_rtn:
1158 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push4_pop1_rtn:
1159 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop1_rtn:
1160 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop2_rtn: {
1162 switch (BuiltinID) {
1163 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_rtn:
1164 IID = Intrinsic::amdgcn_ds_bvh_stack_rtn;
1166 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push4_pop1_rtn:
1167 IID = Intrinsic::amdgcn_ds_bvh_stack_push4_pop1_rtn;
1169 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop1_rtn:
1170 IID = Intrinsic::amdgcn_ds_bvh_stack_push8_pop1_rtn;
1172 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop2_rtn:
1173 IID = Intrinsic::amdgcn_ds_bvh_stack_push8_pop2_rtn;
1178 for (
int i = 0, e = E->
getNumArgs(); i != e; ++i)
1186 Value *I0 =
Builder.CreateInsertElement(PoisonValue::get(RetTy), Rtn,
1190 if (A->
getType()->getPrimitiveSizeInBits() <
1191 RetTy->getScalarType()->getPrimitiveSizeInBits())
1192 A =
Builder.CreateZExt(A, RetTy->getScalarType());
1194 return Builder.CreateInsertElement(I0, A, 1);
1196 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f32_i32:
1197 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f16_i32:
1199 *
this, E, Intrinsic::amdgcn_image_load_1d,
false);
1200 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f32_i32:
1201 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f16_i32:
1203 *
this, E, Intrinsic::amdgcn_image_load_1darray,
false);
1204 case AMDGPU::BI__builtin_amdgcn_image_load_2d_f32_i32:
1205 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f32_i32:
1206 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f16_i32:
1208 *
this, E, Intrinsic::amdgcn_image_load_2d,
false);
1209 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_f32_i32:
1210 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f32_i32:
1211 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f16_i32:
1213 *
this, E, Intrinsic::amdgcn_image_load_2darray,
false);
1214 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f32_i32:
1215 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f16_i32:
1217 *
this, E, Intrinsic::amdgcn_image_load_3d,
false);
1218 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f32_i32:
1219 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f16_i32:
1221 *
this, E, Intrinsic::amdgcn_image_load_cube,
false);
1222 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f32_i32:
1223 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f16_i32:
1225 *
this, E, Intrinsic::amdgcn_image_load_mip_1d,
false);
1226 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f32_i32:
1227 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f16_i32:
1229 *
this, E, Intrinsic::amdgcn_image_load_mip_1darray,
false);
1230 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_f32_i32:
1231 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f32_i32:
1232 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f16_i32:
1234 *
this, E, Intrinsic::amdgcn_image_load_mip_2d,
false);
1235 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_f32_i32:
1236 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f32_i32:
1237 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f16_i32:
1239 *
this, E, Intrinsic::amdgcn_image_load_mip_2darray,
false);
1240 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f32_i32:
1241 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f16_i32:
1243 *
this, E, Intrinsic::amdgcn_image_load_mip_3d,
false);
1244 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f32_i32:
1245 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f16_i32:
1247 *
this, E, Intrinsic::amdgcn_image_load_mip_cube,
false);
1248 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f32_i32:
1249 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f16_i32:
1251 *
this, E, Intrinsic::amdgcn_image_store_1d,
true);
1252 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f32_i32:
1253 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f16_i32:
1255 *
this, E, Intrinsic::amdgcn_image_store_1darray,
true);
1256 case AMDGPU::BI__builtin_amdgcn_image_store_2d_f32_i32:
1257 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f32_i32:
1258 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f16_i32:
1260 *
this, E, Intrinsic::amdgcn_image_store_2d,
true);
1261 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_f32_i32:
1262 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f32_i32:
1263 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f16_i32:
1265 *
this, E, Intrinsic::amdgcn_image_store_2darray,
true);
1266 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f32_i32:
1267 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f16_i32:
1269 *
this, E, Intrinsic::amdgcn_image_store_3d,
true);
1270 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f32_i32:
1271 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f16_i32:
1273 *
this, E, Intrinsic::amdgcn_image_store_cube,
true);
1274 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f32_i32:
1275 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f16_i32:
1277 *
this, E, Intrinsic::amdgcn_image_store_mip_1d,
true);
1278 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f32_i32:
1279 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f16_i32:
1281 *
this, E, Intrinsic::amdgcn_image_store_mip_1darray,
true);
1282 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_f32_i32:
1283 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f32_i32:
1284 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f16_i32:
1286 *
this, E, Intrinsic::amdgcn_image_store_mip_2d,
true);
1287 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_f32_i32:
1288 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f32_i32:
1289 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f16_i32:
1291 *
this, E, Intrinsic::amdgcn_image_store_mip_2darray,
true);
1292 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f32_i32:
1293 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f16_i32:
1295 *
this, E, Intrinsic::amdgcn_image_store_mip_3d,
true);
1296 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f32_i32:
1297 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f16_i32:
1299 *
this, E, Intrinsic::amdgcn_image_store_mip_cube,
true);
1300 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f32_f32:
1301 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f16_f32:
1303 *
this, E, Intrinsic::amdgcn_image_sample_1d,
false);
1304 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f32_f32:
1305 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f16_f32:
1307 *
this, E, Intrinsic::amdgcn_image_sample_1darray,
false);
1308 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_f32_f32:
1309 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f32_f32:
1310 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f16_f32:
1312 *
this, E, Intrinsic::amdgcn_image_sample_2d,
false);
1313 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_f32_f32:
1314 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f32_f32:
1315 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f16_f32:
1317 *
this, E, Intrinsic::amdgcn_image_sample_2darray,
false);
1318 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f32_f32:
1319 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f16_f32:
1321 *
this, E, Intrinsic::amdgcn_image_sample_3d,
false);
1322 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f32_f32:
1323 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f16_f32:
1325 *
this, E, Intrinsic::amdgcn_image_sample_cube,
false);
1326 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1d_v4f32_f32:
1327 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1d_v4f16_f32:
1329 *
this, E, Intrinsic::amdgcn_image_sample_lz_1d,
false);
1330 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1d_v4f32_f32:
1331 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1d_v4f16_f32:
1333 *
this, E, Intrinsic::amdgcn_image_sample_l_1d,
false);
1334 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1d_v4f32_f32:
1335 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1d_v4f16_f32:
1337 *
this, E, Intrinsic::amdgcn_image_sample_d_1d,
false);
1338 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_v4f32_f32:
1339 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_v4f16_f32:
1340 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_f32_f32:
1342 *
this, E, Intrinsic::amdgcn_image_sample_lz_2d,
false);
1343 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_v4f32_f32:
1344 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_v4f16_f32:
1345 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_f32_f32:
1347 *
this, E, Intrinsic::amdgcn_image_sample_l_2d,
false);
1348 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_v4f32_f32:
1349 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_v4f16_f32:
1350 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_f32_f32:
1352 *
this, E, Intrinsic::amdgcn_image_sample_d_2d,
false);
1353 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_3d_v4f32_f32:
1354 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_3d_v4f16_f32:
1356 *
this, E, Intrinsic::amdgcn_image_sample_lz_3d,
false);
1357 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_3d_v4f32_f32:
1358 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_3d_v4f16_f32:
1360 *
this, E, Intrinsic::amdgcn_image_sample_l_3d,
false);
1361 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_3d_v4f32_f32:
1362 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_3d_v4f16_f32:
1364 *
this, E, Intrinsic::amdgcn_image_sample_d_3d,
false);
1365 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_cube_v4f32_f32:
1366 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_cube_v4f16_f32:
1368 *
this, E, Intrinsic::amdgcn_image_sample_lz_cube,
false);
1369 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_cube_v4f32_f32:
1370 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_cube_v4f16_f32:
1372 *
this, E, Intrinsic::amdgcn_image_sample_l_cube,
false);
1373 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1darray_v4f32_f32:
1374 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1darray_v4f16_f32:
1376 *
this, E, Intrinsic::amdgcn_image_sample_lz_1darray,
false);
1377 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1darray_v4f32_f32:
1378 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1darray_v4f16_f32:
1380 *
this, E, Intrinsic::amdgcn_image_sample_l_1darray,
false);
1381 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1darray_v4f32_f32:
1382 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1darray_v4f16_f32:
1384 *
this, E, Intrinsic::amdgcn_image_sample_d_1darray,
false);
1385 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_v4f32_f32:
1386 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_v4f16_f32:
1387 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_f32_f32:
1389 *
this, E, Intrinsic::amdgcn_image_sample_lz_2darray,
false);
1390 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_v4f32_f32:
1391 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_v4f16_f32:
1392 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_f32_f32:
1394 *
this, E, Intrinsic::amdgcn_image_sample_l_2darray,
false);
1395 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_v4f32_f32:
1396 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_v4f16_f32:
1397 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_f32_f32:
1399 *
this, E, Intrinsic::amdgcn_image_sample_d_2darray,
false);
1400 case clang::AMDGPU::BI__builtin_amdgcn_image_gather4_lz_2d_v4f32_f32:
1402 *
this, E, Intrinsic::amdgcn_image_gather4_lz_2d,
false);
1403 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_16x16x128_f8f6f4:
1404 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_32x32x64_f8f6f4: {
1405 llvm::FixedVectorType *VT = FixedVectorType::get(
Builder.getInt32Ty(), 8);
1407 BuiltinID == AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_32x32x64_f8f6f4
1408 ? Intrinsic::amdgcn_mfma_scale_f32_32x32x64_f8f6f4
1409 : Intrinsic::amdgcn_mfma_scale_f32_16x16x128_f8f6f4,
1413 for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++I)
1415 return Builder.CreateCall(F, Args);
1417 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32:
1418 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w32:
1419 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64:
1420 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w64:
1421 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32:
1422 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w32:
1423 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64:
1424 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w64:
1425 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32:
1426 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64:
1427 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32:
1428 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64:
1429 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32:
1430 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64:
1431 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32:
1432 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64:
1433 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32_gfx12:
1434 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64_gfx12:
1435 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32_gfx12:
1436 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64_gfx12:
1437 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32_gfx12:
1438 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64_gfx12:
1439 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32_gfx12:
1440 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64_gfx12:
1441 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32_gfx12:
1442 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64_gfx12:
1443 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32_gfx12:
1444 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64_gfx12:
1445 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w32_gfx12:
1446 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w64_gfx12:
1447 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w32_gfx12:
1448 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w64_gfx12:
1449 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w32_gfx12:
1450 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w64_gfx12:
1451 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w32_gfx12:
1452 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w64_gfx12:
1453 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w32_gfx12:
1454 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w64_gfx12:
1455 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w32:
1456 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w64:
1457 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w32:
1458 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w64:
1459 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w32:
1460 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w64:
1461 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w32:
1462 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w64:
1463 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w32:
1464 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w64:
1465 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w32:
1466 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w64:
1467 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w32:
1468 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w64:
1469 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w32:
1470 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w64:
1471 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w32:
1472 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w64:
1473 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w32:
1474 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w64:
1475 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w32:
1476 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w64:
1478 case AMDGPU::BI__builtin_amdgcn_wmma_f64_16x16x4_f64:
1479 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x4_f32:
1480 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_bf16:
1481 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_f16:
1482 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x32_f16:
1483 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x32_bf16:
1484 case AMDGPU::BI__builtin_amdgcn_wmma_bf16f32_16x16x32_bf16:
1485 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_fp8:
1486 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_bf8:
1487 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_fp8:
1488 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_bf8:
1489 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_fp8:
1490 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_bf8:
1491 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_fp8:
1492 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_bf8:
1493 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_fp8:
1494 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_bf8:
1495 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_fp8:
1496 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_bf8:
1497 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_fp8:
1498 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_bf8:
1499 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_fp8:
1500 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_bf8:
1501 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8:
1502 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_f8f6f4:
1503 case AMDGPU::BI__builtin_amdgcn_wmma_f32_32x16x128_f4:
1504 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_16x16x128_f8f6f4:
1505 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4:
1506 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_32x16x128_f4:
1507 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_32x16x128_f4:
1508 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_f16:
1509 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_bf16:
1510 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x64_f16:
1511 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x64_bf16:
1512 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16f32_16x16x64_bf16:
1513 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_fp8:
1514 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_bf8:
1515 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_fp8:
1516 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_bf8:
1517 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_fp8:
1518 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_bf8:
1519 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_fp8:
1520 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_bf8:
1521 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8: {
1534 bool AppendFalseForOpselArg =
false;
1535 unsigned BuiltinWMMAOp;
1537 bool NeedReturnType =
false;
1539 bool RemoveABNeg =
false;
1541 switch (BuiltinID) {
1542 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32:
1543 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64:
1544 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32_gfx12:
1545 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64_gfx12:
1546 ArgsForMatchingMatrixTypes = {2, 0};
1547 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_f16;
1549 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32:
1550 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64:
1551 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32_gfx12:
1552 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64_gfx12:
1553 ArgsForMatchingMatrixTypes = {2, 0};
1554 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_bf16;
1556 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32_gfx12:
1557 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64_gfx12:
1558 AppendFalseForOpselArg =
true;
1560 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32:
1561 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64:
1562 ArgsForMatchingMatrixTypes = {2, 0};
1563 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x16_f16;
1565 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32_gfx12:
1566 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64_gfx12:
1567 AppendFalseForOpselArg =
true;
1569 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32:
1570 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64:
1571 ArgsForMatchingMatrixTypes = {2, 0};
1572 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16_16x16x16_bf16;
1574 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w32:
1575 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w64:
1576 ArgsForMatchingMatrixTypes = {2, 0};
1577 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x16_f16_tied;
1579 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w32:
1580 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w64:
1581 ArgsForMatchingMatrixTypes = {2, 0};
1582 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16_16x16x16_bf16_tied;
1584 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32:
1585 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64:
1586 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32_gfx12:
1587 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64_gfx12:
1588 ArgsForMatchingMatrixTypes = {4, 1};
1589 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x16_iu8;
1591 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32:
1592 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64:
1593 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32_gfx12:
1594 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64_gfx12:
1595 ArgsForMatchingMatrixTypes = {4, 1};
1596 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x16_iu4;
1598 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w32_gfx12:
1599 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w64_gfx12:
1600 ArgsForMatchingMatrixTypes = {2, 0};
1601 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_fp8_fp8;
1603 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w32_gfx12:
1604 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w64_gfx12:
1605 ArgsForMatchingMatrixTypes = {2, 0};
1606 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_fp8_bf8;
1608 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w32_gfx12:
1609 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w64_gfx12:
1610 ArgsForMatchingMatrixTypes = {2, 0};
1611 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_bf8_fp8;
1613 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w32_gfx12:
1614 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w64_gfx12:
1615 ArgsForMatchingMatrixTypes = {2, 0};
1616 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_bf8_bf8;
1618 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w32_gfx12:
1619 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w64_gfx12:
1620 ArgsForMatchingMatrixTypes = {4, 1};
1621 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x32_iu4;
1623 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w32:
1624 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w64:
1625 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1626 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_f16;
1628 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w32:
1629 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w64:
1630 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1631 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_bf16;
1633 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w32:
1634 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w64:
1635 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1636 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x32_f16;
1638 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w32:
1639 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w64:
1640 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1641 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_bf16_16x16x32_bf16;
1643 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w32:
1644 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w64:
1645 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1646 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x32_iu8;
1648 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w32:
1649 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w64:
1650 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1651 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x32_iu4;
1653 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w32:
1654 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w64:
1655 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1656 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x64_iu4;
1658 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w32:
1659 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w64:
1660 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1661 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_fp8_fp8;
1663 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w32:
1664 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w64:
1665 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1666 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_fp8_bf8;
1668 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w32:
1669 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w64:
1670 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1671 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_bf8_fp8;
1673 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w32:
1674 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w64:
1675 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1676 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_bf8_bf8;
1679 case AMDGPU::BI__builtin_amdgcn_wmma_f64_16x16x4_f64:
1680 ArgsForMatchingMatrixTypes = {5, 1};
1681 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f64_16x16x4_f64;
1683 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x4_f32:
1684 ArgsForMatchingMatrixTypes = {3, 0};
1685 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x4_f32;
1688 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_bf16:
1689 ArgsForMatchingMatrixTypes = {3, 0};
1690 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x32_bf16;
1693 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_f16:
1694 ArgsForMatchingMatrixTypes = {3, 0};
1695 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x32_f16;
1698 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x32_f16:
1699 ArgsForMatchingMatrixTypes = {3, 0};
1700 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x32_f16;
1703 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x32_bf16:
1704 ArgsForMatchingMatrixTypes = {3, 0};
1705 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16_16x16x32_bf16;
1708 case AMDGPU::BI__builtin_amdgcn_wmma_bf16f32_16x16x32_bf16:
1709 NeedReturnType =
true;
1710 ArgsForMatchingMatrixTypes = {0, 3};
1711 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16f32_16x16x32_bf16;
1714 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_fp8:
1715 ArgsForMatchingMatrixTypes = {3, 0};
1716 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_fp8_fp8;
1718 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_bf8:
1719 ArgsForMatchingMatrixTypes = {3, 0};
1720 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_fp8_bf8;
1722 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_fp8:
1723 ArgsForMatchingMatrixTypes = {3, 0};
1724 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_bf8_fp8;
1726 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_bf8:
1727 ArgsForMatchingMatrixTypes = {3, 0};
1728 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_bf8_bf8;
1730 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_fp8:
1731 ArgsForMatchingMatrixTypes = {3, 0};
1732 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_fp8_fp8;
1734 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_bf8:
1735 ArgsForMatchingMatrixTypes = {3, 0};
1736 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_fp8_bf8;
1738 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_fp8:
1739 ArgsForMatchingMatrixTypes = {3, 0};
1740 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_bf8_fp8;
1742 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_bf8:
1743 ArgsForMatchingMatrixTypes = {3, 0};
1744 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_bf8_bf8;
1746 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_fp8:
1747 ArgsForMatchingMatrixTypes = {3, 0};
1748 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_fp8_fp8;
1750 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_bf8:
1751 ArgsForMatchingMatrixTypes = {3, 0};
1752 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_fp8_bf8;
1754 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_fp8:
1755 ArgsForMatchingMatrixTypes = {3, 0};
1756 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_bf8_fp8;
1758 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_bf8:
1759 ArgsForMatchingMatrixTypes = {3, 0};
1760 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_bf8_bf8;
1762 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_fp8:
1763 ArgsForMatchingMatrixTypes = {3, 0};
1764 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_fp8_fp8;
1766 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_bf8:
1767 ArgsForMatchingMatrixTypes = {3, 0};
1768 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_fp8_bf8;
1770 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_fp8:
1771 ArgsForMatchingMatrixTypes = {3, 0};
1772 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_bf8_fp8;
1774 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_bf8:
1775 ArgsForMatchingMatrixTypes = {3, 0};
1776 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_bf8_bf8;
1778 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8:
1779 ArgsForMatchingMatrixTypes = {4, 1};
1780 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x64_iu8;
1782 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_f8f6f4:
1783 ArgsForMatchingMatrixTypes = {5, 1, 3};
1784 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_f8f6f4;
1786 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_16x16x128_f8f6f4:
1787 ArgsForMatchingMatrixTypes = {5, 1, 3};
1788 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale_f32_16x16x128_f8f6f4;
1790 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4:
1791 ArgsForMatchingMatrixTypes = {5, 1, 3};
1792 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale16_f32_16x16x128_f8f6f4;
1794 case AMDGPU::BI__builtin_amdgcn_wmma_f32_32x16x128_f4:
1795 ArgsForMatchingMatrixTypes = {3, 0, 1};
1796 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_32x16x128_f4;
1798 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_32x16x128_f4:
1799 ArgsForMatchingMatrixTypes = {3, 0, 1};
1800 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale_f32_32x16x128_f4;
1802 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_32x16x128_f4:
1803 ArgsForMatchingMatrixTypes = {3, 0, 1};
1804 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale16_f32_32x16x128_f4;
1806 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_f16:
1807 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1808 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x64_f16;
1810 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_bf16:
1811 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1812 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x64_bf16;
1814 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x64_f16:
1815 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1816 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x64_f16;
1818 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x64_bf16:
1819 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1820 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_bf16_16x16x64_bf16;
1822 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16f32_16x16x64_bf16:
1823 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1824 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_bf16f32_16x16x64_bf16;
1826 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_fp8:
1827 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1828 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_fp8_fp8;
1830 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_bf8:
1831 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1832 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_fp8_bf8;
1834 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_fp8:
1835 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1836 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_bf8_fp8;
1838 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_bf8:
1839 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1840 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_bf8_bf8;
1842 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_fp8:
1843 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1844 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_fp8_fp8;
1846 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_bf8:
1847 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1848 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_fp8_bf8;
1850 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_fp8:
1851 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1852 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_bf8_fp8;
1854 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_bf8:
1855 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1856 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_bf8_bf8;
1858 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8:
1859 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1860 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x128_iu8;
1865 for (
int i = 0, e = E->
getNumArgs(); i != e; ++i) {
1867 if (RemoveABNeg && (i == 0 || i == 2))
1871 if (AppendFalseForOpselArg)
1872 Args.push_back(
Builder.getFalse());
1875 if (BuiltinID == AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8) {
1876 if (Args.size() == 7)
1877 Args.push_back(
Builder.getFalse());
1878 assert(Args.size() == 8 &&
"Expected 8 arguments");
1879 Args[7] =
Builder.CreateZExtOrTrunc(Args[7],
Builder.getInt1Ty());
1880 }
else if (BuiltinID ==
1881 AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8) {
1882 if (Args.size() == 8)
1883 Args.push_back(
Builder.getFalse());
1884 assert(Args.size() == 9 &&
"Expected 9 arguments");
1885 Args[8] =
Builder.CreateZExtOrTrunc(Args[8],
Builder.getInt1Ty());
1891 for (
auto ArgIdx : ArgsForMatchingMatrixTypes)
1892 ArgTypes.push_back(Args[ArgIdx]->
getType());
1894 Function *F =
CGM.getIntrinsic(BuiltinWMMAOp, ArgTypes);
1895 return Builder.CreateCall(F, Args);
1898 case AMDGPU::BI__builtin_amdgcn_workgroup_size_x:
1899 return EmitAMDGPUWorkGroupSize(*
this, 0);
1900 case AMDGPU::BI__builtin_amdgcn_workgroup_size_y:
1901 return EmitAMDGPUWorkGroupSize(*
this, 1);
1902 case AMDGPU::BI__builtin_amdgcn_workgroup_size_z:
1903 return EmitAMDGPUWorkGroupSize(*
this, 2);
1906 case AMDGPU::BI__builtin_amdgcn_grid_size_x:
1907 return EmitAMDGPUGridSize(*
this, 0);
1908 case AMDGPU::BI__builtin_amdgcn_grid_size_y:
1909 return EmitAMDGPUGridSize(*
this, 1);
1910 case AMDGPU::BI__builtin_amdgcn_grid_size_z:
1911 return EmitAMDGPUGridSize(*
this, 2);
1914 case AMDGPU::BI__builtin_r600_recipsqrt_ieee:
1915 case AMDGPU::BI__builtin_r600_recipsqrt_ieeef:
1917 Intrinsic::r600_recipsqrt_ieee);
1918 case AMDGPU::BI__builtin_amdgcn_alignbit: {
1922 Function *F =
CGM.getIntrinsic(Intrinsic::fshr, Src0->getType());
1923 return Builder.CreateCall(F, { Src0, Src1, Src2 });
1925 case AMDGPU::BI__builtin_amdgcn_fence: {
1928 FenceInst *Fence =
Builder.CreateFence(AO, SSID);
1934 case AMDGPU::BI__builtin_amdgcn_atomic_inc32:
1935 case AMDGPU::BI__builtin_amdgcn_atomic_inc64:
1936 case AMDGPU::BI__builtin_amdgcn_atomic_dec32:
1937 case AMDGPU::BI__builtin_amdgcn_atomic_dec64:
1938 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f64:
1939 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f32:
1940 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2f16:
1941 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16:
1942 case AMDGPU::BI__builtin_amdgcn_ds_faddf:
1943 case AMDGPU::BI__builtin_amdgcn_ds_fminf:
1944 case AMDGPU::BI__builtin_amdgcn_ds_fmaxf:
1945 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f32:
1946 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f64:
1947 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2f16:
1948 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2f16:
1949 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f32:
1950 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f64:
1951 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16:
1952 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16:
1953 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmin_f64:
1954 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmax_f64:
1955 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmin_f64:
1956 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmax_f64: {
1957 llvm::AtomicRMWInst::BinOp BinOp;
1958 switch (BuiltinID) {
1959 case AMDGPU::BI__builtin_amdgcn_atomic_inc32:
1960 case AMDGPU::BI__builtin_amdgcn_atomic_inc64:
1961 BinOp = llvm::AtomicRMWInst::UIncWrap;
1963 case AMDGPU::BI__builtin_amdgcn_atomic_dec32:
1964 case AMDGPU::BI__builtin_amdgcn_atomic_dec64:
1965 BinOp = llvm::AtomicRMWInst::UDecWrap;
1967 case AMDGPU::BI__builtin_amdgcn_ds_faddf:
1968 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f64:
1969 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f32:
1970 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2f16:
1971 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16:
1972 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f32:
1973 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f64:
1974 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2f16:
1975 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2f16:
1976 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f32:
1977 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f64:
1978 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16:
1979 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16:
1980 BinOp = llvm::AtomicRMWInst::FAdd;
1982 case AMDGPU::BI__builtin_amdgcn_ds_fminf:
1983 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmin_f64:
1984 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmin_f64:
1985 BinOp = llvm::AtomicRMWInst::FMin;
1987 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmax_f64:
1988 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmax_f64:
1989 case AMDGPU::BI__builtin_amdgcn_ds_fmaxf:
1990 BinOp = llvm::AtomicRMWInst::FMax;
1996 llvm::Type *OrigTy = Val->
getType();
2001 if (BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_faddf ||
2002 BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_fminf ||
2003 BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_fmaxf) {
2025 getLLVMContext().getOrInsertSyncScopeID(*llvm::getAtomicScopeIRString(
2027 AO = AtomicOrdering::Monotonic;
2030 if (BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16 ||
2031 BuiltinID == AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16 ||
2032 BuiltinID == AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16) {
2033 llvm::Type *V2BF16Ty = FixedVectorType::get(
2034 llvm::Type::getBFloatTy(
Builder.getContext()), 2);
2035 Val =
Builder.CreateBitCast(Val, V2BF16Ty);
2039 llvm::AtomicRMWInst *RMW =
2040 Builder.CreateAtomicRMW(BinOp, Ptr, Val, AO, SSID);
2042 RMW->setVolatile(
true);
2045 unsigned AddrSpace = Ptr.
getType()->getAddressSpace();
2046 if (AddrSpace != llvm::AMDGPUAS::LOCAL_ADDRESS) {
2050 RMW->setMetadata(
"amdgpu.no.fine.grained.memory", EmptyMD);
2054 if (BinOp == llvm::AtomicRMWInst::FAdd && Val->
getType()->isFloatTy())
2055 RMW->setMetadata(
"amdgpu.ignore.denormal.mode", EmptyMD);
2058 return Builder.CreateBitCast(RMW, OrigTy);
2060 case AMDGPU::BI__builtin_amdgcn_s_sendmsg_rtn:
2061 case AMDGPU::BI__builtin_amdgcn_s_sendmsg_rtnl: {
2066 CGM.getIntrinsic(Intrinsic::amdgcn_s_sendmsg_rtn, {ResultType});
2067 return Builder.CreateCall(F, {Arg});
2069 case AMDGPU::BI__builtin_amdgcn_permlane16_swap:
2070 case AMDGPU::BI__builtin_amdgcn_permlane32_swap: {
2078 CGM.getIntrinsic(BuiltinID == AMDGPU::BI__builtin_amdgcn_permlane16_swap
2079 ? Intrinsic::amdgcn_permlane16_swap
2080 : Intrinsic::amdgcn_permlane32_swap);
2081 llvm::CallInst *
Call =
2082 Builder.CreateCall(F, {VDstOld, VSrcOld, FI, BoundCtrl});
2084 llvm::Value *Elt0 =
Builder.CreateExtractValue(
Call, 0);
2085 llvm::Value *Elt1 =
Builder.CreateExtractValue(
Call, 1);
2089 llvm::Value *Insert0 =
Builder.CreateInsertElement(
2090 llvm::PoisonValue::get(ResultType), Elt0, UINT64_C(0));
2091 llvm::Value *AsVector =
2092 Builder.CreateInsertElement(Insert0, Elt1, UINT64_C(1));
2095 case AMDGPU::BI__builtin_amdgcn_bitop3_b32:
2096 case AMDGPU::BI__builtin_amdgcn_bitop3_b16:
2098 Intrinsic::amdgcn_bitop3);
2099 case AMDGPU::BI__builtin_amdgcn_make_buffer_rsrc: {
2104 for (
unsigned I = 0; I < 4; ++I)
2106 llvm::PointerType *RetTy = llvm::PointerType::get(
2107 Builder.getContext(), llvm::AMDGPUAS::BUFFER_RESOURCE);
2108 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_make_buffer_rsrc,
2109 {RetTy, Args[0]->getType()});
2110 return Builder.CreateCall(F, Args);
2112 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b8:
2113 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b16:
2114 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b32:
2115 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b64:
2116 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b96:
2117 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b128:
2119 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_store);
2120 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_format_v4f32:
2121 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_format_v4f16:
2123 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_store_format);
2124 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b8:
2125 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b16:
2126 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b32:
2127 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b64:
2128 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b96:
2129 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b128: {
2130 llvm::Type *RetTy =
nullptr;
2131 switch (BuiltinID) {
2132 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b8:
2135 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b16:
2138 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b32:
2141 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b64:
2142 RetTy = llvm::FixedVectorType::get(
Int32Ty, 2);
2144 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b96:
2145 RetTy = llvm::FixedVectorType::get(
Int32Ty, 3);
2147 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b128:
2148 RetTy = llvm::FixedVectorType::get(
Int32Ty, 4);
2152 CGM.getIntrinsic(Intrinsic::amdgcn_raw_ptr_buffer_load, RetTy);
2157 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_format_v4f32:
2158 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_format_v4f16: {
2161 CGM.getIntrinsic(Intrinsic::amdgcn_raw_ptr_buffer_load_format, {RetTy});
2167 case AMDGPU::BI__builtin_amdgcn_struct_buffer_store_format_v4f32:
2168 case AMDGPU::BI__builtin_amdgcn_struct_buffer_store_format_v4f16:
2170 *
this, E, Intrinsic::amdgcn_struct_ptr_buffer_store_format);
2171 case AMDGPU::BI__builtin_amdgcn_struct_buffer_load_format_v4f32:
2172 case AMDGPU::BI__builtin_amdgcn_struct_buffer_load_format_v4f16: {
2175 Intrinsic::amdgcn_struct_ptr_buffer_load_format, {RetTy});
2182 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_add_i32:
2184 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_add);
2185 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_f32:
2186 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_v2f16:
2188 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_fadd);
2189 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmin_f32:
2190 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmin_f64:
2192 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_fmin);
2193 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmax_f32:
2194 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmax_f64:
2196 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_fmax);
2197 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_i32:
2198 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v2i32:
2199 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v3i32:
2200 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v4i32:
2201 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v8i32:
2202 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v16i32:
2203 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_f32:
2204 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v2f32:
2205 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v3f32:
2206 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v4f32:
2207 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v8f32:
2208 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v16f32:
2209 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_i8:
2210 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_u8:
2211 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_i16:
2212 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_u16:
2213 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v2i8:
2214 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v3i8:
2215 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v4i8:
2216 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_f16:
2217 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v2f16:
2218 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v3f16:
2219 case AMDGPU::BI__builtin_amdgcn_s_buffer_load_v4f16:
2220 return emitAMDGPUSBufferLoadBuiltin(*
this, E);
2221 case AMDGPU::BI__builtin_amdgcn_s_prefetch_data:
2223 *
this, E, Intrinsic::amdgcn_s_prefetch_data);
2224 case AMDGPU::BI__builtin_amdgcn_s_prefetch_inst:
2226 *
this, E, Intrinsic::amdgcn_s_prefetch_inst);
2227 case Builtin::BIlogbf:
2228 case Builtin::BI__builtin_logbf: {
2232 CallInst *FrExp =
Builder.CreateCall(FrExpFunc, Src0);
2235 Exp, ConstantInt::getSigned(Exp->
getType(), -1),
"",
false,
true);
2240 Fabs, ConstantFP::getInfinity(
Builder.getFloatTy()));
2241 Value *Sel1 =
Builder.CreateSelect(FCmpONE, SIToFP, Fabs);
2243 Builder.CreateFCmpOEQ(Src0, ConstantFP::getZero(
Builder.getFloatTy()));
2246 ConstantFP::getInfinity(
Builder.getFloatTy(),
true), Sel1);
2249 case Builtin::BIlogb:
2250 case Builtin::BI__builtin_logb: {
2254 CallInst *FrExp =
Builder.CreateCall(FrExpFunc, Src0);
2257 Exp, ConstantInt::getSigned(Exp->
getType(), -1),
"",
false,
true);
2262 Fabs, ConstantFP::getInfinity(
Builder.getDoubleTy()));
2263 Value *Sel1 =
Builder.CreateSelect(FCmpONE, SIToFP, Fabs);
2265 Builder.CreateFCmpOEQ(Src0, ConstantFP::getZero(
Builder.getDoubleTy()));
2268 ConstantFP::getInfinity(
Builder.getDoubleTy(),
true),
2272 case Builtin::BIscalbnf:
2273 case Builtin::BI__builtin_scalbnf:
2274 case Builtin::BIscalbn:
2275 case Builtin::BI__builtin_scalbn:
2277 *
this, E, Intrinsic::ldexp, Intrinsic::experimental_constrained_ldexp);
2278 case AMDGPU::BI__builtin_amdgcn_permlane_bcast:
2280 *
this, E, Intrinsic::amdgcn_permlane_bcast);
2281 case AMDGPU::BI__builtin_amdgcn_permlane_up:
2283 Intrinsic::amdgcn_permlane_up);
2284 case AMDGPU::BI__builtin_amdgcn_permlane_down:
2286 Intrinsic::amdgcn_permlane_down);
2287 case AMDGPU::BI__builtin_amdgcn_permlane_xor:
2289 Intrinsic::amdgcn_permlane_xor);