Skip to content

Commit fb0dc56

Browse files
committed
Updated getTextureDescIndex() to lambda and minor changes
1 parent 44e69e1 commit fb0dc56

File tree

6 files changed

+66
-84
lines changed

6 files changed

+66
-84
lines changed

clang/lib/CodeGen/TargetBuiltins/AMDGPU.cpp

Lines changed: 60 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -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

252216
llvm::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: {

clang/lib/Sema/SemaAMDGPU.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,9 @@ bool SemaAMDGPU::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID,
166166
unsigned ArgCount = TheCall->getNumArgs() - 1;
167167
llvm::APSInt Result;
168168

169-
return ((SemaRef.BuiltinConstantArg(TheCall, 0, Result)) ||
170-
(SemaRef.BuiltinConstantArg(TheCall, ArgCount, Result)) ||
171-
(SemaRef.BuiltinConstantArg(TheCall, (ArgCount - 1), Result)));
169+
return (SemaRef.BuiltinConstantArg(TheCall, 0, Result)) ||
170+
(SemaRef.BuiltinConstantArg(TheCall, ArgCount, Result)) ||
171+
(SemaRef.BuiltinConstantArg(TheCall, (ArgCount - 1), Result));
172172
}
173173
case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f32_i32:
174174
case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f32_i32:
@@ -210,9 +210,9 @@ bool SemaAMDGPU::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID,
210210
unsigned ArgCount = TheCall->getNumArgs() - 1;
211211
llvm::APSInt Result;
212212

213-
return ((SemaRef.BuiltinConstantArg(TheCall, 1, Result)) ||
214-
(SemaRef.BuiltinConstantArg(TheCall, ArgCount, Result)) ||
215-
(SemaRef.BuiltinConstantArg(TheCall, (ArgCount - 1), Result)));
213+
return (SemaRef.BuiltinConstantArg(TheCall, 1, Result)) ||
214+
(SemaRef.BuiltinConstantArg(TheCall, ArgCount, Result)) ||
215+
(SemaRef.BuiltinConstantArg(TheCall, (ArgCount - 1), Result));
216216
}
217217
default:
218218
return false;

0 commit comments

Comments
 (0)