[clang] [AMDGPU] Support for type inferring image load/store builtins for AMDGPU (PR #140210)
Rana Pratap Reddy via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 8 02:16:39 PDT 2025
================
@@ -181,6 +184,92 @@ static Value *EmitAMDGCNBallotForExec(CodeGenFunction &CGF, const CallExpr *E,
return Call;
}
+static bool IsImageSampleBuiltIn(unsigned BuiltinID) {
+ switch (BuiltinID) {
+ case clang::AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f32_f32:
+ case clang::AMDGPU::BI__builtin_amdgcn_image_sample_1d_v4f16_f32:
+ case clang::AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f32_f32:
+ case clang::AMDGPU::BI__builtin_amdgcn_image_sample_1darray_v4f16_f32:
+ case clang::AMDGPU::BI__builtin_amdgcn_image_sample_2d_f32_f32:
+ case clang::AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f32_f32:
+ case clang::AMDGPU::BI__builtin_amdgcn_image_sample_2d_v4f16_f32:
+ case clang::AMDGPU::BI__builtin_amdgcn_image_sample_2darray_f32_f32:
+ case clang::AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f32_f32:
+ case clang::AMDGPU::BI__builtin_amdgcn_image_sample_2darray_v4f16_f32:
+ case clang::AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f32_f32:
+ case clang::AMDGPU::BI__builtin_amdgcn_image_sample_3d_v4f16_f32:
+ case clang::AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f32_f32:
+ case clang::AMDGPU::BI__builtin_amdgcn_image_sample_cube_v4f16_f32:
+ return true;
+ default:
+ return false;
+ }
+}
+
+static llvm::Value *LoadTextureDescPtorAsVec8I32(CodeGenFunction &CGF,
+ llvm::Value *RsrcPtr) {
+ auto &B = CGF.Builder;
+ auto *VecTy = llvm::FixedVectorType::get(B.getInt32Ty(), 8);
+
+ if (RsrcPtr->getType() == VecTy)
+ return RsrcPtr;
+
+ if (RsrcPtr->getType()->isIntegerTy(32)) {
+ unsigned AS = 8;
+ llvm::PointerType *VecPtrTy = llvm::PointerType::get(VecTy, AS);
+ llvm::Value *Ptr = B.CreateIntToPtr(RsrcPtr, VecPtrTy, "tex.rsrc.from.int");
+ return B.CreateAlignedLoad(VecTy, Ptr, llvm::Align(32), "tex.rsrc.val");
+ }
+
+ if (RsrcPtr->getType()->isPointerTy()) {
+ unsigned AS = RsrcPtr->getType()->getPointerAddressSpace();
+ auto *VecPtrTy = llvm::PointerType::get(VecTy, AS);
+ llvm::Value *Typed = B.CreateBitCast(RsrcPtr, VecPtrTy, "tex.rsrc.typed");
+ return B.CreateAlignedLoad(VecTy, Typed, llvm::Align(32), "tex.rsrc.val");
+ }
+
+ const auto &DL = CGF.CGM.getDataLayout();
+ if (DL.getTypeSizeInBits(RsrcPtr->getType()) == 256)
+ return B.CreateBitCast(RsrcPtr, VecTy, "tex.rsrc.val");
+
+ RsrcPtr->getType()->print(llvm::errs());
+ llvm::report_fatal_error(": Unexpected texture resource argument form");
+}
+
+static unsigned GetTextureDescIndex(unsigned BuiltinID, const CallExpr *E) {
----------------
ranapratap55 wrote:
Updated with lambda.
https://github.com/llvm/llvm-project/pull/140210
More information about the cfe-commits
mailing list