@@ -184,29 +184,7 @@ static Value *EmitAMDGCNBallotForExec(CodeGenFunction &CGF, const CallExpr *E,
184184 return Call;
185185}
186186
187- static bool IsImageSampleBuiltIn (unsigned BuiltinID) {
188- switch (BuiltinID) {
189- case clang::AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f32_f32:
190- case clang::AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f16_f32:
191- case clang::AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f32_f32:
192- case clang::AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f16_f32:
193- case clang::AMDGPU::BI__builtin_amdgcn_image_sample_2d_f32_f32:
194- case clang::AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f32_f32:
195- case clang::AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f16_f32:
196- case clang::AMDGPU::BI__builtin_amdgcn_image_sample_2darray_f32_f32:
197- case clang::AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f32_f32:
198- case clang::AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f16_f32:
199- case clang::AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f32_f32:
200- case clang::AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f16_f32:
201- case clang::AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f32_f32:
202- case clang::AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f16_f32:
203- return true ;
204- default :
205- return false ;
206- }
207- }
208-
209- static llvm::Value *LoadTextureDescPtorAsVec8I32 (CodeGenFunction &CGF,
187+ static llvm::Value *loadTextureDescPtorAsVec8I32 (CodeGenFunction &CGF,
210188 llvm::Value *RsrcPtr) {
211189 auto &B = CGF.Builder ;
212190 auto *VecTy = llvm::FixedVectorType::get (B.getInt32Ty (), 8 );
@@ -215,15 +193,15 @@ static llvm::Value *LoadTextureDescPtorAsVec8I32(CodeGenFunction &CGF,
215193 return RsrcPtr;
216194
217195 if (RsrcPtr->getType ()->isIntegerTy (32 )) {
218- unsigned AS = 8 ;
219- llvm::PointerType *VecPtrTy = llvm::PointerType::get (VecTy, AS );
196+ llvm::PointerType *VecPtrTy =
197+ llvm::PointerType::get (CGF. getLLVMContext (), 8 );
220198 llvm::Value *Ptr = B.CreateIntToPtr (RsrcPtr, VecPtrTy, " tex.rsrc.from.int" );
221199 return B.CreateAlignedLoad (VecTy, Ptr, llvm::Align (32 ), " tex.rsrc.val" );
222200 }
223201
224202 if (RsrcPtr->getType ()->isPointerTy ()) {
225- unsigned AS = RsrcPtr-> getType ()-> getPointerAddressSpace ();
226- auto *VecPtrTy = llvm::PointerType::get (VecTy, AS );
203+ auto *VecPtrTy = llvm::PointerType::get (
204+ CGF. getLLVMContext (), RsrcPtr-> getType ()-> getPointerAddressSpace () );
227205 llvm::Value *Typed = B.CreateBitCast (RsrcPtr, VecPtrTy, " tex.rsrc.typed" );
228206 return B.CreateAlignedLoad (VecTy, Typed, llvm::Align (32 ), " tex.rsrc.val" );
229207 }
@@ -232,40 +210,44 @@ static llvm::Value *LoadTextureDescPtorAsVec8I32(CodeGenFunction &CGF,
232210 if (DL.getTypeSizeInBits (RsrcPtr->getType ()) == 256 )
233211 return B.CreateBitCast (RsrcPtr, VecTy, " tex.rsrc.val" );
234212
235- RsrcPtr->getType ()->print (llvm::errs ());
236- llvm::report_fatal_error (" : Unexpected texture resource argument form" );
237- }
238-
239- static unsigned GetTextureDescIndex (unsigned BuiltinID, const CallExpr *E) {
240- unsigned N = E->getNumArgs ();
241- if (IsImageSampleBuiltIn (BuiltinID)) {
242- if (N < 5 )
243- return (unsigned )-1 ;
244- return N - 5 ;
245- }
246-
247- if (N < 3 )
248- return (unsigned )-1 ;
249- return N - 3 ;
213+ llvm::report_fatal_error (" Unexpected texture resource argument form" );
250214}
251215
252216llvm::CallInst *
253- EmitAMDGCNImageOverloadedReturnType (clang::CodeGen::CodeGenFunction &CGF,
217+ emitAMDGCNImageOverloadedReturnType (clang::CodeGen::CodeGenFunction &CGF,
254218 const clang::CallExpr *E,
255219 unsigned IntrinsicID, bool IsImageStore) {
220+ auto findTextureDescIndex = [&CGF](const CallExpr *E) -> unsigned {
221+ QualType TexQT = CGF.getContext ().AMDGPUTextureTy ;
222+ for (unsigned I = 0 , N = E->getNumArgs (); I < N; ++I) {
223+ QualType ArgTy = E->getArg (I)->getType ();
224+ if (ArgTy == TexQT) {
225+ return I;
226+ }
227+
228+ if (ArgTy.getCanonicalType () == TexQT.getCanonicalType ()) {
229+ return I;
230+ }
231+ }
232+
233+ return ~0U ;
234+ };
235+
256236 clang::SmallVector<llvm::Value *, 10 > Args;
257- unsigned RsrcIndex = GetTextureDescIndex (E->getBuiltinCallee (), E);
237+ unsigned RsrcIndex = findTextureDescIndex (E);
238+
239+ if (RsrcIndex == ~0U ) {
240+ llvm::report_fatal_error (" Invalid argument count for image builtin" );
241+ }
258242
259243 for (unsigned I = 0 ; I < E->getNumArgs (); ++I) {
260244 llvm::Value *V = CGF.EmitScalarExpr (E->getArg (I));
261245 if (I == RsrcIndex)
262- V = LoadTextureDescPtorAsVec8I32 (CGF, V);
246+ V = loadTextureDescPtorAsVec8I32 (CGF, V);
263247 Args.push_back (V);
264248 }
265249
266- llvm::Type *RetTy = CGF.ConvertType (E->getType ());
267- if (IsImageStore)
268- RetTy = CGF.VoidTy ;
250+ llvm::Type *RetTy = IsImageStore ? CGF.VoidTy : CGF.ConvertType (E->getType ());
269251 llvm::CallInst *Call = CGF.Builder .CreateIntrinsic (RetTy, IntrinsicID, Args);
270252 return Call;
271253}
@@ -1028,133 +1010,133 @@ Value *CodeGenFunction::EmitAMDGPUBuiltinExpr(unsigned BuiltinID,
10281010 }
10291011 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f32_i32:
10301012 case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f16_i32:
1031- return EmitAMDGCNImageOverloadedReturnType (
1013+ return emitAMDGCNImageOverloadedReturnType (
10321014 *this , E, Intrinsic::amdgcn_image_load_1d, false );
10331015 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f32_i32:
10341016 case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f16_i32:
1035- return EmitAMDGCNImageOverloadedReturnType (
1017+ return emitAMDGCNImageOverloadedReturnType (
10361018 *this , E, Intrinsic::amdgcn_image_load_1darray, false );
10371019 case AMDGPU::BI__builtin_amdgcn_image_load_2d_f32_i32:
10381020 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f32_i32:
10391021 case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f16_i32:
1040- return EmitAMDGCNImageOverloadedReturnType (
1022+ return emitAMDGCNImageOverloadedReturnType (
10411023 *this , E, Intrinsic::amdgcn_image_load_2d, false );
10421024 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_f32_i32:
10431025 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f32_i32:
10441026 case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f16_i32:
1045- return EmitAMDGCNImageOverloadedReturnType (
1027+ return emitAMDGCNImageOverloadedReturnType (
10461028 *this , E, Intrinsic::amdgcn_image_load_2darray, false );
10471029 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f32_i32:
10481030 case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f16_i32:
1049- return EmitAMDGCNImageOverloadedReturnType (
1031+ return emitAMDGCNImageOverloadedReturnType (
10501032 *this , E, Intrinsic::amdgcn_image_load_3d, false );
10511033 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f32_i32:
10521034 case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f16_i32:
1053- return EmitAMDGCNImageOverloadedReturnType (
1035+ return emitAMDGCNImageOverloadedReturnType (
10541036 *this , E, Intrinsic::amdgcn_image_load_cube, false );
10551037 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f32_i32:
10561038 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f16_i32:
1057- return EmitAMDGCNImageOverloadedReturnType (
1039+ return emitAMDGCNImageOverloadedReturnType (
10581040 *this , E, Intrinsic::amdgcn_image_load_mip_1d, false );
10591041 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f32_i32:
10601042 case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f16_i32:
1061- return EmitAMDGCNImageOverloadedReturnType (
1043+ return emitAMDGCNImageOverloadedReturnType (
10621044 *this , E, Intrinsic::amdgcn_image_load_mip_1darray, false );
10631045 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_f32_i32:
10641046 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f32_i32:
10651047 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f16_i32:
1066- return EmitAMDGCNImageOverloadedReturnType (
1048+ return emitAMDGCNImageOverloadedReturnType (
10671049 *this , E, Intrinsic::amdgcn_image_load_mip_2d, false );
10681050 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_f32_i32:
10691051 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f32_i32:
10701052 case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f16_i32:
1071- return EmitAMDGCNImageOverloadedReturnType (
1053+ return emitAMDGCNImageOverloadedReturnType (
10721054 *this , E, Intrinsic::amdgcn_image_load_mip_2darray, false );
10731055 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f32_i32:
10741056 case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f16_i32:
1075- return EmitAMDGCNImageOverloadedReturnType (
1057+ return emitAMDGCNImageOverloadedReturnType (
10761058 *this , E, Intrinsic::amdgcn_image_load_mip_3d, false );
10771059 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f32_i32:
10781060 case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f16_i32:
1079- return EmitAMDGCNImageOverloadedReturnType (
1061+ return emitAMDGCNImageOverloadedReturnType (
10801062 *this , E, Intrinsic::amdgcn_image_load_mip_cube, false );
10811063 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f32_i32:
10821064 case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f16_i32:
1083- return EmitAMDGCNImageOverloadedReturnType (
1065+ return emitAMDGCNImageOverloadedReturnType (
10841066 *this , E, Intrinsic::amdgcn_image_store_1d, true );
10851067 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f32_i32:
10861068 case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f16_i32:
1087- return EmitAMDGCNImageOverloadedReturnType (
1069+ return emitAMDGCNImageOverloadedReturnType (
10881070 *this , E, Intrinsic::amdgcn_image_store_1darray, true );
10891071 case AMDGPU::BI__builtin_amdgcn_image_store_2d_f32_i32:
10901072 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f32_i32:
10911073 case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f16_i32:
1092- return EmitAMDGCNImageOverloadedReturnType (
1074+ return emitAMDGCNImageOverloadedReturnType (
10931075 *this , E, Intrinsic::amdgcn_image_store_2d, true );
10941076 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_f32_i32:
10951077 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f32_i32:
10961078 case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f16_i32:
1097- return EmitAMDGCNImageOverloadedReturnType (
1079+ return emitAMDGCNImageOverloadedReturnType (
10981080 *this , E, Intrinsic::amdgcn_image_store_2darray, true );
10991081 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f32_i32:
11001082 case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f16_i32:
1101- return EmitAMDGCNImageOverloadedReturnType (
1083+ return emitAMDGCNImageOverloadedReturnType (
11021084 *this , E, Intrinsic::amdgcn_image_store_3d, true );
11031085 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f32_i32:
11041086 case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f16_i32:
1105- return EmitAMDGCNImageOverloadedReturnType (
1087+ return emitAMDGCNImageOverloadedReturnType (
11061088 *this , E, Intrinsic::amdgcn_image_store_cube, true );
11071089 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f32_i32:
11081090 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f16_i32:
1109- return EmitAMDGCNImageOverloadedReturnType (
1091+ return emitAMDGCNImageOverloadedReturnType (
11101092 *this , E, Intrinsic::amdgcn_image_store_mip_1d, true );
11111093 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f32_i32:
11121094 case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f16_i32:
1113- return EmitAMDGCNImageOverloadedReturnType (
1095+ return emitAMDGCNImageOverloadedReturnType (
11141096 *this , E, Intrinsic::amdgcn_image_store_mip_1darray, true );
11151097 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_f32_i32:
11161098 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f32_i32:
11171099 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f16_i32:
1118- return EmitAMDGCNImageOverloadedReturnType (
1100+ return emitAMDGCNImageOverloadedReturnType (
11191101 *this , E, Intrinsic::amdgcn_image_store_mip_2d, true );
11201102 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_f32_i32:
11211103 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f32_i32:
11221104 case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f16_i32:
1123- return EmitAMDGCNImageOverloadedReturnType (
1105+ return emitAMDGCNImageOverloadedReturnType (
11241106 *this , E, Intrinsic::amdgcn_image_store_mip_2darray, true );
11251107 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f32_i32:
11261108 case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f16_i32:
1127- return EmitAMDGCNImageOverloadedReturnType (
1109+ return emitAMDGCNImageOverloadedReturnType (
11281110 *this , E, Intrinsic::amdgcn_image_store_mip_3d, true );
11291111 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f32_i32:
11301112 case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f16_i32:
1131- return EmitAMDGCNImageOverloadedReturnType (
1113+ return emitAMDGCNImageOverloadedReturnType (
11321114 *this , E, Intrinsic::amdgcn_image_store_mip_cube, true );
11331115 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f32_f32:
11341116 case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f16_f32:
1135- return EmitAMDGCNImageOverloadedReturnType (
1117+ return emitAMDGCNImageOverloadedReturnType (
11361118 *this , E, Intrinsic::amdgcn_image_sample_1d, false );
11371119 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f32_f32:
11381120 case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f16_f32:
1139- return EmitAMDGCNImageOverloadedReturnType (
1121+ return emitAMDGCNImageOverloadedReturnType (
11401122 *this , E, Intrinsic::amdgcn_image_sample_1darray, false );
11411123 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_f32_f32:
11421124 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f32_f32:
11431125 case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f16_f32:
1144- return EmitAMDGCNImageOverloadedReturnType (
1126+ return emitAMDGCNImageOverloadedReturnType (
11451127 *this , E, Intrinsic::amdgcn_image_sample_2d, false );
11461128 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_f32_f32:
11471129 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f32_f32:
11481130 case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f16_f32:
1149- return EmitAMDGCNImageOverloadedReturnType (
1131+ return emitAMDGCNImageOverloadedReturnType (
11501132 *this , E, Intrinsic::amdgcn_image_sample_2darray, false );
11511133 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f32_f32:
11521134 case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f16_f32:
1153- return EmitAMDGCNImageOverloadedReturnType (
1135+ return emitAMDGCNImageOverloadedReturnType (
11541136 *this , E, Intrinsic::amdgcn_image_sample_3d, false );
11551137 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f32_f32:
11561138 case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f16_f32:
1157- return EmitAMDGCNImageOverloadedReturnType (
1139+ return emitAMDGCNImageOverloadedReturnType (
11581140 *this , E, Intrinsic::amdgcn_image_sample_cube, false );
11591141 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_16x16x128_f8f6f4:
11601142 case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_32x32x64_f8f6f4: {
0 commit comments