[clang] [HLSL] Codegen for indexing of sub-arrays of multi-dimensional resource arrays (PR #154248)
Chris B via cfe-commits
cfe-commits at lists.llvm.org
Wed Aug 27 10:22:15 PDT 2025
================
@@ -190,6 +192,71 @@ static void createResourceCtorArgs(CodeGenModule &CGM, CXXConstructorDecl *CD,
Args.add(RValue::get(NameStr), AST.getPointerType(AST.CharTy.withConst()));
}
+// Initializes local resource array variable. For multi-dimensional arrays it
+// calls itself recursively to initialize its sub-arrays. The Index used in the
+// resource constructor calls will begin at StartIndex and will be incremented
+// for each array element. The last used resource Index is returned to the
+// caller.
+static Value *initializeLocalResourceArray(
+ CodeGenFunction &CGF, AggValueSlot &ValueSlot,
+ const ConstantArrayType *ArrayTy, CXXConstructorDecl *CD,
+ llvm::Value *Range, llvm::Value *StartIndex, StringRef ResourceName,
+ HLSLResourceBindingAttr *RBA, HLSLVkBindingAttr *VkBinding,
+ ArrayRef<llvm::Value *> PrevGEPIndices, SourceLocation ArraySubsExprLoc) {
+
+ llvm::IntegerType *IntTy = CGF.CGM.IntTy;
+ llvm::Value *Index = StartIndex;
+ llvm::Value *One = llvm::ConstantInt::get(IntTy, 1);
+ uint64_t ArraySize = ArrayTy->getSExtSize();
+ QualType ElemType = ArrayTy->getElementType();
+ Address TmpArrayAddr = ValueSlot.getAddress();
+
+ // Add additional index to the getelementptr call indices.
+ // This index will be updated for each array element in the loops below.
+ SmallVector<llvm::Value *> GEPIndices(PrevGEPIndices);
+ GEPIndices.push_back(llvm::ConstantInt::get(IntTy, 0));
+
+ // array of arrays - recursively initialize the sub-arrays
+ if (ElemType->isArrayType()) {
+ const ConstantArrayType *SubArrayTy = cast<ConstantArrayType>(ElemType);
+ for (uint64_t I = 0; I < ArraySize; I++) {
+ if (I > 0) {
+ Index = CGF.Builder.CreateAdd(Index, One);
+ GEPIndices.back() = llvm::ConstantInt::get(IntTy, I);
+ }
+ // recursively initialize the sub-array
----------------
llvm-beanz wrote:
```suggestion
// Recursively initialize the sub-array.
```
https://github.com/llvm/llvm-project/pull/154248
More information about the cfe-commits
mailing list