aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/DirectX/DXILOpBuilder.cpp
diff options
context:
space:
mode:
authorHelena Kotas <hekotas@microsoft.com>2025-10-15 17:54:15 -0700
committerGitHub <noreply@github.com>2025-10-15 17:54:15 -0700
commit78d98161b9e38e492023ea2abda72a570bcdbee3 (patch)
treef6afb59d19e2f1579289b132e90cbfd703e13e9a /llvm/lib/Target/DirectX/DXILOpBuilder.cpp
parent333c75846d34b0b486385136f22d1d4d4f108b62 (diff)
downloadllvm-78d98161b9e38e492023ea2abda72a570bcdbee3.zip
llvm-78d98161b9e38e492023ea2abda72a570bcdbee3.tar.gz
llvm-78d98161b9e38e492023ea2abda72a570bcdbee3.tar.bz2
[DirectX] Add `llvm.dx.resource.getdimensions.x` intrinsic and lowering to DXIL (#161753)
Introduces LLVM intrinsic `llvm.dx.resource.getdimensions.x` and its lowering to DXIL op `op.dx.getDimensions`. The intrinsic will be used to implement `GetDimension` for buffers. The lowering is using `undef` value since it is required by the DXIL format which is based on LLVM 3.7. Proposal update: https://github.com/llvm/wg-hlsl/pull/350 Closes #112982
Diffstat (limited to 'llvm/lib/Target/DirectX/DXILOpBuilder.cpp')
-rw-r--r--llvm/lib/Target/DirectX/DXILOpBuilder.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Target/DirectX/DXILOpBuilder.cpp b/llvm/lib/Target/DirectX/DXILOpBuilder.cpp
index 1aed8f9..944b2e6 100644
--- a/llvm/lib/Target/DirectX/DXILOpBuilder.cpp
+++ b/llvm/lib/Target/DirectX/DXILOpBuilder.cpp
@@ -261,6 +261,12 @@ static StructType *getBinaryWithCarryType(LLVMContext &Context) {
return StructType::create({Int32Ty, Int1Ty}, "dx.types.i32c");
}
+static StructType *getDimensionsType(LLVMContext &Ctx) {
+ Type *Int32Ty = Type::getInt32Ty(Ctx);
+ return getOrCreateStructType("dx.types.Dimensions",
+ {Int32Ty, Int32Ty, Int32Ty, Int32Ty}, Ctx);
+}
+
static Type *getTypeFromOpParamType(OpParamType Kind, LLVMContext &Ctx,
Type *OverloadTy) {
switch (Kind) {
@@ -318,6 +324,8 @@ static Type *getTypeFromOpParamType(OpParamType Kind, LLVMContext &Ctx,
return getSplitDoubleType(Ctx);
case OpParamType::BinaryWithCarryTy:
return getBinaryWithCarryType(Ctx);
+ case OpParamType::DimensionsTy:
+ return getDimensionsType(Ctx);
}
llvm_unreachable("Invalid parameter kind");
return nullptr;