@@ -683,27 +683,203 @@ Value *CodeGenFunction::EmitAMDGPUBuiltinExpr(unsigned BuiltinID,
683683
684684 return Builder.CreateInsertElement (I0, A, 1 );
685685 }
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+ }
704753
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+ }
707883
708884 return Call;
709885 }
0 commit comments