@@ -683,27 +683,203 @@ Value *CodeGenFunction::EmitAMDGPUBuiltinExpr(unsigned BuiltinID,
683
683
684
684
return Builder.CreateInsertElement (I0, A, 1 );
685
685
}
686
- case AMDGPU::BI__builtin_amdgcn_image_load_2d_f32_i32: {
687
- llvm::Type *RetTy = llvm::Type::getFloatTy (Builder.getContext ());
688
- llvm::Type *IntTy = llvm::IntegerType::get (Builder.getContext (), 32u );
689
-
690
- llvm::Value *imm0 = llvm::ConstantInt::get (IntTy, 1 );
691
- llvm::Value *arg0 = EmitScalarExpr (E->getArg (0 ));
692
- llvm::Value *arg1 = EmitScalarExpr (E->getArg (1 ));
693
- llvm::Value *arg2 = EmitScalarExpr (E->getArg (2 ));
694
- llvm::Value *imm1 = llvm::ConstantInt::get (IntTy, 0 );
695
- llvm::Value *imm2 = llvm::ConstantInt::get (IntTy, 0 );
696
-
697
- SmallVector<Value *, 6 > ArgTys;
698
- ArgTys.push_back (imm0);
699
- ArgTys.push_back (arg0);
700
- ArgTys.push_back (arg1);
701
- ArgTys.push_back (arg2);
702
- ArgTys.push_back (imm1);
703
- ArgTys.push_back (imm2);
686
+ case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f32_i32:
687
+ case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f32_i32:
688
+ case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f16_i32:
689
+ case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f16_i32:
690
+ case AMDGPU::BI__builtin_amdgcn_image_load_2d_f32_i32:
691
+ case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f32_i32:
692
+ case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f16_i32:
693
+ case AMDGPU::BI__builtin_amdgcn_image_load_2darray_f32_i32:
694
+ case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f32_i32:
695
+ case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f16_i32:
696
+ case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f32_i32:
697
+ case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f16_i32:
698
+ case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f32_i32:
699
+ case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f16_i32:
700
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f32_i32:
701
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f16_i32:
702
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f32_i32:
703
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f16_i32:
704
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_f32_i32:
705
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f32_i32:
706
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f16_i32:
707
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_f32_i32:
708
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f32_i32:
709
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f16_i32:
710
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f32_i32:
711
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f16_i32:
712
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f32_i32:
713
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f16_i32: {
714
+ llvm::Type *RetTy = nullptr ;
715
+ switch (BuiltinID) {
716
+ case AMDGPU::BI__builtin_amdgcn_image_load_2d_f32_i32:
717
+ case AMDGPU::BI__builtin_amdgcn_image_load_2darray_f32_i32:
718
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_f32_i32:
719
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_f32_i32:
720
+ RetTy = llvm::Type::getFloatTy (Builder.getContext ());
721
+ break ;
722
+ case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f32_i32:
723
+ case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f32_i32:
724
+ case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f32_i32:
725
+ case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f32_i32:
726
+ case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f32_i32:
727
+ case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f32_i32:
728
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f32_i32:
729
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f32_i32:
730
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f32_i32:
731
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f32_i32:
732
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f32_i32:
733
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f32_i32:
734
+ RetTy =
735
+ FixedVectorType::get (llvm::Type::getFloatTy (Builder.getContext ()), 4 );
736
+ break ;
737
+ case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f16_i32:
738
+ case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f16_i32:
739
+ case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f16_i32:
740
+ case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f16_i32:
741
+ case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f16_i32:
742
+ case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f16_i32:
743
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f16_i32:
744
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f16_i32:
745
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f16_i32:
746
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f16_i32:
747
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f16_i32:
748
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f16_i32:
749
+ RetTy =
750
+ FixedVectorType::get (llvm::Type::getHalfTy (Builder.getContext ()), 4 );
751
+ break ;
752
+ }
704
753
705
- llvm::CallInst *Call =
706
- Builder.CreateIntrinsic (RetTy, Intrinsic::amdgcn_image_load_2d, ArgTys);
754
+ llvm::Value *Dmask = EmitScalarExpr (E->getArg (0 ));
755
+ llvm::Value *S = EmitScalarExpr (E->getArg (1 ));
756
+ llvm::Value *T = EmitScalarExpr (E->getArg (2 ));
757
+ llvm::Value *Slice;
758
+ llvm::Value *Mip;
759
+ llvm::Value *Rsrc;
760
+ llvm::Value *Tfe;
761
+ llvm::Value *Cpol;
762
+
763
+ SmallVector<Value *, 10 > ArgTys;
764
+
765
+ Intrinsic::ID IID;
766
+ llvm::CallInst *Call;
767
+
768
+ switch (BuiltinID) {
769
+ case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f32_i32:
770
+ case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f16_i32: {
771
+ Rsrc = EmitScalarExpr (E->getArg (2 ));
772
+ Tfe = EmitScalarExpr (E->getArg (3 ));
773
+ Cpol = EmitScalarExpr (E->getArg (4 ));
774
+
775
+ ArgTys = {Dmask, S, Rsrc, Tfe, Cpol};
776
+ IID = Intrinsic::amdgcn_image_load_1d;
777
+ Call = Builder.CreateIntrinsic (RetTy, IID, ArgTys);
778
+ break ;
779
+ }
780
+ case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f32_i32:
781
+ case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f16_i32:
782
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f32_i32:
783
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f16_i32: {
784
+ Slice = EmitScalarExpr (E->getArg (2 ));
785
+ Rsrc = EmitScalarExpr (E->getArg (3 ));
786
+ Tfe = EmitScalarExpr (E->getArg (4 ));
787
+ Cpol = EmitScalarExpr (E->getArg (5 ));
788
+
789
+ ArgTys = {Dmask, S, Slice, Rsrc, Tfe, Cpol};
790
+ IID = Intrinsic::amdgcn_image_load_1darray;
791
+ switch (BuiltinID) {
792
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f32_i32:
793
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f16_i32:
794
+ IID = Intrinsic::amdgcn_image_load_mip_1d;
795
+ break ;
796
+ }
797
+ Call = Builder.CreateIntrinsic (RetTy, IID, ArgTys);
798
+ break ;
799
+ }
800
+ case AMDGPU::BI__builtin_amdgcn_image_load_2d_f32_i32:
801
+ case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f32_i32:
802
+ case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f16_i32: {
803
+ Rsrc = EmitScalarExpr (E->getArg (3 ));
804
+ Tfe = EmitScalarExpr (E->getArg (4 ));
805
+ Cpol = EmitScalarExpr (E->getArg (5 ));
806
+
807
+ ArgTys = {Dmask, S, T, Rsrc, Tfe, Cpol};
808
+ IID = Intrinsic::amdgcn_image_load_2d;
809
+ Call = Builder.CreateIntrinsic (RetTy, IID, ArgTys);
810
+ break ;
811
+ }
812
+ case AMDGPU::BI__builtin_amdgcn_image_load_2darray_f32_i32:
813
+ case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f32_i32:
814
+ case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f16_i32:
815
+ case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f32_i32:
816
+ case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f16_i32:
817
+ case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f32_i32:
818
+ case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f16_i32:
819
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f32_i32:
820
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f16_i32:
821
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_f32_i32:
822
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f32_i32:
823
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f16_i32: {
824
+ Slice = EmitScalarExpr (E->getArg (3 ));
825
+ Rsrc = EmitScalarExpr (E->getArg (4 ));
826
+ Tfe = EmitScalarExpr (E->getArg (5 ));
827
+ Cpol = EmitScalarExpr (E->getArg (6 ));
828
+
829
+ ArgTys = {Dmask, S, T, Slice, Rsrc, Tfe, Cpol};
830
+ IID = Intrinsic::amdgcn_image_load_2darray;
831
+
832
+ switch (BuiltinID) {
833
+ case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f32_i32:
834
+ case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f16_i32:
835
+ IID = Intrinsic::amdgcn_image_load_3d;
836
+ break ;
837
+ case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f32_i32:
838
+ case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f16_i32:
839
+ IID = Intrinsic::amdgcn_image_load_cube;
840
+ break ;
841
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f32_i32:
842
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f16_i32:
843
+ IID = Intrinsic::amdgcn_image_load_mip_1darray;
844
+ break ;
845
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_f32_i32:
846
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f32_i32:
847
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f16_i32:
848
+ IID = Intrinsic::amdgcn_image_load_mip_2d;
849
+ break ;
850
+ }
851
+ Call = Builder.CreateIntrinsic (RetTy, IID, ArgTys);
852
+ break ;
853
+ }
854
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_f32_i32:
855
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f32_i32:
856
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f16_i32:
857
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f32_i32:
858
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f16_i32:
859
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f32_i32:
860
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f16_i32: {
861
+ Slice = EmitScalarExpr (E->getArg (3 ));
862
+ Mip = EmitScalarExpr (E->getArg (4 ));
863
+ Rsrc = EmitScalarExpr (E->getArg (5 ));
864
+ Tfe = EmitScalarExpr (E->getArg (6 ));
865
+ Cpol = EmitScalarExpr (E->getArg (7 ));
866
+
867
+ ArgTys = {Dmask, S, T, Slice, Mip, Rsrc, Tfe, Cpol};
868
+ IID = Intrinsic::amdgcn_image_load_mip_2darray;
869
+ switch (BuiltinID) {
870
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f32_i32:
871
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f16_i32:
872
+ IID = Intrinsic::amdgcn_image_load_mip_3d;
873
+ break ;
874
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f32_i32:
875
+ case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f16_i32:
876
+ IID = Intrinsic::amdgcn_image_load_mip_cube;
877
+ break ;
878
+ }
879
+ Call = Builder.CreateIntrinsic (RetTy, IID, ArgTys);
880
+ break ;
881
+ }
882
+ }
707
883
708
884
return Call;
709
885
}
0 commit comments