@@ -184,29 +184,7 @@ static Value *EmitAMDGCNBallotForExec(CodeGenFunction &CGF, const CallExpr *E,
184
184
return Call;
185
185
}
186
186
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,
210
188
llvm::Value *RsrcPtr) {
211
189
auto &B = CGF.Builder ;
212
190
auto *VecTy = llvm::FixedVectorType::get (B.getInt32Ty (), 8 );
@@ -215,15 +193,13 @@ static llvm::Value *LoadTextureDescPtorAsVec8I32(CodeGenFunction &CGF,
215
193
return RsrcPtr;
216
194
217
195
if (RsrcPtr->getType ()->isIntegerTy (32 )) {
218
- unsigned AS = 8 ;
219
- llvm::PointerType *VecPtrTy = llvm::PointerType::get (VecTy, AS);
196
+ llvm::PointerType *VecPtrTy = llvm::PointerType::get (CGF.getLLVMContext (), 8 );
220
197
llvm::Value *Ptr = B.CreateIntToPtr (RsrcPtr, VecPtrTy, " tex.rsrc.from.int" );
221
198
return B.CreateAlignedLoad (VecTy, Ptr, llvm::Align (32 ), " tex.rsrc.val" );
222
199
}
223
200
224
201
if (RsrcPtr->getType ()->isPointerTy ()) {
225
- unsigned AS = RsrcPtr->getType ()->getPointerAddressSpace ();
226
- auto *VecPtrTy = llvm::PointerType::get (VecTy, AS);
202
+ auto *VecPtrTy = llvm::PointerType::get (CGF.getLLVMContext (), RsrcPtr->getType ()->getPointerAddressSpace ());
227
203
llvm::Value *Typed = B.CreateBitCast (RsrcPtr, VecPtrTy, " tex.rsrc.typed" );
228
204
return B.CreateAlignedLoad (VecTy, Typed, llvm::Align (32 ), " tex.rsrc.val" );
229
205
}
@@ -232,40 +208,44 @@ static llvm::Value *LoadTextureDescPtorAsVec8I32(CodeGenFunction &CGF,
232
208
if (DL.getTypeSizeInBits (RsrcPtr->getType ()) == 256 )
233
209
return B.CreateBitCast (RsrcPtr, VecTy, " tex.rsrc.val" );
234
210
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 ;
211
+ llvm::report_fatal_error (" Unexpected texture resource argument form" );
250
212
}
251
213
252
214
llvm::CallInst *
253
- EmitAMDGCNImageOverloadedReturnType (clang::CodeGen::CodeGenFunction &CGF,
215
+ emitAMDGCNImageOverloadedReturnType (clang::CodeGen::CodeGenFunction &CGF,
254
216
const clang::CallExpr *E,
255
217
unsigned IntrinsicID, bool IsImageStore) {
218
+ auto findTextureDescIndex = [&CGF](const CallExpr *E) -> unsigned {
219
+ QualType TexQT = CGF.getContext ().AMDGPUTextureTy ;
220
+ for (unsigned I = 0 , N = E->getNumArgs (); I < N; ++I) {
221
+ QualType ArgTy = E->getArg (I)->getType ();
222
+ if (ArgTy == TexQT) {
223
+ return I;
224
+ }
225
+
226
+ if (ArgTy.getCanonicalType () == TexQT.getCanonicalType ()) {
227
+ return I;
228
+ }
229
+ }
230
+
231
+ return ~0U ;
232
+ };
233
+
256
234
clang::SmallVector<llvm::Value *, 10 > Args;
257
- unsigned RsrcIndex = GetTextureDescIndex (E->getBuiltinCallee (), E);
235
+ unsigned RsrcIndex = findTextureDescIndex (E);
236
+
237
+ if (RsrcIndex == ~0U ) {
238
+ llvm::report_fatal_error (" Invalid argument count for image builtin" );
239
+ }
258
240
259
241
for (unsigned I = 0 ; I < E->getNumArgs (); ++I) {
260
242
llvm::Value *V = CGF.EmitScalarExpr (E->getArg (I));
261
243
if (I == RsrcIndex)
262
- V = LoadTextureDescPtorAsVec8I32 (CGF, V);
244
+ V = loadTextureDescPtorAsVec8I32 (CGF, V);
263
245
Args.push_back (V);
264
246
}
265
247
266
- llvm::Type *RetTy = CGF.ConvertType (E->getType ());
267
- if (IsImageStore)
268
- RetTy = CGF.VoidTy ;
248
+ llvm::Type *RetTy = IsImageStore ? CGF.VoidTy : CGF.ConvertType (E->getType ());
269
249
llvm::CallInst *Call = CGF.Builder .CreateIntrinsic (RetTy, IntrinsicID, Args);
270
250
return Call;
271
251
}
@@ -1028,133 +1008,133 @@ Value *CodeGenFunction::EmitAMDGPUBuiltinExpr(unsigned BuiltinID,
1028
1008
}
1029
1009
case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f32_i32:
1030
1010
case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f16_i32:
1031
- return EmitAMDGCNImageOverloadedReturnType (
1011
+ return emitAMDGCNImageOverloadedReturnType (
1032
1012
*this , E, Intrinsic::amdgcn_image_load_1d, false );
1033
1013
case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f32_i32:
1034
1014
case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f16_i32:
1035
- return EmitAMDGCNImageOverloadedReturnType (
1015
+ return emitAMDGCNImageOverloadedReturnType (
1036
1016
*this , E, Intrinsic::amdgcn_image_load_1darray, false );
1037
1017
case AMDGPU::BI__builtin_amdgcn_image_load_2d_f32_i32:
1038
1018
case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f32_i32:
1039
1019
case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f16_i32:
1040
- return EmitAMDGCNImageOverloadedReturnType (
1020
+ return emitAMDGCNImageOverloadedReturnType (
1041
1021
*this , E, Intrinsic::amdgcn_image_load_2d, false );
1042
1022
case AMDGPU::BI__builtin_amdgcn_image_load_2darray_f32_i32:
1043
1023
case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f32_i32:
1044
1024
case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f16_i32:
1045
- return EmitAMDGCNImageOverloadedReturnType (
1025
+ return emitAMDGCNImageOverloadedReturnType (
1046
1026
*this , E, Intrinsic::amdgcn_image_load_2darray, false );
1047
1027
case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f32_i32:
1048
1028
case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f16_i32:
1049
- return EmitAMDGCNImageOverloadedReturnType (
1029
+ return emitAMDGCNImageOverloadedReturnType (
1050
1030
*this , E, Intrinsic::amdgcn_image_load_3d, false );
1051
1031
case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f32_i32:
1052
1032
case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f16_i32:
1053
- return EmitAMDGCNImageOverloadedReturnType (
1033
+ return emitAMDGCNImageOverloadedReturnType (
1054
1034
*this , E, Intrinsic::amdgcn_image_load_cube, false );
1055
1035
case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f32_i32:
1056
1036
case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f16_i32:
1057
- return EmitAMDGCNImageOverloadedReturnType (
1037
+ return emitAMDGCNImageOverloadedReturnType (
1058
1038
*this , E, Intrinsic::amdgcn_image_load_mip_1d, false );
1059
1039
case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f32_i32:
1060
1040
case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f16_i32:
1061
- return EmitAMDGCNImageOverloadedReturnType (
1041
+ return emitAMDGCNImageOverloadedReturnType (
1062
1042
*this , E, Intrinsic::amdgcn_image_load_mip_1darray, false );
1063
1043
case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_f32_i32:
1064
1044
case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f32_i32:
1065
1045
case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f16_i32:
1066
- return EmitAMDGCNImageOverloadedReturnType (
1046
+ return emitAMDGCNImageOverloadedReturnType (
1067
1047
*this , E, Intrinsic::amdgcn_image_load_mip_2d, false );
1068
1048
case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_f32_i32:
1069
1049
case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f32_i32:
1070
1050
case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f16_i32:
1071
- return EmitAMDGCNImageOverloadedReturnType (
1051
+ return emitAMDGCNImageOverloadedReturnType (
1072
1052
*this , E, Intrinsic::amdgcn_image_load_mip_2darray, false );
1073
1053
case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f32_i32:
1074
1054
case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f16_i32:
1075
- return EmitAMDGCNImageOverloadedReturnType (
1055
+ return emitAMDGCNImageOverloadedReturnType (
1076
1056
*this , E, Intrinsic::amdgcn_image_load_mip_3d, false );
1077
1057
case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f32_i32:
1078
1058
case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f16_i32:
1079
- return EmitAMDGCNImageOverloadedReturnType (
1059
+ return emitAMDGCNImageOverloadedReturnType (
1080
1060
*this , E, Intrinsic::amdgcn_image_load_mip_cube, false );
1081
1061
case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f32_i32:
1082
1062
case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f16_i32:
1083
- return EmitAMDGCNImageOverloadedReturnType (
1063
+ return emitAMDGCNImageOverloadedReturnType (
1084
1064
*this , E, Intrinsic::amdgcn_image_store_1d, true );
1085
1065
case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f32_i32:
1086
1066
case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f16_i32:
1087
- return EmitAMDGCNImageOverloadedReturnType (
1067
+ return emitAMDGCNImageOverloadedReturnType (
1088
1068
*this , E, Intrinsic::amdgcn_image_store_1darray, true );
1089
1069
case AMDGPU::BI__builtin_amdgcn_image_store_2d_f32_i32:
1090
1070
case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f32_i32:
1091
1071
case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f16_i32:
1092
- return EmitAMDGCNImageOverloadedReturnType (
1072
+ return emitAMDGCNImageOverloadedReturnType (
1093
1073
*this , E, Intrinsic::amdgcn_image_store_2d, true );
1094
1074
case AMDGPU::BI__builtin_amdgcn_image_store_2darray_f32_i32:
1095
1075
case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f32_i32:
1096
1076
case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f16_i32:
1097
- return EmitAMDGCNImageOverloadedReturnType (
1077
+ return emitAMDGCNImageOverloadedReturnType (
1098
1078
*this , E, Intrinsic::amdgcn_image_store_2darray, true );
1099
1079
case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f32_i32:
1100
1080
case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f16_i32:
1101
- return EmitAMDGCNImageOverloadedReturnType (
1081
+ return emitAMDGCNImageOverloadedReturnType (
1102
1082
*this , E, Intrinsic::amdgcn_image_store_3d, true );
1103
1083
case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f32_i32:
1104
1084
case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f16_i32:
1105
- return EmitAMDGCNImageOverloadedReturnType (
1085
+ return emitAMDGCNImageOverloadedReturnType (
1106
1086
*this , E, Intrinsic::amdgcn_image_store_cube, true );
1107
1087
case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f32_i32:
1108
1088
case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f16_i32:
1109
- return EmitAMDGCNImageOverloadedReturnType (
1089
+ return emitAMDGCNImageOverloadedReturnType (
1110
1090
*this , E, Intrinsic::amdgcn_image_store_mip_1d, true );
1111
1091
case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f32_i32:
1112
1092
case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f16_i32:
1113
- return EmitAMDGCNImageOverloadedReturnType (
1093
+ return emitAMDGCNImageOverloadedReturnType (
1114
1094
*this , E, Intrinsic::amdgcn_image_store_mip_1darray, true );
1115
1095
case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_f32_i32:
1116
1096
case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f32_i32:
1117
1097
case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f16_i32:
1118
- return EmitAMDGCNImageOverloadedReturnType (
1098
+ return emitAMDGCNImageOverloadedReturnType (
1119
1099
*this , E, Intrinsic::amdgcn_image_store_mip_2d, true );
1120
1100
case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_f32_i32:
1121
1101
case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f32_i32:
1122
1102
case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f16_i32:
1123
- return EmitAMDGCNImageOverloadedReturnType (
1103
+ return emitAMDGCNImageOverloadedReturnType (
1124
1104
*this , E, Intrinsic::amdgcn_image_store_mip_2darray, true );
1125
1105
case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f32_i32:
1126
1106
case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f16_i32:
1127
- return EmitAMDGCNImageOverloadedReturnType (
1107
+ return emitAMDGCNImageOverloadedReturnType (
1128
1108
*this , E, Intrinsic::amdgcn_image_store_mip_3d, true );
1129
1109
case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f32_i32:
1130
1110
case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f16_i32:
1131
- return EmitAMDGCNImageOverloadedReturnType (
1111
+ return emitAMDGCNImageOverloadedReturnType (
1132
1112
*this , E, Intrinsic::amdgcn_image_store_mip_cube, true );
1133
1113
case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f32_f32:
1134
1114
case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f16_f32:
1135
- return EmitAMDGCNImageOverloadedReturnType (
1115
+ return emitAMDGCNImageOverloadedReturnType (
1136
1116
*this , E, Intrinsic::amdgcn_image_sample_1d, false );
1137
1117
case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f32_f32:
1138
1118
case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f16_f32:
1139
- return EmitAMDGCNImageOverloadedReturnType (
1119
+ return emitAMDGCNImageOverloadedReturnType (
1140
1120
*this , E, Intrinsic::amdgcn_image_sample_1darray, false );
1141
1121
case AMDGPU::BI__builtin_amdgcn_image_sample_2d_f32_f32:
1142
1122
case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f32_f32:
1143
1123
case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f16_f32:
1144
- return EmitAMDGCNImageOverloadedReturnType (
1124
+ return emitAMDGCNImageOverloadedReturnType (
1145
1125
*this , E, Intrinsic::amdgcn_image_sample_2d, false );
1146
1126
case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_f32_f32:
1147
1127
case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f32_f32:
1148
1128
case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f16_f32:
1149
- return EmitAMDGCNImageOverloadedReturnType (
1129
+ return emitAMDGCNImageOverloadedReturnType (
1150
1130
*this , E, Intrinsic::amdgcn_image_sample_2darray, false );
1151
1131
case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f32_f32:
1152
1132
case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f16_f32:
1153
- return EmitAMDGCNImageOverloadedReturnType (
1133
+ return emitAMDGCNImageOverloadedReturnType (
1154
1134
*this , E, Intrinsic::amdgcn_image_sample_3d, false );
1155
1135
case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f32_f32:
1156
1136
case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f16_f32:
1157
- return EmitAMDGCNImageOverloadedReturnType (
1137
+ return emitAMDGCNImageOverloadedReturnType (
1158
1138
*this , E, Intrinsic::amdgcn_image_sample_cube, false );
1159
1139
case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_16x16x128_f8f6f4:
1160
1140
case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_32x32x64_f8f6f4: {
0 commit comments