Skip to content

Commit 8337bc5

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

File tree

6 files changed

+62
-82
lines changed

6 files changed

+62
-82
lines changed

clang/lib/CodeGen/TargetBuiltins/AMDGPU.cpp

Lines changed: 58 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,13 @@ 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 = llvm::PointerType::get(CGF.getLLVMContext(), 8);
220197
llvm::Value *Ptr = B.CreateIntToPtr(RsrcPtr, VecPtrTy, "tex.rsrc.from.int");
221198
return B.CreateAlignedLoad(VecTy, Ptr, llvm::Align(32), "tex.rsrc.val");
222199
}
223200

224201
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());
227203
llvm::Value *Typed = B.CreateBitCast(RsrcPtr, VecPtrTy, "tex.rsrc.typed");
228204
return B.CreateAlignedLoad(VecTy, Typed, llvm::Align(32), "tex.rsrc.val");
229205
}
@@ -232,40 +208,44 @@ static llvm::Value *LoadTextureDescPtorAsVec8I32(CodeGenFunction &CGF,
232208
if (DL.getTypeSizeInBits(RsrcPtr->getType()) == 256)
233209
return B.CreateBitCast(RsrcPtr, VecTy, "tex.rsrc.val");
234210

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");
250212
}
251213

252214
llvm::CallInst *
253-
EmitAMDGCNImageOverloadedReturnType(clang::CodeGen::CodeGenFunction &CGF,
215+
emitAMDGCNImageOverloadedReturnType(clang::CodeGen::CodeGenFunction &CGF,
254216
const clang::CallExpr *E,
255217
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+
256234
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+
}
258240

259241
for (unsigned I = 0; I < E->getNumArgs(); ++I) {
260242
llvm::Value *V = CGF.EmitScalarExpr(E->getArg(I));
261243
if (I == RsrcIndex)
262-
V = LoadTextureDescPtorAsVec8I32(CGF, V);
244+
V = loadTextureDescPtorAsVec8I32(CGF, V);
263245
Args.push_back(V);
264246
}
265247

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());
269249
llvm::CallInst *Call = CGF.Builder.CreateIntrinsic(RetTy, IntrinsicID, Args);
270250
return Call;
271251
}
@@ -1028,133 +1008,133 @@ Value *CodeGenFunction::EmitAMDGPUBuiltinExpr(unsigned BuiltinID,
10281008
}
10291009
case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f32_i32:
10301010
case AMDGPU::BI__builtin_amdgcn_image_load_1d_v4f16_i32:
1031-
return EmitAMDGCNImageOverloadedReturnType(
1011+
return emitAMDGCNImageOverloadedReturnType(
10321012
*this, E, Intrinsic::amdgcn_image_load_1d, false);
10331013
case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f32_i32:
10341014
case AMDGPU::BI__builtin_amdgcn_image_load_1darray_v4f16_i32:
1035-
return EmitAMDGCNImageOverloadedReturnType(
1015+
return emitAMDGCNImageOverloadedReturnType(
10361016
*this, E, Intrinsic::amdgcn_image_load_1darray, false);
10371017
case AMDGPU::BI__builtin_amdgcn_image_load_2d_f32_i32:
10381018
case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f32_i32:
10391019
case AMDGPU::BI__builtin_amdgcn_image_load_2d_v4f16_i32:
1040-
return EmitAMDGCNImageOverloadedReturnType(
1020+
return emitAMDGCNImageOverloadedReturnType(
10411021
*this, E, Intrinsic::amdgcn_image_load_2d, false);
10421022
case AMDGPU::BI__builtin_amdgcn_image_load_2darray_f32_i32:
10431023
case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f32_i32:
10441024
case AMDGPU::BI__builtin_amdgcn_image_load_2darray_v4f16_i32:
1045-
return EmitAMDGCNImageOverloadedReturnType(
1025+
return emitAMDGCNImageOverloadedReturnType(
10461026
*this, E, Intrinsic::amdgcn_image_load_2darray, false);
10471027
case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f32_i32:
10481028
case AMDGPU::BI__builtin_amdgcn_image_load_3d_v4f16_i32:
1049-
return EmitAMDGCNImageOverloadedReturnType(
1029+
return emitAMDGCNImageOverloadedReturnType(
10501030
*this, E, Intrinsic::amdgcn_image_load_3d, false);
10511031
case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f32_i32:
10521032
case AMDGPU::BI__builtin_amdgcn_image_load_cube_v4f16_i32:
1053-
return EmitAMDGCNImageOverloadedReturnType(
1033+
return emitAMDGCNImageOverloadedReturnType(
10541034
*this, E, Intrinsic::amdgcn_image_load_cube, false);
10551035
case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f32_i32:
10561036
case AMDGPU::BI__builtin_amdgcn_image_load_mip_1d_v4f16_i32:
1057-
return EmitAMDGCNImageOverloadedReturnType(
1037+
return emitAMDGCNImageOverloadedReturnType(
10581038
*this, E, Intrinsic::amdgcn_image_load_mip_1d, false);
10591039
case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f32_i32:
10601040
case AMDGPU::BI__builtin_amdgcn_image_load_mip_1darray_v4f16_i32:
1061-
return EmitAMDGCNImageOverloadedReturnType(
1041+
return emitAMDGCNImageOverloadedReturnType(
10621042
*this, E, Intrinsic::amdgcn_image_load_mip_1darray, false);
10631043
case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_f32_i32:
10641044
case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f32_i32:
10651045
case AMDGPU::BI__builtin_amdgcn_image_load_mip_2d_v4f16_i32:
1066-
return EmitAMDGCNImageOverloadedReturnType(
1046+
return emitAMDGCNImageOverloadedReturnType(
10671047
*this, E, Intrinsic::amdgcn_image_load_mip_2d, false);
10681048
case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_f32_i32:
10691049
case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f32_i32:
10701050
case AMDGPU::BI__builtin_amdgcn_image_load_mip_2darray_v4f16_i32:
1071-
return EmitAMDGCNImageOverloadedReturnType(
1051+
return emitAMDGCNImageOverloadedReturnType(
10721052
*this, E, Intrinsic::amdgcn_image_load_mip_2darray, false);
10731053
case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f32_i32:
10741054
case AMDGPU::BI__builtin_amdgcn_image_load_mip_3d_v4f16_i32:
1075-
return EmitAMDGCNImageOverloadedReturnType(
1055+
return emitAMDGCNImageOverloadedReturnType(
10761056
*this, E, Intrinsic::amdgcn_image_load_mip_3d, false);
10771057
case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f32_i32:
10781058
case AMDGPU::BI__builtin_amdgcn_image_load_mip_cube_v4f16_i32:
1079-
return EmitAMDGCNImageOverloadedReturnType(
1059+
return emitAMDGCNImageOverloadedReturnType(
10801060
*this, E, Intrinsic::amdgcn_image_load_mip_cube, false);
10811061
case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f32_i32:
10821062
case AMDGPU::BI__builtin_amdgcn_image_store_1d_v4f16_i32:
1083-
return EmitAMDGCNImageOverloadedReturnType(
1063+
return emitAMDGCNImageOverloadedReturnType(
10841064
*this, E, Intrinsic::amdgcn_image_store_1d, true);
10851065
case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f32_i32:
10861066
case AMDGPU::BI__builtin_amdgcn_image_store_1darray_v4f16_i32:
1087-
return EmitAMDGCNImageOverloadedReturnType(
1067+
return emitAMDGCNImageOverloadedReturnType(
10881068
*this, E, Intrinsic::amdgcn_image_store_1darray, true);
10891069
case AMDGPU::BI__builtin_amdgcn_image_store_2d_f32_i32:
10901070
case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f32_i32:
10911071
case AMDGPU::BI__builtin_amdgcn_image_store_2d_v4f16_i32:
1092-
return EmitAMDGCNImageOverloadedReturnType(
1072+
return emitAMDGCNImageOverloadedReturnType(
10931073
*this, E, Intrinsic::amdgcn_image_store_2d, true);
10941074
case AMDGPU::BI__builtin_amdgcn_image_store_2darray_f32_i32:
10951075
case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f32_i32:
10961076
case AMDGPU::BI__builtin_amdgcn_image_store_2darray_v4f16_i32:
1097-
return EmitAMDGCNImageOverloadedReturnType(
1077+
return emitAMDGCNImageOverloadedReturnType(
10981078
*this, E, Intrinsic::amdgcn_image_store_2darray, true);
10991079
case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f32_i32:
11001080
case AMDGPU::BI__builtin_amdgcn_image_store_3d_v4f16_i32:
1101-
return EmitAMDGCNImageOverloadedReturnType(
1081+
return emitAMDGCNImageOverloadedReturnType(
11021082
*this, E, Intrinsic::amdgcn_image_store_3d, true);
11031083
case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f32_i32:
11041084
case AMDGPU::BI__builtin_amdgcn_image_store_cube_v4f16_i32:
1105-
return EmitAMDGCNImageOverloadedReturnType(
1085+
return emitAMDGCNImageOverloadedReturnType(
11061086
*this, E, Intrinsic::amdgcn_image_store_cube, true);
11071087
case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f32_i32:
11081088
case AMDGPU::BI__builtin_amdgcn_image_store_mip_1d_v4f16_i32:
1109-
return EmitAMDGCNImageOverloadedReturnType(
1089+
return emitAMDGCNImageOverloadedReturnType(
11101090
*this, E, Intrinsic::amdgcn_image_store_mip_1d, true);
11111091
case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f32_i32:
11121092
case AMDGPU::BI__builtin_amdgcn_image_store_mip_1darray_v4f16_i32:
1113-
return EmitAMDGCNImageOverloadedReturnType(
1093+
return emitAMDGCNImageOverloadedReturnType(
11141094
*this, E, Intrinsic::amdgcn_image_store_mip_1darray, true);
11151095
case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_f32_i32:
11161096
case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f32_i32:
11171097
case AMDGPU::BI__builtin_amdgcn_image_store_mip_2d_v4f16_i32:
1118-
return EmitAMDGCNImageOverloadedReturnType(
1098+
return emitAMDGCNImageOverloadedReturnType(
11191099
*this, E, Intrinsic::amdgcn_image_store_mip_2d, true);
11201100
case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_f32_i32:
11211101
case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f32_i32:
11221102
case AMDGPU::BI__builtin_amdgcn_image_store_mip_2darray_v4f16_i32:
1123-
return EmitAMDGCNImageOverloadedReturnType(
1103+
return emitAMDGCNImageOverloadedReturnType(
11241104
*this, E, Intrinsic::amdgcn_image_store_mip_2darray, true);
11251105
case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f32_i32:
11261106
case AMDGPU::BI__builtin_amdgcn_image_store_mip_3d_v4f16_i32:
1127-
return EmitAMDGCNImageOverloadedReturnType(
1107+
return emitAMDGCNImageOverloadedReturnType(
11281108
*this, E, Intrinsic::amdgcn_image_store_mip_3d, true);
11291109
case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f32_i32:
11301110
case AMDGPU::BI__builtin_amdgcn_image_store_mip_cube_v4f16_i32:
1131-
return EmitAMDGCNImageOverloadedReturnType(
1111+
return emitAMDGCNImageOverloadedReturnType(
11321112
*this, E, Intrinsic::amdgcn_image_store_mip_cube, true);
11331113
case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f32_f32:
11341114
case AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f16_f32:
1135-
return EmitAMDGCNImageOverloadedReturnType(
1115+
return emitAMDGCNImageOverloadedReturnType(
11361116
*this, E, Intrinsic::amdgcn_image_sample_1d, false);
11371117
case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f32_f32:
11381118
case AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f16_f32:
1139-
return EmitAMDGCNImageOverloadedReturnType(
1119+
return emitAMDGCNImageOverloadedReturnType(
11401120
*this, E, Intrinsic::amdgcn_image_sample_1darray, false);
11411121
case AMDGPU::BI__builtin_amdgcn_image_sample_2d_f32_f32:
11421122
case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f32_f32:
11431123
case AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f16_f32:
1144-
return EmitAMDGCNImageOverloadedReturnType(
1124+
return emitAMDGCNImageOverloadedReturnType(
11451125
*this, E, Intrinsic::amdgcn_image_sample_2d, false);
11461126
case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_f32_f32:
11471127
case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f32_f32:
11481128
case AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f16_f32:
1149-
return EmitAMDGCNImageOverloadedReturnType(
1129+
return emitAMDGCNImageOverloadedReturnType(
11501130
*this, E, Intrinsic::amdgcn_image_sample_2darray, false);
11511131
case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f32_f32:
11521132
case AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f16_f32:
1153-
return EmitAMDGCNImageOverloadedReturnType(
1133+
return emitAMDGCNImageOverloadedReturnType(
11541134
*this, E, Intrinsic::amdgcn_image_sample_3d, false);
11551135
case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f32_f32:
11561136
case AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f16_f32:
1157-
return EmitAMDGCNImageOverloadedReturnType(
1137+
return emitAMDGCNImageOverloadedReturnType(
11581138
*this, E, Intrinsic::amdgcn_image_sample_cube, false);
11591139
case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_16x16x128_f8f6f4:
11601140
case AMDGPU::BI__builtin_amdgcn_mfma_scale_f32_32x32x64_f8f6f4: {

clang/lib/Sema/SemaAMDGPU.cpp

Lines changed: 4 additions & 4 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)) ||
169+
return (SemaRef.BuiltinConstantArg(TheCall, 0, Result)) ||
170170
(SemaRef.BuiltinConstantArg(TheCall, ArgCount, Result)) ||
171-
(SemaRef.BuiltinConstantArg(TheCall, (ArgCount - 1), 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)) ||
213+
return (SemaRef.BuiltinConstantArg(TheCall, 1, Result)) ||
214214
(SemaRef.BuiltinConstantArg(TheCall, ArgCount, Result)) ||
215-
(SemaRef.BuiltinConstantArg(TheCall, (ArgCount - 1), Result)));
215+
(SemaRef.BuiltinConstantArg(TheCall, (ArgCount - 1), Result));
216216
}
217217
default:
218218
return false;
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)