523 llvm::AtomicOrdering AO = llvm::AtomicOrdering::SequentiallyConsistent;
524 llvm::SyncScope::ID SSID;
526 case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u32:
527 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fadd_f32:
528 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fadd_f64:
529 case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u32:
530 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fsub_f32:
531 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fsub_f64:
532 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i32:
533 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u32:
534 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmin_f32:
535 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmin_f64:
536 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i32:
537 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u32:
538 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmax_f32:
539 case AMDGPU::BI__builtin_amdgcn_wave_reduce_fmax_f64:
540 case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b32:
541 case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b32:
542 case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b32:
543 case AMDGPU::BI__builtin_amdgcn_wave_reduce_add_u64:
544 case AMDGPU::BI__builtin_amdgcn_wave_reduce_sub_u64:
545 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_i64:
546 case AMDGPU::BI__builtin_amdgcn_wave_reduce_min_u64:
547 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_i64:
548 case AMDGPU::BI__builtin_amdgcn_wave_reduce_max_u64:
549 case AMDGPU::BI__builtin_amdgcn_wave_reduce_and_b64:
550 case AMDGPU::BI__builtin_amdgcn_wave_reduce_or_b64:
551 case AMDGPU::BI__builtin_amdgcn_wave_reduce_xor_b64: {
558 case AMDGPU::BI__builtin_amdgcn_div_scale:
559 case AMDGPU::BI__builtin_amdgcn_div_scalef: {
569 llvm::Function *Callee =
CGM.getIntrinsic(Intrinsic::amdgcn_div_scale,
572 llvm::Value *Tmp =
Builder.CreateCall(Callee, {
X, Y, Z});
575 llvm::Value *Flag =
Builder.CreateExtractValue(Tmp, 1);
579 llvm::Value *FlagExt =
Builder.CreateZExt(Flag, RealFlagType);
580 Builder.CreateStore(FlagExt, FlagOutPtr);
583 case AMDGPU::BI__builtin_amdgcn_div_fmas:
584 case AMDGPU::BI__builtin_amdgcn_div_fmasf: {
590 llvm::Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_div_fmas,
592 llvm::Value *Src3ToBool =
Builder.CreateIsNotNull(Src3);
593 return Builder.CreateCall(F, {Src0, Src1, Src2, Src3ToBool});
596 case AMDGPU::BI__builtin_amdgcn_ds_swizzle:
598 Intrinsic::amdgcn_ds_swizzle);
599 case AMDGPU::BI__builtin_amdgcn_mov_dpp8:
600 case AMDGPU::BI__builtin_amdgcn_mov_dpp:
601 case AMDGPU::BI__builtin_amdgcn_update_dpp: {
605 unsigned ICEArguments = 0;
610 unsigned Size = DataTy->getPrimitiveSizeInBits();
612 llvm::IntegerType::get(
Builder.getContext(), std::max(Size, 32u));
614 CGM.getIntrinsic(BuiltinID == AMDGPU::BI__builtin_amdgcn_mov_dpp8
615 ? Intrinsic::amdgcn_mov_dpp8
616 : Intrinsic::amdgcn_update_dpp,
620 bool InsertOld = BuiltinID == AMDGPU::BI__builtin_amdgcn_mov_dpp;
622 Args.push_back(llvm::PoisonValue::get(
IntTy));
623 for (
unsigned I = 0; I != E->
getNumArgs(); ++I) {
625 if (I < (BuiltinID == AMDGPU::BI__builtin_amdgcn_update_dpp ? 2u : 1u) &&
627 if (!DataTy->isIntegerTy())
629 V, llvm::IntegerType::get(
Builder.getContext(), Size));
633 F->getFunctionType()->getFunctionParamType(I + InsertOld);
634 Args.push_back(
Builder.CreateTruncOrBitCast(
V, ExpTy));
637 if (Size < 32 && !DataTy->isIntegerTy())
639 V, llvm::IntegerType::get(
Builder.getContext(), Size));
640 return Builder.CreateTruncOrBitCast(
V, DataTy);
642 case AMDGPU::BI__builtin_amdgcn_permlane16:
643 case AMDGPU::BI__builtin_amdgcn_permlanex16:
646 BuiltinID == AMDGPU::BI__builtin_amdgcn_permlane16
647 ? Intrinsic::amdgcn_permlane16
648 : Intrinsic::amdgcn_permlanex16);
649 case AMDGPU::BI__builtin_amdgcn_permlane64:
651 Intrinsic::amdgcn_permlane64);
652 case AMDGPU::BI__builtin_amdgcn_readlane:
654 Intrinsic::amdgcn_readlane);
655 case AMDGPU::BI__builtin_amdgcn_wave_shuffle:
657 Intrinsic::amdgcn_wave_shuffle);
658 case AMDGPU::BI__builtin_amdgcn_readfirstlane:
660 Intrinsic::amdgcn_readfirstlane);
661 case AMDGPU::BI__builtin_amdgcn_div_fixup:
662 case AMDGPU::BI__builtin_amdgcn_div_fixupf:
663 case AMDGPU::BI__builtin_amdgcn_div_fixuph:
665 Intrinsic::amdgcn_div_fixup);
666 case AMDGPU::BI__builtin_amdgcn_trig_preop:
667 case AMDGPU::BI__builtin_amdgcn_trig_preopf:
669 case AMDGPU::BI__builtin_amdgcn_rcp:
670 case AMDGPU::BI__builtin_amdgcn_rcpf:
671 case AMDGPU::BI__builtin_amdgcn_rcph:
672 case AMDGPU::BI__builtin_amdgcn_rcp_bf16:
674 case AMDGPU::BI__builtin_amdgcn_sqrt:
675 case AMDGPU::BI__builtin_amdgcn_sqrtf:
676 case AMDGPU::BI__builtin_amdgcn_sqrth:
677 case AMDGPU::BI__builtin_amdgcn_sqrt_bf16:
679 Intrinsic::amdgcn_sqrt);
680 case AMDGPU::BI__builtin_amdgcn_rsq:
681 case AMDGPU::BI__builtin_amdgcn_rsqf:
682 case AMDGPU::BI__builtin_amdgcn_rsqh:
683 case AMDGPU::BI__builtin_amdgcn_rsq_bf16:
685 case AMDGPU::BI__builtin_amdgcn_rsq_clamp:
686 case AMDGPU::BI__builtin_amdgcn_rsq_clampf:
688 Intrinsic::amdgcn_rsq_clamp);
689 case AMDGPU::BI__builtin_amdgcn_sinf:
690 case AMDGPU::BI__builtin_amdgcn_sinh:
691 case AMDGPU::BI__builtin_amdgcn_sin_bf16:
693 case AMDGPU::BI__builtin_amdgcn_cosf:
694 case AMDGPU::BI__builtin_amdgcn_cosh:
695 case AMDGPU::BI__builtin_amdgcn_cos_bf16:
697 case AMDGPU::BI__builtin_amdgcn_dispatch_ptr:
698 return EmitAMDGPUDispatchPtr(*
this, E);
699 case AMDGPU::BI__builtin_amdgcn_logf:
700 case AMDGPU::BI__builtin_amdgcn_log_bf16:
702 case AMDGPU::BI__builtin_amdgcn_exp2f:
703 case AMDGPU::BI__builtin_amdgcn_exp2_bf16:
705 Intrinsic::amdgcn_exp2);
706 case AMDGPU::BI__builtin_amdgcn_log_clampf:
708 Intrinsic::amdgcn_log_clamp);
709 case AMDGPU::BI__builtin_amdgcn_ldexp:
710 case AMDGPU::BI__builtin_amdgcn_ldexpf: {
714 CGM.getIntrinsic(Intrinsic::ldexp, {Src0->getType(), Src1->getType()});
715 return Builder.CreateCall(F, {Src0, Src1});
717 case AMDGPU::BI__builtin_amdgcn_ldexph: {
723 CGM.getIntrinsic(Intrinsic::ldexp, {Src0->getType(),
Int16Ty});
726 case AMDGPU::BI__builtin_amdgcn_frexp_mant:
727 case AMDGPU::BI__builtin_amdgcn_frexp_mantf:
728 case AMDGPU::BI__builtin_amdgcn_frexp_manth:
730 Intrinsic::amdgcn_frexp_mant);
731 case AMDGPU::BI__builtin_amdgcn_frexp_exp:
732 case AMDGPU::BI__builtin_amdgcn_frexp_expf: {
734 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_frexp_exp,
736 return Builder.CreateCall(F, Src0);
738 case AMDGPU::BI__builtin_amdgcn_frexp_exph: {
740 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_frexp_exp,
742 return Builder.CreateCall(F, Src0);
744 case AMDGPU::BI__builtin_amdgcn_fract:
745 case AMDGPU::BI__builtin_amdgcn_fractf:
746 case AMDGPU::BI__builtin_amdgcn_fracth:
748 Intrinsic::amdgcn_fract);
749 case AMDGPU::BI__builtin_amdgcn_lerp:
751 Intrinsic::amdgcn_lerp);
752 case AMDGPU::BI__builtin_amdgcn_ubfe:
754 Intrinsic::amdgcn_ubfe);
755 case AMDGPU::BI__builtin_amdgcn_sbfe:
757 Intrinsic::amdgcn_sbfe);
758 case AMDGPU::BI__builtin_amdgcn_ballot_w32:
759 case AMDGPU::BI__builtin_amdgcn_ballot_w64: {
762 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_ballot, {ResultType});
763 return Builder.CreateCall(F, {Src});
765 case AMDGPU::BI__builtin_amdgcn_inverse_ballot_w32:
766 case AMDGPU::BI__builtin_amdgcn_inverse_ballot_w64: {
769 CGM.getIntrinsic(Intrinsic::amdgcn_inverse_ballot, {Src->getType()});
770 return Builder.CreateCall(F, {Src});
772 case AMDGPU::BI__builtin_amdgcn_tanhf:
773 case AMDGPU::BI__builtin_amdgcn_tanhh:
774 case AMDGPU::BI__builtin_amdgcn_tanh_bf16:
776 Intrinsic::amdgcn_tanh);
777 case AMDGPU::BI__builtin_amdgcn_uicmp:
778 case AMDGPU::BI__builtin_amdgcn_uicmpl:
779 case AMDGPU::BI__builtin_amdgcn_sicmp:
780 case AMDGPU::BI__builtin_amdgcn_sicmpl: {
786 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_icmp,
787 {
Builder.getInt64Ty(), Src0->getType() });
788 return Builder.CreateCall(F, { Src0, Src1, Src2 });
790 case AMDGPU::BI__builtin_amdgcn_fcmp:
791 case AMDGPU::BI__builtin_amdgcn_fcmpf: {
797 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_fcmp,
798 {
Builder.getInt64Ty(), Src0->getType() });
799 return Builder.CreateCall(F, { Src0, Src1, Src2 });
801 case AMDGPU::BI__builtin_amdgcn_class:
802 case AMDGPU::BI__builtin_amdgcn_classf:
803 case AMDGPU::BI__builtin_amdgcn_classh:
805 case AMDGPU::BI__builtin_amdgcn_fmed3f:
806 case AMDGPU::BI__builtin_amdgcn_fmed3h:
808 Intrinsic::amdgcn_fmed3);
809 case AMDGPU::BI__builtin_amdgcn_ds_append:
810 case AMDGPU::BI__builtin_amdgcn_ds_consume: {
811 Intrinsic::ID Intrin = BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_append ?
812 Intrinsic::amdgcn_ds_append : Intrinsic::amdgcn_ds_consume;
817 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_i32:
818 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_v2i32:
819 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4i16:
820 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4f16:
821 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4bf16:
822 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8i16:
823 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8f16:
824 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8bf16:
825 case AMDGPU::BI__builtin_amdgcn_global_load_tr4_b64_v2i32:
826 case AMDGPU::BI__builtin_amdgcn_global_load_tr8_b64_v2i32:
827 case AMDGPU::BI__builtin_amdgcn_global_load_tr6_b96_v3i32:
828 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8i16:
829 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8f16:
830 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8bf16:
831 case AMDGPU::BI__builtin_amdgcn_ds_load_tr4_b64_v2i32:
832 case AMDGPU::BI__builtin_amdgcn_ds_load_tr8_b64_v2i32:
833 case AMDGPU::BI__builtin_amdgcn_ds_load_tr6_b96_v3i32:
834 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8i16:
835 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8f16:
836 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8bf16:
837 case AMDGPU::BI__builtin_amdgcn_ds_read_tr4_b64_v2i32:
838 case AMDGPU::BI__builtin_amdgcn_ds_read_tr8_b64_v2i32:
839 case AMDGPU::BI__builtin_amdgcn_ds_read_tr6_b96_v3i32:
840 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4f16:
841 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4bf16:
842 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4i16: {
845 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_i32:
846 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b64_v2i32:
847 case AMDGPU::BI__builtin_amdgcn_global_load_tr8_b64_v2i32:
848 IID = Intrinsic::amdgcn_global_load_tr_b64;
850 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4i16:
851 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4f16:
852 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v4bf16:
853 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8i16:
854 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8f16:
855 case AMDGPU::BI__builtin_amdgcn_global_load_tr_b128_v8bf16:
856 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8i16:
857 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8f16:
858 case AMDGPU::BI__builtin_amdgcn_global_load_tr16_b128_v8bf16:
859 IID = Intrinsic::amdgcn_global_load_tr_b128;
861 case AMDGPU::BI__builtin_amdgcn_global_load_tr4_b64_v2i32:
862 IID = Intrinsic::amdgcn_global_load_tr4_b64;
864 case AMDGPU::BI__builtin_amdgcn_global_load_tr6_b96_v3i32:
865 IID = Intrinsic::amdgcn_global_load_tr6_b96;
867 case AMDGPU::BI__builtin_amdgcn_ds_load_tr4_b64_v2i32:
868 IID = Intrinsic::amdgcn_ds_load_tr4_b64;
870 case AMDGPU::BI__builtin_amdgcn_ds_load_tr6_b96_v3i32:
871 IID = Intrinsic::amdgcn_ds_load_tr6_b96;
873 case AMDGPU::BI__builtin_amdgcn_ds_load_tr8_b64_v2i32:
874 IID = Intrinsic::amdgcn_ds_load_tr8_b64;
876 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8i16:
877 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8f16:
878 case AMDGPU::BI__builtin_amdgcn_ds_load_tr16_b128_v8bf16:
879 IID = Intrinsic::amdgcn_ds_load_tr16_b128;
881 case AMDGPU::BI__builtin_amdgcn_ds_read_tr4_b64_v2i32:
882 IID = Intrinsic::amdgcn_ds_read_tr4_b64;
884 case AMDGPU::BI__builtin_amdgcn_ds_read_tr8_b64_v2i32:
885 IID = Intrinsic::amdgcn_ds_read_tr8_b64;
887 case AMDGPU::BI__builtin_amdgcn_ds_read_tr6_b96_v3i32:
888 IID = Intrinsic::amdgcn_ds_read_tr6_b96;
890 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4i16:
891 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4f16:
892 case AMDGPU::BI__builtin_amdgcn_ds_read_tr16_b64_v4bf16:
893 IID = Intrinsic::amdgcn_ds_read_tr16_b64;
898 llvm::Function *F =
CGM.getIntrinsic(IID, {LoadTy});
901 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b32:
902 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b64:
903 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b128:
904 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b32:
905 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b64:
906 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b128: {
910 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b32:
911 IID = Intrinsic::amdgcn_global_load_monitor_b32;
913 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b64:
914 IID = Intrinsic::amdgcn_global_load_monitor_b64;
916 case AMDGPU::BI__builtin_amdgcn_global_load_monitor_b128:
917 IID = Intrinsic::amdgcn_global_load_monitor_b128;
919 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b32:
920 IID = Intrinsic::amdgcn_flat_load_monitor_b32;
922 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b64:
923 IID = Intrinsic::amdgcn_flat_load_monitor_b64;
925 case AMDGPU::BI__builtin_amdgcn_flat_load_monitor_b128:
926 IID = Intrinsic::amdgcn_flat_load_monitor_b128;
930 LLVMContext &Ctx =
CGM.getLLVMContext();
940 StringRef ScopeStr =
CGM.getTargetCodeGenInfo().getLLVMSyncScopeStr(
944 llvm::MDNode::get(Ctx, {llvm::MDString::get(Ctx, ScopeStr)});
945 llvm::Value *ScopeMD = llvm::MetadataAsValue::get(Ctx, MD);
946 llvm::Function *F =
CGM.getIntrinsic(IID, {LoadTy});
947 return Builder.CreateCall(F, {
Addr, AOExpr, ScopeMD});
949 case AMDGPU::BI__builtin_amdgcn_cluster_load_b32:
950 case AMDGPU::BI__builtin_amdgcn_cluster_load_b64:
951 case AMDGPU::BI__builtin_amdgcn_cluster_load_b128: {
954 case AMDGPU::BI__builtin_amdgcn_cluster_load_b32:
955 IID = Intrinsic::amdgcn_cluster_load_b32;
957 case AMDGPU::BI__builtin_amdgcn_cluster_load_b64:
958 IID = Intrinsic::amdgcn_cluster_load_b64;
960 case AMDGPU::BI__builtin_amdgcn_cluster_load_b128:
961 IID = Intrinsic::amdgcn_cluster_load_b128;
965 for (
int i = 0, e = E->
getNumArgs(); i != e; ++i)
968 return Builder.CreateCall(F, {Args});
970 case AMDGPU::BI__builtin_amdgcn_load_to_lds: {
973 Intrinsic::amdgcn_load_to_lds);
975 case AMDGPU::BI__builtin_amdgcn_load_async_to_lds: {
978 *
this, E, Intrinsic::amdgcn_load_async_to_lds);
980 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_32x4B:
981 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_32x4B:
982 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_16x8B:
983 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_16x8B:
984 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_8x16B:
985 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_8x16B: {
988 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_32x4B:
989 IID = Intrinsic::amdgcn_cooperative_atomic_load_32x4B;
991 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_32x4B:
992 IID = Intrinsic::amdgcn_cooperative_atomic_store_32x4B;
994 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_16x8B:
995 IID = Intrinsic::amdgcn_cooperative_atomic_load_16x8B;
997 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_16x8B:
998 IID = Intrinsic::amdgcn_cooperative_atomic_store_16x8B;
1000 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_load_8x16B:
1001 IID = Intrinsic::amdgcn_cooperative_atomic_load_8x16B;
1003 case AMDGPU::BI__builtin_amdgcn_cooperative_atomic_store_8x16B:
1004 IID = Intrinsic::amdgcn_cooperative_atomic_store_8x16B;
1008 LLVMContext &Ctx =
CGM.getLLVMContext();
1011 const unsigned ScopeArg = E->
getNumArgs() - 1;
1012 for (
unsigned i = 0; i != ScopeArg; ++i)
1016 llvm::MDNode *MD = llvm::MDNode::get(Ctx, {llvm::MDString::get(Ctx, Arg)});
1017 Args.push_back(llvm::MetadataAsValue::get(Ctx, MD));
1020 llvm::Function *F =
CGM.getIntrinsic(IID, {Args[0]->getType()});
1021 return Builder.CreateCall(F, {Args});
1023 case AMDGPU::BI__builtin_amdgcn_get_fpenv: {
1024 Function *F =
CGM.getIntrinsic(Intrinsic::get_fpenv,
1028 case AMDGPU::BI__builtin_amdgcn_set_fpenv: {
1029 Function *F =
CGM.getIntrinsic(Intrinsic::set_fpenv,
1032 return Builder.CreateCall(F, {Env});
1034 case AMDGPU::BI__builtin_amdgcn_processor_is: {
1035 assert(
CGM.getTriple().isSPIRV() &&
1036 "__builtin_amdgcn_processor_is should never reach CodeGen for "
1037 "concrete targets!");
1041 case AMDGPU::BI__builtin_amdgcn_is_invocable: {
1042 assert(
CGM.getTriple().isSPIRV() &&
1043 "__builtin_amdgcn_is_invocable should never reach CodeGen for "
1044 "concrete targets!");
1051 case AMDGPU::BI__builtin_amdgcn_read_exec:
1053 case AMDGPU::BI__builtin_amdgcn_read_exec_lo:
1055 case AMDGPU::BI__builtin_amdgcn_read_exec_hi:
1057 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray:
1058 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_h:
1059 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_l:
1060 case AMDGPU::BI__builtin_amdgcn_image_bvh_intersect_ray_lh: {
1070 RayOrigin =
Builder.CreateShuffleVector(RayOrigin, RayOrigin,
1073 Builder.CreateShuffleVector(RayDir, RayDir, {0, 1, 2});
1074 RayInverseDir =
Builder.CreateShuffleVector(RayInverseDir, RayInverseDir,
1077 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_image_bvh_intersect_ray,
1078 {NodePtr->getType(), RayDir->getType()});
1079 return Builder.CreateCall(F, {NodePtr, RayExtent, RayOrigin, RayDir,
1080 RayInverseDir, TextureDescr});
1082 case AMDGPU::BI__builtin_amdgcn_image_bvh8_intersect_ray:
1083 case AMDGPU::BI__builtin_amdgcn_image_bvh_dual_intersect_ray: {
1085 switch (BuiltinID) {
1086 case AMDGPU::BI__builtin_amdgcn_image_bvh8_intersect_ray:
1087 IID = Intrinsic::amdgcn_image_bvh8_intersect_ray;
1089 case AMDGPU::BI__builtin_amdgcn_image_bvh_dual_intersect_ray:
1090 IID = Intrinsic::amdgcn_image_bvh_dual_intersect_ray;
1104 llvm::Function *IntrinsicFunc =
CGM.getIntrinsic(IID);
1106 llvm::CallInst *CI =
Builder.CreateCall(
1107 IntrinsicFunc, {NodePtr, RayExtent, InstanceMask, RayOrigin, RayDir,
1108 Offset, TextureDescr});
1110 llvm::Value *RetVData =
Builder.CreateExtractValue(CI, 0);
1111 llvm::Value *RetRayOrigin =
Builder.CreateExtractValue(CI, 1);
1112 llvm::Value *RetRayDir =
Builder.CreateExtractValue(CI, 2);
1114 Builder.CreateStore(RetRayOrigin, RetRayOriginPtr);
1115 Builder.CreateStore(RetRayDir, RetRayDirPtr);
1120 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_rtn:
1121 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push4_pop1_rtn:
1122 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop1_rtn:
1123 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop2_rtn: {
1125 switch (BuiltinID) {
1126 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_rtn:
1127 IID = Intrinsic::amdgcn_ds_bvh_stack_rtn;
1129 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push4_pop1_rtn:
1130 IID = Intrinsic::amdgcn_ds_bvh_stack_push4_pop1_rtn;
1132 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop1_rtn:
1133 IID = Intrinsic::amdgcn_ds_bvh_stack_push8_pop1_rtn;
1135 case AMDGPU::BI__builtin_amdgcn_ds_bvh_stack_push8_pop2_rtn:
1136 IID = Intrinsic::amdgcn_ds_bvh_stack_push8_pop2_rtn;
1141 for (
int i = 0, e = E->
getNumArgs(); i != e; ++i)
1149 Value *I0 =
Builder.CreateInsertElement(PoisonValue::get(RetTy), Rtn,
1153 if (A->
getType()->getPrimitiveSizeInBits() <
1154 RetTy->getScalarType()->getPrimitiveSizeInBits())
1155 A =
Builder.CreateZExt(A, RetTy->getScalarType());
1157 return Builder.CreateInsertElement(I0, A, 1);
1159 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f32_i32:
1160 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f16_i32:
1162 *
this, E, Intrinsic::amdgcn_image_load_1d,
false);
1163 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f32_i32:
1164 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f16_i32:
1166 *
this, E, Intrinsic::amdgcn_image_load_1darray,
false);
1167 case AMDGPU::BI__builtin_amdgcn_image_load_2d_f32_i32:
1168 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f32_i32:
1169 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f16_i32:
1171 *
this, E, Intrinsic::amdgcn_image_load_2d,
false);
1172 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_f32_i32:
1173 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f32_i32:
1174 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f16_i32:
1176 *
this, E, Intrinsic::amdgcn_image_load_2darray,
false);
1177 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f32_i32:
1178 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f16_i32:
1180 *
this, E, Intrinsic::amdgcn_image_load_3d,
false);
1181 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f32_i32:
1182 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f16_i32:
1184 *
this, E, Intrinsic::amdgcn_image_load_cube,
false);
1185 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f32_i32:
1186 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f16_i32:
1188 *
this, E, Intrinsic::amdgcn_image_load_mip_1d,
false);
1189 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f32_i32:
1190 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f16_i32:
1192 *
this, E, Intrinsic::amdgcn_image_load_mip_1darray,
false);
1193 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_f32_i32:
1194 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f32_i32:
1195 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f16_i32:
1197 *
this, E, Intrinsic::amdgcn_image_load_mip_2d,
false);
1198 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_f32_i32:
1199 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f32_i32:
1200 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f16_i32:
1202 *
this, E, Intrinsic::amdgcn_image_load_mip_2darray,
false);
1203 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f32_i32:
1204 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f16_i32:
1206 *
this, E, Intrinsic::amdgcn_image_load_mip_3d,
false);
1207 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f32_i32:
1208 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f16_i32:
1210 *
this, E, Intrinsic::amdgcn_image_load_mip_cube,
false);
1211 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f32_i32:
1212 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f16_i32:
1214 *
this, E, Intrinsic::amdgcn_image_store_1d,
true);
1215 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f32_i32:
1216 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f16_i32:
1218 *
this, E, Intrinsic::amdgcn_image_store_1darray,
true);
1219 case AMDGPU::BI__builtin_amdgcn_image_store_2d_f32_i32:
1220 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f32_i32:
1221 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f16_i32:
1223 *
this, E, Intrinsic::amdgcn_image_store_2d,
true);
1224 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_f32_i32:
1225 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f32_i32:
1226 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f16_i32:
1228 *
this, E, Intrinsic::amdgcn_image_store_2darray,
true);
1229 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f32_i32:
1230 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f16_i32:
1232 *
this, E, Intrinsic::amdgcn_image_store_3d,
true);
1233 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f32_i32:
1234 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f16_i32:
1236 *
this, E, Intrinsic::amdgcn_image_store_cube,
true);
1237 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f32_i32:
1238 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f16_i32:
1240 *
this, E, Intrinsic::amdgcn_image_store_mip_1d,
true);
1241 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f32_i32:
1242 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f16_i32:
1244 *
this, E, Intrinsic::amdgcn_image_store_mip_1darray,
true);
1245 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_f32_i32:
1246 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f32_i32:
1247 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f16_i32:
1249 *
this, E, Intrinsic::amdgcn_image_store_mip_2d,
true);
1250 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_f32_i32:
1251 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f32_i32:
1252 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f16_i32:
1254 *
this, E, Intrinsic::amdgcn_image_store_mip_2darray,
true);
1255 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f32_i32:
1256 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f16_i32:
1258 *
this, E, Intrinsic::amdgcn_image_store_mip_3d,
true);
1259 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f32_i32:
1260 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f16_i32:
1262 *
this, E, Intrinsic::amdgcn_image_store_mip_cube,
true);
1263 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f32_f32:
1264 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f16_f32:
1266 *
this, E, Intrinsic::amdgcn_image_sample_1d,
false);
1267 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f32_f32:
1268 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f16_f32:
1270 *
this, E, Intrinsic::amdgcn_image_sample_1darray,
false);
1271 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_f32_f32:
1272 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f32_f32:
1273 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f16_f32:
1275 *
this, E, Intrinsic::amdgcn_image_sample_2d,
false);
1276 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_f32_f32:
1277 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f32_f32:
1278 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f16_f32:
1280 *
this, E, Intrinsic::amdgcn_image_sample_2darray,
false);
1281 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f32_f32:
1282 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f16_f32:
1284 *
this, E, Intrinsic::amdgcn_image_sample_3d,
false);
1285 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f32_f32:
1286 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f16_f32:
1288 *
this, E, Intrinsic::amdgcn_image_sample_cube,
false);
1289 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1d_v4f32_f32:
1290 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1d_v4f16_f32:
1292 *
this, E, Intrinsic::amdgcn_image_sample_lz_1d,
false);
1293 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1d_v4f32_f32:
1294 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1d_v4f16_f32:
1296 *
this, E, Intrinsic::amdgcn_image_sample_l_1d,
false);
1297 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1d_v4f32_f32:
1298 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1d_v4f16_f32:
1300 *
this, E, Intrinsic::amdgcn_image_sample_d_1d,
false);
1301 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_v4f32_f32:
1302 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_v4f16_f32:
1303 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2d_f32_f32:
1305 *
this, E, Intrinsic::amdgcn_image_sample_lz_2d,
false);
1306 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_v4f32_f32:
1307 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_v4f16_f32:
1308 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2d_f32_f32:
1310 *
this, E, Intrinsic::amdgcn_image_sample_l_2d,
false);
1311 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_v4f32_f32:
1312 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_v4f16_f32:
1313 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2d_f32_f32:
1315 *
this, E, Intrinsic::amdgcn_image_sample_d_2d,
false);
1316 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_3d_v4f32_f32:
1317 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_3d_v4f16_f32:
1319 *
this, E, Intrinsic::amdgcn_image_sample_lz_3d,
false);
1320 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_3d_v4f32_f32:
1321 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_3d_v4f16_f32:
1323 *
this, E, Intrinsic::amdgcn_image_sample_l_3d,
false);
1324 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_3d_v4f32_f32:
1325 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_3d_v4f16_f32:
1327 *
this, E, Intrinsic::amdgcn_image_sample_d_3d,
false);
1328 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_cube_v4f32_f32:
1329 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_cube_v4f16_f32:
1331 *
this, E, Intrinsic::amdgcn_image_sample_lz_cube,
false);
1332 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_cube_v4f32_f32:
1333 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_cube_v4f16_f32:
1335 *
this, E, Intrinsic::amdgcn_image_sample_l_cube,
false);
1336 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1darray_v4f32_f32:
1337 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_1darray_v4f16_f32:
1339 *
this, E, Intrinsic::amdgcn_image_sample_lz_1darray,
false);
1340 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1darray_v4f32_f32:
1341 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_1darray_v4f16_f32:
1343 *
this, E, Intrinsic::amdgcn_image_sample_l_1darray,
false);
1344 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1darray_v4f32_f32:
1345 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_1darray_v4f16_f32:
1347 *
this, E, Intrinsic::amdgcn_image_sample_d_1darray,
false);
1348 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_v4f32_f32:
1349 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_v4f16_f32:
1350 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_lz_2darray_f32_f32:
1352 *
this, E, Intrinsic::amdgcn_image_sample_lz_2darray,
false);
1353 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_v4f32_f32:
1354 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_v4f16_f32:
1355 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_l_2darray_f32_f32:
1357 *
this, E, Intrinsic::amdgcn_image_sample_l_2darray,
false);
1358 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_v4f32_f32:
1359 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_v4f16_f32:
1360 case clang::AMDGPU::BI__builtin_amdgcn_image_sample_d_2darray_f32_f32:
1362 *
this, E, Intrinsic::amdgcn_image_sample_d_2darray,
false);
1363 case clang::AMDGPU::BI__builtin_amdgcn_image_gather4_lz_2d_v4f32_f32:
1365 *
this, E, Intrinsic::amdgcn_image_gather4_lz_2d,
false);
1366 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_16x16x128_f8f6f4:
1367 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_32x32x64_f8f6f4: {
1368 llvm::FixedVectorType *VT = FixedVectorType::get(
Builder.getInt32Ty(), 8);
1370 BuiltinID == AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_32x32x64_f8f6f4
1371 ? Intrinsic::amdgcn_mfma_scale_f32_32x32x64_f8f6f4
1372 : Intrinsic::amdgcn_mfma_scale_f32_16x16x128_f8f6f4,
1376 for (
unsigned I = 0, N = E->
getNumArgs(); I != N; ++I)
1378 return Builder.CreateCall(F, Args);
1380 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32:
1381 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w32:
1382 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64:
1383 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w64:
1384 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32:
1385 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w32:
1386 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64:
1387 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w64:
1388 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32:
1389 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64:
1390 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32:
1391 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64:
1392 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32:
1393 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64:
1394 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32:
1395 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64:
1396 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32_gfx12:
1397 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64_gfx12:
1398 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32_gfx12:
1399 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64_gfx12:
1400 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32_gfx12:
1401 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64_gfx12:
1402 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32_gfx12:
1403 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64_gfx12:
1404 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32_gfx12:
1405 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64_gfx12:
1406 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32_gfx12:
1407 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64_gfx12:
1408 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w32_gfx12:
1409 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w64_gfx12:
1410 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w32_gfx12:
1411 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w64_gfx12:
1412 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w32_gfx12:
1413 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w64_gfx12:
1414 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w32_gfx12:
1415 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w64_gfx12:
1416 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w32_gfx12:
1417 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w64_gfx12:
1418 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w32:
1419 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w64:
1420 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w32:
1421 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w64:
1422 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w32:
1423 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w64:
1424 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w32:
1425 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w64:
1426 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w32:
1427 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w64:
1428 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w32:
1429 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w64:
1430 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w32:
1431 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w64:
1432 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w32:
1433 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w64:
1434 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w32:
1435 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w64:
1436 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w32:
1437 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w64:
1438 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w32:
1439 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w64:
1441 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x4_f32:
1442 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_bf16:
1443 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_f16:
1444 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x32_f16:
1445 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x32_bf16:
1446 case AMDGPU::BI__builtin_amdgcn_wmma_bf16f32_16x16x32_bf16:
1447 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_fp8:
1448 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_bf8:
1449 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_fp8:
1450 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_bf8:
1451 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_fp8:
1452 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_bf8:
1453 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_fp8:
1454 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_bf8:
1455 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_fp8:
1456 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_bf8:
1457 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_fp8:
1458 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_bf8:
1459 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_fp8:
1460 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_bf8:
1461 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_fp8:
1462 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_bf8:
1463 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8:
1464 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_f8f6f4:
1465 case AMDGPU::BI__builtin_amdgcn_wmma_f32_32x16x128_f4:
1466 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_16x16x128_f8f6f4:
1467 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4:
1468 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_32x16x128_f4:
1469 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_32x16x128_f4:
1470 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_f16:
1471 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_bf16:
1472 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x64_f16:
1473 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x64_bf16:
1474 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16f32_16x16x64_bf16:
1475 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_fp8:
1476 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_bf8:
1477 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_fp8:
1478 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_bf8:
1479 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_fp8:
1480 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_bf8:
1481 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_fp8:
1482 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_bf8:
1483 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8: {
1496 bool AppendFalseForOpselArg =
false;
1497 unsigned BuiltinWMMAOp;
1499 bool NeedReturnType =
false;
1501 bool RemoveABNeg =
false;
1503 switch (BuiltinID) {
1504 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32:
1505 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64:
1506 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w32_gfx12:
1507 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_f16_w64_gfx12:
1508 ArgsForMatchingMatrixTypes = {2, 0};
1509 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_f16;
1511 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32:
1512 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64:
1513 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w32_gfx12:
1514 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf16_w64_gfx12:
1515 ArgsForMatchingMatrixTypes = {2, 0};
1516 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_bf16;
1518 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32_gfx12:
1519 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64_gfx12:
1520 AppendFalseForOpselArg =
true;
1522 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w32:
1523 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_w64:
1524 ArgsForMatchingMatrixTypes = {2, 0};
1525 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x16_f16;
1527 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32_gfx12:
1528 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64_gfx12:
1529 AppendFalseForOpselArg =
true;
1531 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w32:
1532 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_w64:
1533 ArgsForMatchingMatrixTypes = {2, 0};
1534 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16_16x16x16_bf16;
1536 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w32:
1537 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x16_f16_tied_w64:
1538 ArgsForMatchingMatrixTypes = {2, 0};
1539 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x16_f16_tied;
1541 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w32:
1542 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x16_bf16_tied_w64:
1543 ArgsForMatchingMatrixTypes = {2, 0};
1544 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16_16x16x16_bf16_tied;
1546 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32:
1547 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64:
1548 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w32_gfx12:
1549 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu8_w64_gfx12:
1550 ArgsForMatchingMatrixTypes = {4, 1};
1551 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x16_iu8;
1553 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32:
1554 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64:
1555 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w32_gfx12:
1556 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x16_iu4_w64_gfx12:
1557 ArgsForMatchingMatrixTypes = {4, 1};
1558 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x16_iu4;
1560 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w32_gfx12:
1561 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_fp8_w64_gfx12:
1562 ArgsForMatchingMatrixTypes = {2, 0};
1563 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_fp8_fp8;
1565 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w32_gfx12:
1566 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_fp8_bf8_w64_gfx12:
1567 ArgsForMatchingMatrixTypes = {2, 0};
1568 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_fp8_bf8;
1570 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w32_gfx12:
1571 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_fp8_w64_gfx12:
1572 ArgsForMatchingMatrixTypes = {2, 0};
1573 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_bf8_fp8;
1575 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w32_gfx12:
1576 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x16_bf8_bf8_w64_gfx12:
1577 ArgsForMatchingMatrixTypes = {2, 0};
1578 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x16_bf8_bf8;
1580 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w32_gfx12:
1581 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x32_iu4_w64_gfx12:
1582 ArgsForMatchingMatrixTypes = {4, 1};
1583 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x32_iu4;
1585 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w32:
1586 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_f16_w64:
1587 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1588 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_f16;
1590 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w32:
1591 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf16_w64:
1592 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1593 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_bf16;
1595 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w32:
1596 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x32_f16_w64:
1597 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1598 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x32_f16;
1600 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w32:
1601 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x32_bf16_w64:
1602 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1603 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_bf16_16x16x32_bf16;
1605 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w32:
1606 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu8_w64:
1607 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1608 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x32_iu8;
1610 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w32:
1611 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x32_iu4_w64:
1612 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1613 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x32_iu4;
1615 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w32:
1616 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x64_iu4_w64:
1617 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1618 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x64_iu4;
1620 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w32:
1621 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_fp8_w64:
1622 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1623 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_fp8_fp8;
1625 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w32:
1626 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_fp8_bf8_w64:
1627 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1628 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_fp8_bf8;
1630 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w32:
1631 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_fp8_w64:
1632 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1633 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_bf8_fp8;
1635 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w32:
1636 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x32_bf8_bf8_w64:
1637 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1638 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x32_bf8_bf8;
1641 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x4_f32:
1642 ArgsForMatchingMatrixTypes = {3, 0};
1643 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x4_f32;
1646 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_bf16:
1647 ArgsForMatchingMatrixTypes = {3, 0};
1648 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x32_bf16;
1651 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x32_f16:
1652 ArgsForMatchingMatrixTypes = {3, 0};
1653 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x32_f16;
1656 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x32_f16:
1657 ArgsForMatchingMatrixTypes = {3, 0};
1658 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x32_f16;
1661 case AMDGPU::BI__builtin_amdgcn_wmma_bf16_16x16x32_bf16:
1662 ArgsForMatchingMatrixTypes = {3, 0};
1663 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16_16x16x32_bf16;
1666 case AMDGPU::BI__builtin_amdgcn_wmma_bf16f32_16x16x32_bf16:
1667 NeedReturnType =
true;
1668 ArgsForMatchingMatrixTypes = {0, 3};
1669 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_bf16f32_16x16x32_bf16;
1672 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_fp8:
1673 ArgsForMatchingMatrixTypes = {3, 0};
1674 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_fp8_fp8;
1676 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_fp8_bf8:
1677 ArgsForMatchingMatrixTypes = {3, 0};
1678 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_fp8_bf8;
1680 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_fp8:
1681 ArgsForMatchingMatrixTypes = {3, 0};
1682 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_bf8_fp8;
1684 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x64_bf8_bf8:
1685 ArgsForMatchingMatrixTypes = {3, 0};
1686 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x64_bf8_bf8;
1688 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_fp8:
1689 ArgsForMatchingMatrixTypes = {3, 0};
1690 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_fp8_fp8;
1692 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_fp8_bf8:
1693 ArgsForMatchingMatrixTypes = {3, 0};
1694 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_fp8_bf8;
1696 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_fp8:
1697 ArgsForMatchingMatrixTypes = {3, 0};
1698 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_bf8_fp8;
1700 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x64_bf8_bf8:
1701 ArgsForMatchingMatrixTypes = {3, 0};
1702 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x64_bf8_bf8;
1704 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_fp8:
1705 ArgsForMatchingMatrixTypes = {3, 0};
1706 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_fp8_fp8;
1708 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_fp8_bf8:
1709 ArgsForMatchingMatrixTypes = {3, 0};
1710 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_fp8_bf8;
1712 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_fp8:
1713 ArgsForMatchingMatrixTypes = {3, 0};
1714 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_bf8_fp8;
1716 case AMDGPU::BI__builtin_amdgcn_wmma_f16_16x16x128_bf8_bf8:
1717 ArgsForMatchingMatrixTypes = {3, 0};
1718 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f16_16x16x128_bf8_bf8;
1720 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_fp8:
1721 ArgsForMatchingMatrixTypes = {3, 0};
1722 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_fp8_fp8;
1724 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_fp8_bf8:
1725 ArgsForMatchingMatrixTypes = {3, 0};
1726 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_fp8_bf8;
1728 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_fp8:
1729 ArgsForMatchingMatrixTypes = {3, 0};
1730 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_bf8_fp8;
1732 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_bf8_bf8:
1733 ArgsForMatchingMatrixTypes = {3, 0};
1734 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_bf8_bf8;
1736 case AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8:
1737 ArgsForMatchingMatrixTypes = {4, 1};
1738 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_i32_16x16x64_iu8;
1740 case AMDGPU::BI__builtin_amdgcn_wmma_f32_16x16x128_f8f6f4:
1741 ArgsForMatchingMatrixTypes = {5, 1, 3};
1742 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_16x16x128_f8f6f4;
1744 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_16x16x128_f8f6f4:
1745 ArgsForMatchingMatrixTypes = {5, 1, 3};
1746 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale_f32_16x16x128_f8f6f4;
1748 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_16x16x128_f8f6f4:
1749 ArgsForMatchingMatrixTypes = {5, 1, 3};
1750 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale16_f32_16x16x128_f8f6f4;
1752 case AMDGPU::BI__builtin_amdgcn_wmma_f32_32x16x128_f4:
1753 ArgsForMatchingMatrixTypes = {3, 0, 1};
1754 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_f32_32x16x128_f4;
1756 case AMDGPU::BI__builtin_amdgcn_wmma_scale_f32_32x16x128_f4:
1757 ArgsForMatchingMatrixTypes = {3, 0, 1};
1758 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale_f32_32x16x128_f4;
1760 case AMDGPU::BI__builtin_amdgcn_wmma_scale16_f32_32x16x128_f4:
1761 ArgsForMatchingMatrixTypes = {3, 0, 1};
1762 BuiltinWMMAOp = Intrinsic::amdgcn_wmma_scale16_f32_32x16x128_f4;
1764 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_f16:
1765 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1766 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x64_f16;
1768 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x64_bf16:
1769 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1770 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x64_bf16;
1772 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x64_f16:
1773 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1774 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x64_f16;
1776 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16_16x16x64_bf16:
1777 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1778 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_bf16_16x16x64_bf16;
1780 case AMDGPU::BI__builtin_amdgcn_swmmac_bf16f32_16x16x64_bf16:
1781 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1782 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_bf16f32_16x16x64_bf16;
1784 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_fp8:
1785 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1786 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_fp8_fp8;
1788 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_fp8_bf8:
1789 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1790 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_fp8_bf8;
1792 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_fp8:
1793 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1794 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_bf8_fp8;
1796 case AMDGPU::BI__builtin_amdgcn_swmmac_f32_16x16x128_bf8_bf8:
1797 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1798 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f32_16x16x128_bf8_bf8;
1800 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_fp8:
1801 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1802 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_fp8_fp8;
1804 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_fp8_bf8:
1805 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1806 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_fp8_bf8;
1808 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_fp8:
1809 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1810 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_bf8_fp8;
1812 case AMDGPU::BI__builtin_amdgcn_swmmac_f16_16x16x128_bf8_bf8:
1813 ArgsForMatchingMatrixTypes = {2, 0, 1, 3};
1814 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_f16_16x16x128_bf8_bf8;
1816 case AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8:
1817 ArgsForMatchingMatrixTypes = {4, 1, 3, 5};
1818 BuiltinWMMAOp = Intrinsic::amdgcn_swmmac_i32_16x16x128_iu8;
1823 for (
int i = 0, e = E->
getNumArgs(); i != e; ++i) {
1825 if (RemoveABNeg && (i == 0 || i == 2))
1829 if (AppendFalseForOpselArg)
1830 Args.push_back(
Builder.getFalse());
1833 if (BuiltinID == AMDGPU::BI__builtin_amdgcn_wmma_i32_16x16x64_iu8) {
1834 if (Args.size() == 7)
1835 Args.push_back(
Builder.getFalse());
1836 assert(Args.size() == 8 &&
"Expected 8 arguments");
1837 Args[7] =
Builder.CreateZExtOrTrunc(Args[7],
Builder.getInt1Ty());
1838 }
else if (BuiltinID ==
1839 AMDGPU::BI__builtin_amdgcn_swmmac_i32_16x16x128_iu8) {
1840 if (Args.size() == 8)
1841 Args.push_back(
Builder.getFalse());
1842 assert(Args.size() == 9 &&
"Expected 9 arguments");
1843 Args[8] =
Builder.CreateZExtOrTrunc(Args[8],
Builder.getInt1Ty());
1849 for (
auto ArgIdx : ArgsForMatchingMatrixTypes)
1850 ArgTypes.push_back(Args[ArgIdx]->
getType());
1852 Function *F =
CGM.getIntrinsic(BuiltinWMMAOp, ArgTypes);
1853 return Builder.CreateCall(F, Args);
1856 case AMDGPU::BI__builtin_amdgcn_workgroup_size_x:
1857 return EmitAMDGPUWorkGroupSize(*
this, 0);
1858 case AMDGPU::BI__builtin_amdgcn_workgroup_size_y:
1859 return EmitAMDGPUWorkGroupSize(*
this, 1);
1860 case AMDGPU::BI__builtin_amdgcn_workgroup_size_z:
1861 return EmitAMDGPUWorkGroupSize(*
this, 2);
1864 case AMDGPU::BI__builtin_amdgcn_grid_size_x:
1865 return EmitAMDGPUGridSize(*
this, 0);
1866 case AMDGPU::BI__builtin_amdgcn_grid_size_y:
1867 return EmitAMDGPUGridSize(*
this, 1);
1868 case AMDGPU::BI__builtin_amdgcn_grid_size_z:
1869 return EmitAMDGPUGridSize(*
this, 2);
1872 case AMDGPU::BI__builtin_r600_recipsqrt_ieee:
1873 case AMDGPU::BI__builtin_r600_recipsqrt_ieeef:
1875 Intrinsic::r600_recipsqrt_ieee);
1876 case AMDGPU::BI__builtin_amdgcn_alignbit: {
1880 Function *F =
CGM.getIntrinsic(Intrinsic::fshr, Src0->getType());
1881 return Builder.CreateCall(F, { Src0, Src1, Src2 });
1883 case AMDGPU::BI__builtin_amdgcn_fence: {
1886 FenceInst *Fence =
Builder.CreateFence(AO, SSID);
1891 case AMDGPU::BI__builtin_amdgcn_atomic_inc32:
1892 case AMDGPU::BI__builtin_amdgcn_atomic_inc64:
1893 case AMDGPU::BI__builtin_amdgcn_atomic_dec32:
1894 case AMDGPU::BI__builtin_amdgcn_atomic_dec64:
1895 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f64:
1896 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f32:
1897 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2f16:
1898 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16:
1899 case AMDGPU::BI__builtin_amdgcn_ds_faddf:
1900 case AMDGPU::BI__builtin_amdgcn_ds_fminf:
1901 case AMDGPU::BI__builtin_amdgcn_ds_fmaxf:
1902 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f32:
1903 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f64:
1904 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2f16:
1905 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2f16:
1906 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f32:
1907 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f64:
1908 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16:
1909 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16:
1910 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmin_f64:
1911 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmax_f64:
1912 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmin_f64:
1913 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmax_f64: {
1914 llvm::AtomicRMWInst::BinOp BinOp;
1915 switch (BuiltinID) {
1916 case AMDGPU::BI__builtin_amdgcn_atomic_inc32:
1917 case AMDGPU::BI__builtin_amdgcn_atomic_inc64:
1918 BinOp = llvm::AtomicRMWInst::UIncWrap;
1920 case AMDGPU::BI__builtin_amdgcn_atomic_dec32:
1921 case AMDGPU::BI__builtin_amdgcn_atomic_dec64:
1922 BinOp = llvm::AtomicRMWInst::UDecWrap;
1924 case AMDGPU::BI__builtin_amdgcn_ds_faddf:
1925 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f64:
1926 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_f32:
1927 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2f16:
1928 case AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16:
1929 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f32:
1930 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_f64:
1931 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2f16:
1932 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2f16:
1933 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f32:
1934 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_f64:
1935 case AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16:
1936 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16:
1937 BinOp = llvm::AtomicRMWInst::FAdd;
1939 case AMDGPU::BI__builtin_amdgcn_ds_fminf:
1940 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmin_f64:
1941 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmin_f64:
1942 BinOp = llvm::AtomicRMWInst::FMin;
1944 case AMDGPU::BI__builtin_amdgcn_global_atomic_fmax_f64:
1945 case AMDGPU::BI__builtin_amdgcn_flat_atomic_fmax_f64:
1946 case AMDGPU::BI__builtin_amdgcn_ds_fmaxf:
1947 BinOp = llvm::AtomicRMWInst::FMax;
1953 llvm::Type *OrigTy = Val->
getType();
1958 if (BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_faddf ||
1959 BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_fminf ||
1960 BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_fmaxf) {
1985 AO = AtomicOrdering::Monotonic;
1988 if (BuiltinID == AMDGPU::BI__builtin_amdgcn_ds_atomic_fadd_v2bf16 ||
1989 BuiltinID == AMDGPU::BI__builtin_amdgcn_global_atomic_fadd_v2bf16 ||
1990 BuiltinID == AMDGPU::BI__builtin_amdgcn_flat_atomic_fadd_v2bf16) {
1991 llvm::Type *V2BF16Ty = FixedVectorType::get(
1992 llvm::Type::getBFloatTy(
Builder.getContext()), 2);
1993 Val =
Builder.CreateBitCast(Val, V2BF16Ty);
1997 llvm::AtomicRMWInst *RMW =
1998 Builder.CreateAtomicRMW(BinOp, Ptr, Val, AO, SSID);
2000 RMW->setVolatile(
true);
2002 unsigned AddrSpace = Ptr.
getType()->getAddressSpace();
2003 if (AddrSpace != llvm::AMDGPUAS::LOCAL_ADDRESS) {
2007 RMW->setMetadata(
"amdgpu.no.fine.grained.memory", EmptyMD);
2011 if (BinOp == llvm::AtomicRMWInst::FAdd && Val->
getType()->isFloatTy())
2012 RMW->setMetadata(
"amdgpu.ignore.denormal.mode", EmptyMD);
2015 return Builder.CreateBitCast(RMW, OrigTy);
2017 case AMDGPU::BI__builtin_amdgcn_s_sendmsg_rtn:
2018 case AMDGPU::BI__builtin_amdgcn_s_sendmsg_rtnl: {
2023 CGM.getIntrinsic(Intrinsic::amdgcn_s_sendmsg_rtn, {ResultType});
2024 return Builder.CreateCall(F, {Arg});
2026 case AMDGPU::BI__builtin_amdgcn_permlane16_swap:
2027 case AMDGPU::BI__builtin_amdgcn_permlane32_swap: {
2035 CGM.getIntrinsic(BuiltinID == AMDGPU::BI__builtin_amdgcn_permlane16_swap
2036 ? Intrinsic::amdgcn_permlane16_swap
2037 : Intrinsic::amdgcn_permlane32_swap);
2038 llvm::CallInst *
Call =
2039 Builder.CreateCall(F, {VDstOld, VSrcOld, FI, BoundCtrl});
2041 llvm::Value *Elt0 =
Builder.CreateExtractValue(
Call, 0);
2042 llvm::Value *Elt1 =
Builder.CreateExtractValue(
Call, 1);
2046 llvm::Value *Insert0 =
Builder.CreateInsertElement(
2047 llvm::PoisonValue::get(ResultType), Elt0, UINT64_C(0));
2048 llvm::Value *AsVector =
2049 Builder.CreateInsertElement(Insert0, Elt1, UINT64_C(1));
2052 case AMDGPU::BI__builtin_amdgcn_bitop3_b32:
2053 case AMDGPU::BI__builtin_amdgcn_bitop3_b16:
2055 Intrinsic::amdgcn_bitop3);
2056 case AMDGPU::BI__builtin_amdgcn_make_buffer_rsrc: {
2061 for (
unsigned I = 0; I < 4; ++I)
2063 llvm::PointerType *RetTy = llvm::PointerType::get(
2064 Builder.getContext(), llvm::AMDGPUAS::BUFFER_RESOURCE);
2065 Function *F =
CGM.getIntrinsic(Intrinsic::amdgcn_make_buffer_rsrc,
2066 {RetTy, Args[0]->getType()});
2067 return Builder.CreateCall(F, Args);
2069 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b8:
2070 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b16:
2071 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b32:
2072 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b64:
2073 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b96:
2074 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_b128:
2076 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_store);
2077 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_format_v4f32:
2078 case AMDGPU::BI__builtin_amdgcn_raw_buffer_store_format_v4f16:
2080 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_store_format);
2081 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b8:
2082 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b16:
2083 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b32:
2084 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b64:
2085 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b96:
2086 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b128: {
2087 llvm::Type *RetTy =
nullptr;
2088 switch (BuiltinID) {
2089 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b8:
2092 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b16:
2095 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b32:
2098 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b64:
2099 RetTy = llvm::FixedVectorType::get(
Int32Ty, 2);
2101 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b96:
2102 RetTy = llvm::FixedVectorType::get(
Int32Ty, 3);
2104 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_b128:
2105 RetTy = llvm::FixedVectorType::get(
Int32Ty, 4);
2109 CGM.getIntrinsic(Intrinsic::amdgcn_raw_ptr_buffer_load, RetTy);
2114 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_format_v4f32:
2115 case AMDGPU::BI__builtin_amdgcn_raw_buffer_load_format_v4f16: {
2118 CGM.getIntrinsic(Intrinsic::amdgcn_raw_ptr_buffer_load_format, {RetTy});
2124 case AMDGPU::BI__builtin_amdgcn_struct_buffer_store_format_v4f32:
2125 case AMDGPU::BI__builtin_amdgcn_struct_buffer_store_format_v4f16:
2127 *
this, E, Intrinsic::amdgcn_struct_ptr_buffer_store_format);
2128 case AMDGPU::BI__builtin_amdgcn_struct_buffer_load_format_v4f32:
2129 case AMDGPU::BI__builtin_amdgcn_struct_buffer_load_format_v4f16: {
2132 Intrinsic::amdgcn_struct_ptr_buffer_load_format, {RetTy});
2139 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_add_i32:
2141 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_add);
2142 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_f32:
2143 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fadd_v2f16:
2145 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_fadd);
2146 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmin_f32:
2147 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmin_f64:
2149 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_fmin);
2150 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmax_f32:
2151 case AMDGPU::BI__builtin_amdgcn_raw_ptr_buffer_atomic_fmax_f64:
2153 *
this, E, Intrinsic::amdgcn_raw_ptr_buffer_atomic_fmax);
2154 case AMDGPU::BI__builtin_amdgcn_s_prefetch_data:
2156 *
this, E, Intrinsic::amdgcn_s_prefetch_data);
2157 case Builtin::BIlogbf:
2158 case Builtin::BI__builtin_logbf: {
2162 CallInst *FrExp =
Builder.CreateCall(FrExpFunc, Src0);
2165 Exp, ConstantInt::getSigned(Exp->
getType(), -1),
"",
false,
true);
2170 Fabs, ConstantFP::getInfinity(
Builder.getFloatTy()));
2171 Value *Sel1 =
Builder.CreateSelect(FCmpONE, SIToFP, Fabs);
2173 Builder.CreateFCmpOEQ(Src0, ConstantFP::getZero(
Builder.getFloatTy()));
2176 ConstantFP::getInfinity(
Builder.getFloatTy(),
true), Sel1);
2179 case Builtin::BIlogb:
2180 case Builtin::BI__builtin_logb: {
2184 CallInst *FrExp =
Builder.CreateCall(FrExpFunc, Src0);
2187 Exp, ConstantInt::getSigned(Exp->
getType(), -1),
"",
false,
true);
2192 Fabs, ConstantFP::getInfinity(
Builder.getDoubleTy()));
2193 Value *Sel1 =
Builder.CreateSelect(FCmpONE, SIToFP, Fabs);
2195 Builder.CreateFCmpOEQ(Src0, ConstantFP::getZero(
Builder.getDoubleTy()));
2198 ConstantFP::getInfinity(
Builder.getDoubleTy(),
true),
2202 case Builtin::BIscalbnf:
2203 case Builtin::BI__builtin_scalbnf:
2204 case Builtin::BIscalbn:
2205 case Builtin::BI__builtin_scalbn:
2207 *
this, E, Intrinsic::ldexp, Intrinsic::experimental_constrained_ldexp);