520 llvm::AtomicOrdering AO = llvm::AtomicOrdering::SequentiallyConsistent;
521 llvm::SyncScope::ID SSID;
523 case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u32:
524 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fadd_f32:
525 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fadd_f64:
526 case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u32:
527 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fsub_f32:
528 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fsub_f64:
529 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i32:
530 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u32:
531 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmin_f32:
532 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmin_f64:
533 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i32:
534 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u32:
535 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmax_f32:
536 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmax_f64:
537 case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b32:
538 case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b32:
539 case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b32:
540 case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u64:
541 case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u64:
542 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i64:
543 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u64:
544 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i64:
545 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u64:
546 case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b64:
547 case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b64:
548 case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b64: {
555 case AMDGPU::BI__builtin_amdgcn_div_scale:
556 case AMDGPU::BI__builtin_amdgcn_div_scalef: {
566 llvm::Function *Callee =
CGM.getIntrinsic(Intrinsic::amdgcn_div_scale,
569 llvm::Value *Tmp =
Builder.CreateCall(Callee, {
X, Y, Z});
572 llvm::Value *Flag =
Builder.CreateExtractValue(Tmp, 1);
576 llvm::Value *FlagExt =
Builder.CreateZExt(Flag, RealFlagType);
577 Builder.CreateStore(FlagExt, FlagOutPtr);
580 case AMDGPU::BI__builtin_amdgcn_div_fmas:
581 case AMDGPU::BI__builtin_amdgcn_div_fmasf: {
587 llvm::Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_div_fmas,
589 llvm::Value *Src3ToBool =
Builder.CreateIsNotNull(Src3);
590 return Builder.CreateCall(F, {Src0, Src1, Src2, Src3ToBool});
593 case AMDGPU::BI__builtin_amdgcn_ds_swizzle:
595 Intrinsic::amdgcn_ds_swizzle);
596 case AMDGPU::BI__builtin_amdgcn_mov_dpp8:
597 case AMDGPU::BI__builtin_amdgcn_mov_dpp:
598 case AMDGPU::BI__builtin_amdgcn_update_dpp: {
602 unsigned ICEArguments = 0;
607 unsigned Size = DataTy->getPrimitiveSizeInBits();
609 llvm::IntegerType::get(
Builder.getContext(), std::max(Size, 32u));
611 CGM.getIntrinsic(BuiltinID == AMDGPU::BI__builtin_amdgcn_mov_dpp8
612 ? Intrinsic::amdgcn_mov_dpp8
613 : Intrinsic::amdgcn_update_dpp,
617 bool InsertOld = BuiltinID == AMDGPU::BI__builtin_amdgcn_mov_dpp;
619 Args.push_back(llvm::PoisonValue::get(
IntTy));
620 for (
unsigned I = 0; I != E->
getNumArgs(); ++I) {
622 if (I < (BuiltinID == AMDGPU::BI__builtin_amdgcn_update_dpp ? 2u : 1u) &&
624 if (!DataTy->isIntegerTy())
626 V, llvm::IntegerType::get(
Builder.getContext(), Size));
630 F->getFunctionType()->getFunctionParamType(I + InsertOld);
631 Args.push_back(
Builder.CreateTruncOrBitCast(
V, ExpTy));
634 if (Size < 32 && !DataTy->isIntegerTy())
636 V, llvm::IntegerType::get(
Builder.getContext(), Size));
637 return Builder.CreateTruncOrBitCast(
V, DataTy);
639 case AMDGPU::BI__builtin_amdgcn_permlane16:
640 case AMDGPU::BI__builtin_amdgcn_permlanex16:
643 BuiltinID == AMDGPU::BI__builtin_amdgcn_permlane16
644 ? Intrinsic::amdgcn_permlane16
645 : Intrinsic::amdgcn_permlanex16);
646 case AMDGPU::BI__builtin_amdgcn_permlane64:
648 Intrinsic::amdgcn_permlane64);
649 case AMDGPU::BI__builtin_amdgcn_readlane:
651 Intrinsic::amdgcn_readlane);
652 case AMDGPU::BI__builtin_amdgcn_wave_shuffle:
654 Intrinsic::amdgcn_wave_shuffle);
655 case AMDGPU::BI__builtin_amdgcn_readfirstlane:
657 Intrinsic::amdgcn_readfirstlane);
658 case AMDGPU::BI__builtin_amdgcn_div_fixup:
659 case AMDGPU::BI__builtin_amdgcn_div_fixupf:
660 case AMDGPU::BI__builtin_amdgcn_div_fixuph:
662 Intrinsic::amdgcn_div_fixup);
663 case AMDGPU::BI__builtin_amdgcn_trig_preop:
664 case AMDGPU::BI__builtin_amdgcn_trig_preopf:
666 case AMDGPU::BI__builtin_amdgcn_rcp:
667 case AMDGPU::BI__builtin_amdgcn_rcpf:
668 case AMDGPU::BI__builtin_amdgcn_rcph:
669 case AMDGPU::BI__builtin_amdgcn_rcp_bf16:
671 case AMDGPU::BI__builtin_amdgcn_sqrt:
672 case AMDGPU::BI__builtin_amdgcn_sqrtf:
673 case AMDGPU::BI__builtin_amdgcn_sqrth:
674 case AMDGPU::BI__builtin_amdgcn_sqrt_bf16:
676 Intrinsic::amdgcn_sqrt);
677 case AMDGPU::BI__builtin_amdgcn_rsq:
678 case AMDGPU::BI__builtin_amdgcn_rsqf:
679 case AMDGPU::BI__builtin_amdgcn_rsqh:
680 case AMDGPU::BI__builtin_amdgcn_rsq_bf16:
682 case AMDGPU::BI__builtin_amdgcn_rsq_clamp:
683 case AMDGPU::BI__builtin_amdgcn_rsq_clampf:
685 Intrinsic::amdgcn_rsq_clamp);
686 case AMDGPU::BI__builtin_amdgcn_sinf:
687 case AMDGPU::BI__builtin_amdgcn_sinh:
688 case AMDGPU::BI__builtin_amdgcn_sin_bf16:
690 case AMDGPU::BI__builtin_amdgcn_cosf:
691 case AMDGPU::BI__builtin_amdgcn_cosh:
692 case AMDGPU::BI__builtin_amdgcn_cos_bf16:
694 case AMDGPU::BI__builtin_amdgcn_dispatch_ptr:
695 return EmitAMDGPUDispatchPtr(*
this, E);
696 case AMDGPU::BI__builtin_amdgcn_logf:
697 case AMDGPU::BI__builtin_amdgcn_log_bf16:
699 case AMDGPU::BI__builtin_amdgcn_exp2f:
700 case AMDGPU::BI__builtin_amdgcn_exp2_bf16:
702 Intrinsic::amdgcn_exp2);
703 case AMDGPU::BI__builtin_amdgcn_log_clampf:
705 Intrinsic::amdgcn_log_clamp);
706 case AMDGPU::BI__builtin_amdgcn_ldexp:
707 case AMDGPU::BI__builtin_amdgcn_ldexpf: {
711 CGM.getIntrinsic(Intrinsic::ldexp, {Src0->getType(), Src1->getType()});
712 return Builder.CreateCall(F, {Src0, Src1});
714 case AMDGPU::BI__builtin_amdgcn_ldexph: {
720 CGM.getIntrinsic(Intrinsic::ldexp, {Src0->getType(),
Int16Ty});
723 case AMDGPU::BI__builtin_amdgcn_frexp_mant:
724 case AMDGPU::BI__builtin_amdgcn_frexp_mantf:
725 case AMDGPU::BI__builtin_amdgcn_frexp_manth:
727 Intrinsic::amdgcn_frexp_mant);
728 case AMDGPU::BI__builtin_amdgcn_frexp_exp:
729 case AMDGPU::BI__builtin_amdgcn_frexp_expf: {
731 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_frexp_exp,
733 return Builder.CreateCall(F, Src0);
735 case AMDGPU::BI__builtin_amdgcn_frexp_exph: {
737 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_frexp_exp,
739 return Builder.CreateCall(F, Src0);
741 case AMDGPU::BI__builtin_amdgcn_fract:
742 case AMDGPU::BI__builtin_amdgcn_fractf:
743 case AMDGPU::BI__builtin_amdgcn_fracth:
745 Intrinsic::amdgcn_fract);
746 case AMDGPU::BI__builtin_amdgcn_lerp:
748 Intrinsic::amdgcn_lerp);
749 case AMDGPU::BI__builtin_amdgcn_ubfe:
751 Intrinsic::amdgcn_ubfe);
752 case AMDGPU::BI__builtin_amdgcn_sbfe:
754 Intrinsic::amdgcn_sbfe);
755 case AMDGPU::BI__builtin_amdgcn_ballot_w32:
756 case AMDGPU::BI__builtin_amdgcn_ballot_w64: {
759 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_ballot, {ResultType});
760 return Builder.CreateCall(F, {Src});
762 case AMDGPU::BI__builtin_amdgcn_inverse_ballot_w32:
763 case AMDGPU::BI__builtin_amdgcn_inverse_ballot_w64: {
766 CGM.getIntrinsic(Intrinsic::amdgcn_inverse_ballot, {Src->getType()});
767 return Builder.CreateCall(F, {Src});
769 case AMDGPU::BI__builtin_amdgcn_tanhf:
770 case AMDGPU::BI__builtin_amdgcn_tanhh:
771 case AMDGPU::BI__builtin_amdgcn_tanh_bf16:
773 Intrinsic::amdgcn_tanh);
774 case AMDGPU::BI__builtin_amdgcn_uicmp:
775 case AMDGPU::BI__builtin_amdgcn_uicmpl:
776 case AMDGPU::BI__builtin_amdgcn_sicmp:
777 case AMDGPU::BI__builtin_amdgcn_sicmpl: {
783 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_icmp,
784 {
Builder.getInt64Ty(), Src0->getType() });
785 return Builder.CreateCall(F, { Src0, Src1, Src2 });
787 case AMDGPU::BI__builtin_amdgcn_fcmp:
788 case AMDGPU::BI__builtin_amdgcn_fcmpf: {
794 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_fcmp,
795 {
Builder.getInt64Ty(), Src0->getType() });
796 return Builder.CreateCall(F, { Src0, Src1, Src2 });
798 case AMDGPU::BI__builtin_amdgcn_class:
799 case AMDGPU::BI__builtin_amdgcn_classf:
800 case AMDGPU::BI__builtin_amdgcn_classh:
802 case AMDGPU::BI__builtin_amdgcn_fmed3f:
803 case AMDGPU::BI__builtin_amdgcn_fmed3h:
805 Intrinsic::amdgcn_fmed3);
806 case AMDGPU::BI__builtin_amdgcn_ds_append:
807 case AMDGPU::BI__builtin_amdgcn_ds_consume: {
808 Intrinsic::ID Intrin = BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_append ?
809 Intrinsic::amdgcn_ds_append : Intrinsic::amdgcn_ds_consume;
814 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_i32:
815 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_v2i32:
816 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4i16:
817 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4f16:
818 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4bf16:
819 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8i16:
820 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8f16:
821 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8bf16:
822 case AMDGPU::BI__builtin_amdgcn_global_load_tr4_b64_v2i32:
823 case AMDGPU::BI__builtin_amdgcn_global_load_tr8_b64_v2i32:
824 case AMDGPU::BI__builtin_amdgcn_global_load_tr6_b96_v3i32:
825 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8i16:
826 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8f16:
827 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8bf16:
828 case AMDGPU::BI__builtin_amdgcn_ds_load_tr4_b64_v2i32:
829 case AMDGPU::BI__builtin_amdgcn_ds_load_tr8_b64_v2i32:
830 case AMDGPU::BI__builtin_amdgcn_ds_load_tr6_b96_v3i32:
831 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8i16:
832 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8f16:
833 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8bf16:
834 case AMDGPU::BI__builtin_amdgcn_ds_read_tr4_b64_v2i32:
835 case AMDGPU::BI__builtin_amdgcn_ds_read_tr8_b64_v2i32:
836 case AMDGPU::BI__builtin_amdgcn_ds_read_tr6_b96_v3i32:
837 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4f16:
838 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4bf16:
839 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4i16: {
842 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_i32:
843 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_v2i32:
844 case AMDGPU::BI__builtin_amdgcn_global_load_tr8_b64_v2i32:
845 IID = Intrinsic::amdgcn_global_load_tr_b64;
847 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4i16:
848 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4f16:
849 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4bf16:
850 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8i16:
851 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8f16:
852 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8bf16:
853 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8i16:
854 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8f16:
855 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8bf16:
856 IID = Intrinsic::amdgcn_global_load_tr_b128;
858 case AMDGPU::BI__builtin_amdgcn_global_load_tr4_b64_v2i32:
859 IID = Intrinsic::amdgcn_global_load_tr4_b64;
861 case AMDGPU::BI__builtin_amdgcn_global_load_tr6_b96_v3i32:
862 IID = Intrinsic::amdgcn_global_load_tr6_b96;
864 case AMDGPU::BI__builtin_amdgcn_ds_load_tr4_b64_v2i32:
865 IID = Intrinsic::amdgcn_ds_load_tr4_b64;
867 case AMDGPU::BI__builtin_amdgcn_ds_load_tr6_b96_v3i32:
868 IID = Intrinsic::amdgcn_ds_load_tr6_b96;
870 case AMDGPU::BI__builtin_amdgcn_ds_load_tr8_b64_v2i32:
871 IID = Intrinsic::amdgcn_ds_load_tr8_b64;
873 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8i16:
874 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8f16:
875 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8bf16:
876 IID = Intrinsic::amdgcn_ds_load_tr16_b128;
878 case AMDGPU::BI__builtin_amdgcn_ds_read_tr4_b64_v2i32:
879 IID = Intrinsic::amdgcn_ds_read_tr4_b64;
881 case AMDGPU::BI__builtin_amdgcn_ds_read_tr8_b64_v2i32:
882 IID = Intrinsic::amdgcn_ds_read_tr8_b64;
884 case AMDGPU::BI__builtin_amdgcn_ds_read_tr6_b96_v3i32:
885 IID = Intrinsic::amdgcn_ds_read_tr6_b96;
887 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4i16:
888 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4f16:
889 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4bf16:
890 IID = Intrinsic::amdgcn_ds_read_tr16_b64;
895 llvm::Function *F =
CGM.getIntrinsic(IID, {LoadTy});
898 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b32:
899 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b64:
900 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b128:
901 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b32:
902 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b64:
903 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b128: {
907 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b32:
908 IID = Intrinsic::amdgcn_global_load_monitor_b32;
910 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b64:
911 IID = Intrinsic::amdgcn_global_load_monitor_b64;
913 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b128:
914 IID = Intrinsic::amdgcn_global_load_monitor_b128;
916 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b32:
917 IID = Intrinsic::amdgcn_flat_load_monitor_b32;
919 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b64:
920 IID = Intrinsic::amdgcn_flat_load_monitor_b64;
922 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b128:
923 IID = Intrinsic::amdgcn_flat_load_monitor_b128;
934 llvm::Value *ScopeMD =
emitScopeMD(*
this, ScopeExpr->getZExtValue(), AO);
935 llvm::Function *F =
CGM.getIntrinsic(IID, {LoadTy});
936 return Builder.CreateCall(F, {
Addr, AOExpr, ScopeMD});
938 case AMDGPU::BI__builtin_amdgcn_cluster_load_b32:
939 case AMDGPU::BI__builtin_amdgcn_cluster_load_b64:
940 case AMDGPU::BI__builtin_amdgcn_cluster_load_b128: {
943 case AMDGPU::BI__builtin_amdgcn_cluster_load_b32:
944 IID = Intrinsic::amdgcn_cluster_load_b32;
946 case AMDGPU::BI__builtin_amdgcn_cluster_load_b64:
947 IID = Intrinsic::amdgcn_cluster_load_b64;
949 case AMDGPU::BI__builtin_amdgcn_cluster_load_b128:
950 IID = Intrinsic::amdgcn_cluster_load_b128;
954 for (
int i = 0, e = E->
getNumArgs(); i != e; ++i)
957 return Builder.CreateCall(F, {Args});
959 case AMDGPU::BI__builtin_amdgcn_load_to_lds: {
962 Intrinsic::amdgcn_load_to_lds);
964 case AMDGPU::BI__builtin_amdgcn_load_async_to_lds: {
967 *
this, E, Intrinsic::amdgcn_load_async_to_lds);
969 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_32x4B:
970 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_32x4B:
971 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_16x8B:
972 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_16x8B:
973 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_8x16B:
974 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_8x16B: {
977 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_32x4B:
978 IID = Intrinsic::amdgcn_cooperative_atomic_load_32x4B;
980 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_32x4B:
981 IID = Intrinsic::amdgcn_cooperative_atomic_store_32x4B;
983 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_16x8B:
984 IID = Intrinsic::amdgcn_cooperative_atomic_load_16x8B;
986 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_16x8B:
987 IID = Intrinsic::amdgcn_cooperative_atomic_store_16x8B;
989 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_8x16B:
990 IID = Intrinsic::amdgcn_cooperative_atomic_load_8x16B;
992 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_8x16B:
993 IID = Intrinsic::amdgcn_cooperative_atomic_store_8x16B;
997 LLVMContext &Ctx =
CGM.getLLVMContext();
1000 const unsigned ScopeArg = E->
getNumArgs() - 1;
1001 for (
unsigned i = 0; i != ScopeArg; ++i)
1005 llvm::MDNode *MD = llvm::MDNode::get(Ctx, {llvm::MDString::get(Ctx, Arg)});
1006 Args.push_back(llvm::MetadataAsValue::get(Ctx, MD));
1009 llvm::Function *F =
CGM.getIntrinsic(IID, {Args[0]->getType()});
1010 return Builder.CreateCall(F, {Args});
1012 case AMDGPU::BI__builtin_amdgcn_get_fpenv: {
1013 Function *F =
CGM.getIntrinsic(Intrinsic::get_fpenv,
1017 case AMDGPU::BI__builtin_amdgcn_set_fpenv: {
1018 Function *F =
CGM.getIntrinsic(Intrinsic::set_fpenv,
1021 return Builder.CreateCall(F, {Env});
1023 case AMDGPU::BI__builtin_amdgcn_processor_is: {
1024 assert(
CGM.getTriple().isSPIRV() &&
1025 "__builtin_amdgcn_processor_is should never reach CodeGen for "
1026 "concrete targets!");
1030 case AMDGPU::BI__builtin_amdgcn_is_invocable: {
1031 assert(
CGM.getTriple().isSPIRV() &&
1032 "__builtin_amdgcn_is_invocable should never reach CodeGen for "
1033 "concrete targets!");
1040 case AMDGPU::BI__builtin_amdgcn_read_exec:
1042 case AMDGPU::BI__builtin_amdgcn_read_exec_lo:
1044 case AMDGPU::BI__builtin_amdgcn_read_exec_hi:
1046 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray:
1047 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_h:
1048 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_l:
1049 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_lh: {
1059 RayOrigin =
Builder.CreateShuffleVector(RayOrigin, RayOrigin,
1062 Builder.CreateShuffleVector(RayDir, RayDir, {0, 1, 2});
1063 RayInverseDir =
Builder.CreateShuffleVector(RayInverseDir, RayInverseDir,
1066 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_image_bvh_intersect_ray,
1067 {NodePtr->getType(), RayDir->getType()});
1068 return Builder.CreateCall(F, {NodePtr, RayExtent, RayOrigin, RayDir,
1069 RayInverseDir, TextureDescr});
1071 case AMDGPU::BI__builtin_amdgcn_image_bvh8_intersect_ray:
1072 case AMDGPU::BI__builtin_amdgcn_image_bvh_dual_intersect_ray: {
1074 switch (BuiltinID) {
1075 case AMDGPU::BI__builtin_amdgcn_image_bvh8_intersect_ray:
1076 IID = Intrinsic::amdgcn_image_bvh8_intersect_ray;
1078 case AMDGPU::BI__builtin_amdgcn_image_bvh_dual_intersect_ray:
1079 IID = Intrinsic::amdgcn_image_bvh_dual_intersect_ray;
1093 llvm::Function *IntrinsicFunc =
CGM.getIntrinsic(IID);
1095 llvm::CallInst *CI =
Builder.CreateCall(
1096 IntrinsicFunc, {NodePtr, RayExtent, InstanceMask, RayOrigin, RayDir,
1097 Offset, TextureDescr});
1099 llvm::Value *RetVData =
Builder.CreateExtractValue(CI, 0);
1100 llvm::Value *RetRayOrigin =
Builder.CreateExtractValue(CI, 1);
1101 llvm::Value *RetRayDir =
Builder.CreateExtractValue(CI, 2);
1103 Builder.CreateStore(RetRayOrigin, RetRayOriginPtr);
1104 Builder.CreateStore(RetRayDir, RetRayDirPtr);
1109 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_rtn:
1110 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push4_pop1_rtn:
1111 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop1_rtn:
1112 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop2_rtn: {
1114 switch (BuiltinID) {
1115 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_rtn:
1116 IID = Intrinsic::amdgcn_ds_bvh_stack_rtn;
1118 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push4_pop1_rtn:
1119 IID = Intrinsic::amdgcn_ds_bvh_stack_push4_pop1_rtn;
1121 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop1_rtn:
1122 IID = Intrinsic::amdgcn_ds_bvh_stack_push8_pop1_rtn;
1124 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop2_rtn:
1125 IID = Intrinsic::amdgcn_ds_bvh_stack_push8_pop2_rtn;
1130 for (
int i = 0, e = E->
getNumArgs(); i != e; ++i)
1138 Value *I0 =
Builder.CreateInsertElement(PoisonValue::get(RetTy), Rtn,
1142 if (A->
getType()->getPrimitiveSizeInBits() <
1143 RetTy->getScalarType()->getPrimitiveSizeInBits())
1144 A =
Builder.CreateZExt(A, RetTy->getScalarType());
1146 return Builder.CreateInsertElement(I0, A, 1);
1148 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f32_i32:
1149 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f16_i32:
1151 *
this, E, Intrinsic::amdgcn_image_load_1d,
false);
1152 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f32_i32:
1153 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f16_i32:
1155 *
this, E, Intrinsic::amdgcn_image_load_1darray,
false);
1156 case AMDGPU::BI__builtin_amdgcn_image_load_2d_f32_i32:
1157 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f32_i32:
1158 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f16_i32:
1160 *
this, E, Intrinsic::amdgcn_image_load_2d,
false);
1161 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_f32_i32:
1162 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f32_i32:
1163 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f16_i32:
1165 *
this, E, Intrinsic::amdgcn_image_load_2darray,
false);
1166 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f32_i32:
1167 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f16_i32:
1169 *
this, E, Intrinsic::amdgcn_image_load_3d,
false);
1170 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f32_i32:
1171 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f16_i32:
1173 *
this, E, Intrinsic::amdgcn_image_load_cube,
false);
1174 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f32_i32:
1175 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f16_i32:
1177 *
this, E, Intrinsic::amdgcn_image_load_mip_1d,
false);
1178 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f32_i32:
1179 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f16_i32:
1181 *
this, E, Intrinsic::amdgcn_image_load_mip_1darray,
false);
1182 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_f32_i32:
1183 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f32_i32:
1184 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f16_i32:
1186 *
this, E, Intrinsic::amdgcn_image_load_mip_2d,
false);
1187 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_f32_i32:
1188 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f32_i32:
1189 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f16_i32:
1191 *
this, E, Intrinsic::amdgcn_image_load_mip_2darray,
false);
1192 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f32_i32:
1193 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f16_i32:
1195 *
this, E, Intrinsic::amdgcn_image_load_mip_3d,
false);
1196 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f32_i32:
1197 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f16_i32:
1199 *
this, E, Intrinsic::amdgcn_image_load_mip_cube,
false);
1200 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f32_i32:
1201 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f16_i32:
1203 *
this, E, Intrinsic::amdgcn_image_store_1d,
true);
1204 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f32_i32:
1205 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f16_i32:
1207 *
this, E, Intrinsic::amdgcn_image_store_1darray,
true);
1208 case AMDGPU::BI__builtin_amdgcn_image_store_2d_f32_i32:
1209 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f32_i32:
1210 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f16_i32:
1212 *
this, E, Intrinsic::amdgcn_image_store_2d,
true);
1213 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_f32_i32:
1214 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f32_i32:
1215 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f16_i32:
1217 *
this, E, Intrinsic::amdgcn_image_store_2darray,
true);
1218 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f32_i32:
1219 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f16_i32:
1221 *
this, E, Intrinsic::amdgcn_image_store_3d,
true);
1222 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f32_i32:
1223 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f16_i32:
1225 *
this, E, Intrinsic::amdgcn_image_store_cube,
true);
1226 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f32_i32:
1227 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f16_i32:
1229 *
this, E, Intrinsic::amdgcn_image_store_mip_1d,
true);
1230 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f32_i32:
1231 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f16_i32:
1233 *
this, E, Intrinsic::amdgcn_image_store_mip_1darray,
true);
1234 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_f32_i32:
1235 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f32_i32:
1236 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f16_i32:
1238 *
this, E, Intrinsic::amdgcn_image_store_mip_2d,
true);
1239 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_f32_i32:
1240 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f32_i32:
1241 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f16_i32:
1243 *
this, E, Intrinsic::amdgcn_image_store_mip_2darray,
true);
1244 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f32_i32:
1245 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f16_i32:
1247 *
this, E, Intrinsic::amdgcn_image_store_mip_3d,
true);
1248 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f32_i32:
1249 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f16_i32:
1251 *
this, E, Intrinsic::amdgcn_image_store_mip_cube,
true);
1252 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f32_f32:
1253 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f16_f32:
1255 *
this, E, Intrinsic::amdgcn_image_sample_1d,
false);
1256 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f32_f32:
1257 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f16_f32:
1259 *
this, E, Intrinsic::amdgcn_image_sample_1darray,
false);
1260 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_f32_f32:
1261 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f32_f32:
1262 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f16_f32:
1264 *
this, E, Intrinsic::amdgcn_image_sample_2d,
false);
1265 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_f32_f32:
1266 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f32_f32:
1267 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f16_f32:
1269 *
this, E, Intrinsic::amdgcn_image_sample_2darray,
false);
1270 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f32_f32:
1271 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f16_f32:
1273 *
this, E, Intrinsic::amdgcn_image_sample_3d,
false);
1274 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f32_f32:
1275 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f16_f32:
1277 *
this, E, Intrinsic::amdgcn_image_sample_cube,
false);
1278 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1d_v4f32_f32:
1279 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1d_v4f16_f32:
1281 *
this, E, Intrinsic::amdgcn_image_sample_lz_1d,
false);
1282 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1d_v4f32_f32:
1283 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1d_v4f16_f32:
1285 *
this, E, Intrinsic::amdgcn_image_sample_l_1d,
false);
1286 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1d_v4f32_f32:
1287 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1d_v4f16_f32:
1289 *
this, E, Intrinsic::amdgcn_image_sample_d_1d,
false);
1290 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_v4f32_f32:
1291 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_v4f16_f32:
1292 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_f32_f32:
1294 *
this, E, Intrinsic::amdgcn_image_sample_lz_2d,
false);
1295 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_v4f32_f32:
1296 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_v4f16_f32:
1297 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_f32_f32:
1299 *
this, E, Intrinsic::amdgcn_image_sample_l_2d,
false);
1300 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_v4f32_f32:
1301 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_v4f16_f32:
1302 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_f32_f32:
1304 *
this, E, Intrinsic::amdgcn_image_sample_d_2d,
false);
1305 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_3d_v4f32_f32:
1306 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_3d_v4f16_f32:
1308 *
this, E, Intrinsic::amdgcn_image_sample_lz_3d,
false);
1309 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_3d_v4f32_f32:
1310 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_3d_v4f16_f32:
1312 *
this, E, Intrinsic::amdgcn_image_sample_l_3d,
false);
1313 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_3d_v4f32_f32:
1314 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_3d_v4f16_f32:
1316 *
this, E, Intrinsic::amdgcn_image_sample_d_3d,
false);
1317 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_cube_v4f32_f32:
1318 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_cube_v4f16_f32:
1320 *
this, E, Intrinsic::amdgcn_image_sample_lz_cube,
false);
1321 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_cube_v4f32_f32:
1322 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_cube_v4f16_f32:
1324 *
this, E, Intrinsic::amdgcn_image_sample_l_cube,
false);
1325 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1darray_v4f32_f32:
1326 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1darray_v4f16_f32:
1328 *
this, E, Intrinsic::amdgcn_image_sample_lz_1darray,
false);
1329 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1darray_v4f32_f32:
1330 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1darray_v4f16_f32:
1332 *
this, E, Intrinsic::amdgcn_image_sample_l_1darray,
false);
1333 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1darray_v4f32_f32:
1334 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1darray_v4f16_f32:
1336 *
this, E, Intrinsic::amdgcn_image_sample_d_1darray,
false);
1337 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_v4f32_f32:
1338 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_v4f16_f32:
1339 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_f32_f32:
1341 *
this, E, Intrinsic::amdgcn_image_sample_lz_2darray,
false);
1342 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_v4f32_f32:
1343 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_v4f16_f32:
1344 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_f32_f32:
1346 *
this, E, Intrinsic::amdgcn_image_sample_l_2darray,
false);
1347 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_v4f32_f32:
1348 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_v4f16_f32:
1349 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_f32_f32:
1351 *
this, E, Intrinsic::amdgcn_image_sample_d_2darray,
false);
1352 case clang::AMDGPU::BI__builtin_amdgcn_image_gather4_lz_2d_v4f32_f32:
1354 *
this, E, Intrinsic::amdgcn_image_gather4_lz_2d,
false);
1355 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_16x16x128_f8f6f4:
1356 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_32x32x64_f8f6f4: {
1357 llvm::FixedVectorType *VT = FixedVectorType::get(
Builder.getInt32Ty(), 8);
1359 BuiltinID == AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_32x32x64_f8f6f4
1360 ? Intrinsic::amdgcn_mfma_scale_f32_32x32x64_f8f6f4
1361 : Intrinsic::amdgcn_mfma_scale_f32_16x16x128_f8f6f4,
1365 for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++I)
1367 return Builder.CreateCall(F, Args);
1369 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32:
1370 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w32:
1371 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64:
1372 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w64:
1373 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32:
1374 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w32:
1375 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64:
1376 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w64:
1377 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32:
1378 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64:
1379 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32:
1380 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64:
1381 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32:
1382 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64:
1383 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32:
1384 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64:
1385 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32_gfx12:
1386 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64_gfx12:
1387 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32_gfx12:
1388 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64_gfx12:
1389 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32_gfx12:
1390 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64_gfx12:
1391 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32_gfx12:
1392 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64_gfx12:
1393 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32_gfx12:
1394 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64_gfx12:
1395 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32_gfx12:
1396 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64_gfx12:
1397 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w32_gfx12:
1398 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w64_gfx12:
1399 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w32_gfx12:
1400 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w64_gfx12:
1401 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w32_gfx12:
1402 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w64_gfx12:
1403 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w32_gfx12:
1404 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w64_gfx12:
1405 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w32_gfx12:
1406 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w64_gfx12:
1407 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w32:
1408 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w64:
1409 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w32:
1410 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w64:
1411 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w32:
1412 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w64:
1413 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w32:
1414 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w64:
1415 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w32:
1416 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w64:
1417 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w32:
1418 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w64:
1419 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w32:
1420 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w64:
1421 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w32:
1422 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w64:
1423 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w32:
1424 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w64:
1425 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w32:
1426 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w64:
1427 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w32:
1428 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w64:
1430 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x4_f32:
1431 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_bf16:
1432 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_f16:
1433 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x32_f16:
1434 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x32_bf16:
1435 case AMDGPU::BI__builtin_amdgcn_wmma_bf16f32_16x16x32_bf16:
1436 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_fp8:
1437 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_bf8:
1438 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_fp8:
1439 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_bf8:
1440 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_fp8:
1441 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_bf8:
1442 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_fp8:
1443 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_bf8:
1444 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_fp8:
1445 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_bf8:
1446 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_fp8:
1447 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_bf8:
1448 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_fp8:
1449 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_bf8:
1450 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_fp8:
1451 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_bf8:
1452 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8:
1453 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_f8f6f4:
1454 case AMDGPU::BI__builtin_amdgcn_wmma_f32_32x16x128_f4:
1455 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_16x16x128_f8f6f4:
1456 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4:
1457 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_32x16x128_f4:
1458 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_32x16x128_f4:
1459 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_f16:
1460 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_bf16:
1461 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x64_f16:
1462 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x64_bf16:
1463 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16f32_16x16x64_bf16:
1464 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_fp8:
1465 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_bf8:
1466 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_fp8:
1467 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_bf8:
1468 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_fp8:
1469 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_bf8:
1470 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_fp8:
1471 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_bf8:
1472 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8: {
1485 bool AppendFalseForOpselArg =
false;
1486 unsigned BuiltinWMMAOp;
1488 bool NeedReturnType =
false;
1490 bool RemoveABNeg =
false;
1492 switch (BuiltinID) {
1493 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32:
1494 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64:
1495 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32_gfx12:
1496 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64_gfx12:
1497 ArgsForMatchingMatrixTypes = {2, 0};
1498 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_f16;
1500 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32:
1501 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64:
1502 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32_gfx12:
1503 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64_gfx12:
1504 ArgsForMatchingMatrixTypes = {2, 0};
1505 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_bf16;
1507 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32_gfx12:
1508 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64_gfx12:
1509 AppendFalseForOpselArg =
true;
1511 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32:
1512 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64:
1513 ArgsForMatchingMatrixTypes = {2, 0};
1514 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x16_f16;
1516 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32_gfx12:
1517 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64_gfx12:
1518 AppendFalseForOpselArg =
true;
1520 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32:
1521 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64:
1522 ArgsForMatchingMatrixTypes = {2, 0};
1523 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16_16x16x16_bf16;
1525 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w32:
1526 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w64:
1527 ArgsForMatchingMatrixTypes = {2, 0};
1528 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x16_f16_tied;
1530 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w32:
1531 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w64:
1532 ArgsForMatchingMatrixTypes = {2, 0};
1533 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16_16x16x16_bf16_tied;
1535 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32:
1536 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64:
1537 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32_gfx12:
1538 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64_gfx12:
1539 ArgsForMatchingMatrixTypes = {4, 1};
1540 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x16_iu8;
1542 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32:
1543 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64:
1544 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32_gfx12:
1545 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64_gfx12:
1546 ArgsForMatchingMatrixTypes = {4, 1};
1547 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x16_iu4;
1549 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w32_gfx12:
1550 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w64_gfx12:
1551 ArgsForMatchingMatrixTypes = {2, 0};
1552 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_fp8_fp8;
1554 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w32_gfx12:
1555 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w64_gfx12:
1556 ArgsForMatchingMatrixTypes = {2, 0};
1557 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_fp8_bf8;
1559 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w32_gfx12:
1560 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w64_gfx12:
1561 ArgsForMatchingMatrixTypes = {2, 0};
1562 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_bf8_fp8;
1564 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w32_gfx12:
1565 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w64_gfx12:
1566 ArgsForMatchingMatrixTypes = {2, 0};
1567 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_bf8_bf8;
1569 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w32_gfx12:
1570 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w64_gfx12:
1571 ArgsForMatchingMatrixTypes = {4, 1};
1572 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x32_iu4;
1574 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w32:
1575 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w64:
1576 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1577 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_f16;
1579 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w32:
1580 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w64:
1581 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1582 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_bf16;
1584 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w32:
1585 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w64:
1586 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1587 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x32_f16;
1589 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w32:
1590 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w64:
1591 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1592 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_bf16_16x16x32_bf16;
1594 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w32:
1595 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w64:
1596 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1597 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x32_iu8;
1599 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w32:
1600 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w64:
1601 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1602 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x32_iu4;
1604 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w32:
1605 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w64:
1606 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1607 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x64_iu4;
1609 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w32:
1610 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w64:
1611 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1612 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_fp8_fp8;
1614 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w32:
1615 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w64:
1616 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1617 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_fp8_bf8;
1619 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w32:
1620 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w64:
1621 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1622 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_bf8_fp8;
1624 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w32:
1625 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w64:
1626 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1627 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_bf8_bf8;
1630 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x4_f32:
1631 ArgsForMatchingMatrixTypes = {3, 0};
1632 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x4_f32;
1635 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_bf16:
1636 ArgsForMatchingMatrixTypes = {3, 0};
1637 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x32_bf16;
1640 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_f16:
1641 ArgsForMatchingMatrixTypes = {3, 0};
1642 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x32_f16;
1645 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x32_f16:
1646 ArgsForMatchingMatrixTypes = {3, 0};
1647 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x32_f16;
1650 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x32_bf16:
1651 ArgsForMatchingMatrixTypes = {3, 0};
1652 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16_16x16x32_bf16;
1655 case AMDGPU::BI__builtin_amdgcn_wmma_bf16f32_16x16x32_bf16:
1656 NeedReturnType =
true;
1657 ArgsForMatchingMatrixTypes = {0, 3};
1658 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16f32_16x16x32_bf16;
1661 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_fp8:
1662 ArgsForMatchingMatrixTypes = {3, 0};
1663 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_fp8_fp8;
1665 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_bf8:
1666 ArgsForMatchingMatrixTypes = {3, 0};
1667 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_fp8_bf8;
1669 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_fp8:
1670 ArgsForMatchingMatrixTypes = {3, 0};
1671 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_bf8_fp8;
1673 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_bf8:
1674 ArgsForMatchingMatrixTypes = {3, 0};
1675 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_bf8_bf8;
1677 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_fp8:
1678 ArgsForMatchingMatrixTypes = {3, 0};
1679 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_fp8_fp8;
1681 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_bf8:
1682 ArgsForMatchingMatrixTypes = {3, 0};
1683 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_fp8_bf8;
1685 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_fp8:
1686 ArgsForMatchingMatrixTypes = {3, 0};
1687 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_bf8_fp8;
1689 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_bf8:
1690 ArgsForMatchingMatrixTypes = {3, 0};
1691 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_bf8_bf8;
1693 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_fp8:
1694 ArgsForMatchingMatrixTypes = {3, 0};
1695 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_fp8_fp8;
1697 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_bf8:
1698 ArgsForMatchingMatrixTypes = {3, 0};
1699 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_fp8_bf8;
1701 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_fp8:
1702 ArgsForMatchingMatrixTypes = {3, 0};
1703 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_bf8_fp8;
1705 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_bf8:
1706 ArgsForMatchingMatrixTypes = {3, 0};
1707 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_bf8_bf8;
1709 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_fp8:
1710 ArgsForMatchingMatrixTypes = {3, 0};
1711 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_fp8_fp8;
1713 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_bf8:
1714 ArgsForMatchingMatrixTypes = {3, 0};
1715 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_fp8_bf8;
1717 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_fp8:
1718 ArgsForMatchingMatrixTypes = {3, 0};
1719 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_bf8_fp8;
1721 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_bf8:
1722 ArgsForMatchingMatrixTypes = {3, 0};
1723 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_bf8_bf8;
1725 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8:
1726 ArgsForMatchingMatrixTypes = {4, 1};
1727 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x64_iu8;
1729 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_f8f6f4:
1730 ArgsForMatchingMatrixTypes = {5, 1, 3};
1731 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_f8f6f4;
1733 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_16x16x128_f8f6f4:
1734 ArgsForMatchingMatrixTypes = {5, 1, 3};
1735 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale_f32_16x16x128_f8f6f4;
1737 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4:
1738 ArgsForMatchingMatrixTypes = {5, 1, 3};
1739 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale16_f32_16x16x128_f8f6f4;
1741 case AMDGPU::BI__builtin_amdgcn_wmma_f32_32x16x128_f4:
1742 ArgsForMatchingMatrixTypes = {3, 0, 1};
1743 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_32x16x128_f4;
1745 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_32x16x128_f4:
1746 ArgsForMatchingMatrixTypes = {3, 0, 1};
1747 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale_f32_32x16x128_f4;
1749 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_32x16x128_f4:
1750 ArgsForMatchingMatrixTypes = {3, 0, 1};
1751 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale16_f32_32x16x128_f4;
1753 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_f16:
1754 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1755 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x64_f16;
1757 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_bf16:
1758 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1759 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x64_bf16;
1761 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x64_f16:
1762 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1763 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x64_f16;
1765 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x64_bf16:
1766 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1767 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_bf16_16x16x64_bf16;
1769 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16f32_16x16x64_bf16:
1770 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1771 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_bf16f32_16x16x64_bf16;
1773 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_fp8:
1774 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1775 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_fp8_fp8;
1777 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_bf8:
1778 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1779 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_fp8_bf8;
1781 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_fp8:
1782 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1783 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_bf8_fp8;
1785 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_bf8:
1786 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1787 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_bf8_bf8;
1789 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_fp8:
1790 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1791 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_fp8_fp8;
1793 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_bf8:
1794 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1795 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_fp8_bf8;
1797 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_fp8:
1798 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1799 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_bf8_fp8;
1801 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_bf8:
1802 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1803 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_bf8_bf8;
1805 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8:
1806 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1807 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x128_iu8;
1812 for (
int i = 0, e = E->
getNumArgs(); i != e; ++i) {
1814 if (RemoveABNeg && (i == 0 || i == 2))
1818 if (AppendFalseForOpselArg)
1819 Args.push_back(
Builder.getFalse());
1822 if (BuiltinID == AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8) {
1823 if (Args.size() == 7)
1824 Args.push_back(
Builder.getFalse());
1825 assert(Args.size() == 8 &&
"Expected 8 arguments");
1826 Args[7] =
Builder.CreateZExtOrTrunc(Args[7],
Builder.getInt1Ty());
1827 }
else if (BuiltinID ==
1828 AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8) {
1829 if (Args.size() == 8)
1830 Args.push_back(
Builder.getFalse());
1831 assert(Args.size() == 9 &&
"Expected 9 arguments");
1832 Args[8] =
Builder.CreateZExtOrTrunc(Args[8],
Builder.getInt1Ty());
1838 for (
auto ArgIdx : ArgsForMatchingMatrixTypes)
1839 ArgTypes.push_back(Args[ArgIdx]->
getType());
1841 Function *F =
CGM.getIntrinsic(BuiltinWMMAOp, ArgTypes);
1842 return Builder.CreateCall(F, Args);
1845 case AMDGPU::BI__builtin_amdgcn_workgroup_size_x:
1846 return EmitAMDGPUWorkGroupSize(*
this, 0);
1847 case AMDGPU::BI__builtin_amdgcn_workgroup_size_y:
1848 return EmitAMDGPUWorkGroupSize(*
this, 1);
1849 case AMDGPU::BI__builtin_amdgcn_workgroup_size_z:
1850 return EmitAMDGPUWorkGroupSize(*
this, 2);
1853 case AMDGPU::BI__builtin_amdgcn_grid_size_x:
1854 return EmitAMDGPUGridSize(*
this, 0);
1855 case AMDGPU::BI__builtin_amdgcn_grid_size_y:
1856 return EmitAMDGPUGridSize(*
this, 1);
1857 case AMDGPU::BI__builtin_amdgcn_grid_size_z:
1858 return EmitAMDGPUGridSize(*
this, 2);
1861 case AMDGPU::BI__builtin_r600_recipsqrt_ieee:
1862 case AMDGPU::BI__builtin_r600_recipsqrt_ieeef:
1864 Intrinsic::r600_recipsqrt_ieee);
1865 case AMDGPU::BI__builtin_amdgcn_alignbit: {
1869 Function *F =
CGM.getIntrinsic(Intrinsic::fshr, Src0->getType());
1870 return Builder.CreateCall(F, { Src0, Src1, Src2 });
1872 case AMDGPU::BI__builtin_amdgcn_fence: {
1875 FenceInst *Fence =
Builder.CreateFence(AO, SSID);
1880 case AMDGPU::BI__builtin_amdgcn_atomic_inc32:
1881 case AMDGPU::BI__builtin_amdgcn_atomic_inc64:
1882 case AMDGPU::BI__builtin_amdgcn_atomic_dec32:
1883 case AMDGPU::BI__builtin_amdgcn_atomic_dec64:
1884 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f64:
1885 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f32:
1886 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2f16:
1887 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16:
1888 case AMDGPU::BI__builtin_amdgcn_ds_faddf:
1889 case AMDGPU::BI__builtin_amdgcn_ds_fminf:
1890 case AMDGPU::BI__builtin_amdgcn_ds_fmaxf:
1891 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f32:
1892 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f64:
1893 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2f16:
1894 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2f16:
1895 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f32:
1896 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f64:
1897 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16:
1898 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16:
1899 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmin_f64:
1900 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmax_f64:
1901 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmin_f64:
1902 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmax_f64: {
1903 llvm::AtomicRMWInst::BinOp BinOp;
1904 switch (BuiltinID) {
1905 case AMDGPU::BI__builtin_amdgcn_atomic_inc32:
1906 case AMDGPU::BI__builtin_amdgcn_atomic_inc64:
1907 BinOp = llvm::AtomicRMWInst::UIncWrap;
1909 case AMDGPU::BI__builtin_amdgcn_atomic_dec32:
1910 case AMDGPU::BI__builtin_amdgcn_atomic_dec64:
1911 BinOp = llvm::AtomicRMWInst::UDecWrap;
1913 case AMDGPU::BI__builtin_amdgcn_ds_faddf:
1914 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f64:
1915 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f32:
1916 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2f16:
1917 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16:
1918 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f32:
1919 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f64:
1920 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2f16:
1921 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2f16:
1922 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f32:
1923 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f64:
1924 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16:
1925 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16:
1926 BinOp = llvm::AtomicRMWInst::FAdd;
1928 case AMDGPU::BI__builtin_amdgcn_ds_fminf:
1929 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmin_f64:
1930 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmin_f64:
1931 BinOp = llvm::AtomicRMWInst::FMin;
1933 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmax_f64:
1934 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmax_f64:
1935 case AMDGPU::BI__builtin_amdgcn_ds_fmaxf:
1936 BinOp = llvm::AtomicRMWInst::FMax;
1942 llvm::Type *OrigTy = Val->
getType();
1947 if (BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_faddf ||
1948 BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_fminf ||
1949 BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_fmaxf) {
1974 AO = AtomicOrdering::Monotonic;
1977 if (BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16 ||
1978 BuiltinID == AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16 ||
1979 BuiltinID == AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16) {
1980 llvm::Type *V2BF16Ty = FixedVectorType::get(
1981 llvm::Type::getBFloatTy(
Builder.getContext()), 2);
1982 Val =
Builder.CreateBitCast(Val, V2BF16Ty);
1986 llvm::AtomicRMWInst *RMW =
1987 Builder.CreateAtomicRMW(BinOp, Ptr, Val, AO, SSID);
1989 RMW->setVolatile(
true);
1991 unsigned AddrSpace = Ptr.
getType()->getAddressSpace();
1992 if (AddrSpace != llvm::AMDGPUAS::LOCAL_ADDRESS) {
1996 RMW->setMetadata(
"amdgpu.no.fine.grained.memory", EmptyMD);
2000 if (BinOp == llvm::AtomicRMWInst::FAdd && Val->
getType()->isFloatTy())
2001 RMW->setMetadata(
"amdgpu.ignore.denormal.mode", EmptyMD);
2004 return Builder.CreateBitCast(RMW, OrigTy);
2006 case AMDGPU::BI__builtin_amdgcn_s_sendmsg_rtn:
2007 case AMDGPU::BI__builtin_amdgcn_s_sendmsg_rtnl: {
2012 CGM.getIntrinsic(Intrinsic::amdgcn_s_sendmsg_rtn, {ResultType});
2013 return Builder.CreateCall(F, {Arg});
2015 case AMDGPU::BI__builtin_amdgcn_permlane16_swap:
2016 case AMDGPU::BI__builtin_amdgcn_permlane32_swap: {
2024 CGM.getIntrinsic(BuiltinID == AMDGPU::BI__builtin_amdgcn_permlane16_swap
2025 ? Intrinsic::amdgcn_permlane16_swap
2026 : Intrinsic::amdgcn_permlane32_swap);
2027 llvm::CallInst *
Call =
2028 Builder.CreateCall(F, {VDstOld, VSrcOld, FI, BoundCtrl});
2030 llvm::Value *Elt0 =
Builder.CreateExtractValue(
Call, 0);
2031 llvm::Value *Elt1 =
Builder.CreateExtractValue(
Call, 1);
2035 llvm::Value *Insert0 =
Builder.CreateInsertElement(
2036 llvm::PoisonValue::get(ResultType), Elt0, UINT64_C(0));
2037 llvm::Value *AsVector =
2038 Builder.CreateInsertElement(Insert0, Elt1, UINT64_C(1));
2041 case AMDGPU::BI__builtin_amdgcn_bitop3_b32:
2042 case AMDGPU::BI__builtin_amdgcn_bitop3_b16:
2044 Intrinsic::amdgcn_bitop3);
2045 case AMDGPU::BI__builtin_amdgcn_make_buffer_rsrc: {
2050 for (
unsigned I = 0; I < 4; ++I)
2052 llvm::PointerType *RetTy = llvm::PointerType::get(
2053 Builder.getContext(), llvm::AMDGPUAS::BUFFER_RESOURCE);
2054 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_make_buffer_rsrc,
2055 {RetTy, Args[0]->getType()});
2056 return Builder.CreateCall(F, Args);
2058 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b8:
2059 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b16:
2060 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b32:
2061 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b64:
2062 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b96:
2063 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b128:
2065 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_store);
2066 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_format_v4f32:
2067 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_format_v4f16:
2069 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_store_format);
2070 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b8:
2071 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b16:
2072 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b32:
2073 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b64:
2074 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b96:
2075 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b128: {
2076 llvm::Type *RetTy =
nullptr;
2077 switch (BuiltinID) {
2078 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b8:
2081 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b16:
2084 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b32:
2087 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b64:
2088 RetTy = llvm::FixedVectorType::get(
Int32Ty, 2);
2090 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b96:
2091 RetTy = llvm::FixedVectorType::get(
Int32Ty, 3);
2093 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b128:
2094 RetTy = llvm::FixedVectorType::get(
Int32Ty, 4);
2098 CGM.getIntrinsic(Intrinsic::amdgcn_raw_ptr_buffer_load, RetTy);
2103 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_format_v4f32:
2104 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_format_v4f16: {
2107 CGM.getIntrinsic(Intrinsic::amdgcn_raw_ptr_buffer_load_format, {RetTy});
2113 case AMDGPU::BI__builtin_amdgcn_struct_buffer_store_format_v4f32:
2114 case AMDGPU::BI__builtin_amdgcn_struct_buffer_store_format_v4f16:
2116 *
this, E, Intrinsic::amdgcn_struct_ptr_buffer_store_format);
2117 case AMDGPU::BI__builtin_amdgcn_struct_buffer_load_format_v4f32:
2118 case AMDGPU::BI__builtin_amdgcn_struct_buffer_load_format_v4f16: {
2121 Intrinsic::amdgcn_struct_ptr_buffer_load_format, {RetTy});
2128 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_add_i32:
2130 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_add);
2131 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_f32:
2132 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_v2f16:
2134 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_fadd);
2135 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmin_f32:
2136 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmin_f64:
2138 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_fmin);
2139 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmax_f32:
2140 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmax_f64:
2142 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_fmax);
2143 case AMDGPU::BI__builtin_amdgcn_s_prefetch_data:
2145 *
this, E, Intrinsic::amdgcn_s_prefetch_data);
2146 case Builtin::BIlogbf:
2147 case Builtin::BI__builtin_logbf: {
2151 CallInst *FrExp =
Builder.CreateCall(FrExpFunc, Src0);
2154 Exp, ConstantInt::getSigned(Exp->
getType(), -1),
"",
false,
true);
2159 Fabs, ConstantFP::getInfinity(
Builder.getFloatTy()));
2160 Value *Sel1 =
Builder.CreateSelect(FCmpONE, SIToFP, Fabs);
2162 Builder.CreateFCmpOEQ(Src0, ConstantFP::getZero(
Builder.getFloatTy()));
2165 ConstantFP::getInfinity(
Builder.getFloatTy(),
true), Sel1);
2168 case Builtin::BIlogb:
2169 case Builtin::BI__builtin_logb: {
2173 CallInst *FrExp =
Builder.CreateCall(FrExpFunc, Src0);
2176 Exp, ConstantInt::getSigned(Exp->
getType(), -1),
"",
false,
true);
2181 Fabs, ConstantFP::getInfinity(
Builder.getDoubleTy()));
2182 Value *Sel1 =
Builder.CreateSelect(FCmpONE, SIToFP, Fabs);
2184 Builder.CreateFCmpOEQ(Src0, ConstantFP::getZero(
Builder.getDoubleTy()));
2187 ConstantFP::getInfinity(
Builder.getDoubleTy(),
true),
2191 case Builtin::BIscalbnf:
2192 case Builtin::BI__builtin_scalbnf:
2193 case Builtin::BIscalbn:
2194 case Builtin::BI__builtin_scalbn:
2196 *
this, E, Intrinsic::ldexp, Intrinsic::experimental_constrained_ldexp);
2197 case AMDGPU::BI__builtin_amdgcn_permlane_bcast:
2199 *
this, E, Intrinsic::amdgcn_permlane_bcast);
2200 case AMDGPU::BI__builtin_amdgcn_permlane_up:
2202 Intrinsic::amdgcn_permlane_up);
2203 case AMDGPU::BI__builtin_amdgcn_permlane_down:
2205 Intrinsic::amdgcn_permlane_down);
2206 case AMDGPU::BI__builtin_amdgcn_permlane_xor:
2208 Intrinsic::amdgcn_permlane_xor);