@@ -318,14 +318,22 @@ class SPIRVToLLVMDbgTran {
318
318
319
319
OpDebugTypeArray arrayType (inst);
320
320
321
- auto size = BM->get <SPIRVConstant>(arrayType.getComponentCount ())->getZExtIntValue ();
322
321
auto baseType = createType (BM->get <SPIRVExtInst>(arrayType.getBaseType ()));
322
+ auto numDims = arrayType.getNumDims ();
323
323
324
- auto sr = Builder.getOrCreateSubrange (0 , size-1 );
325
- auto mds = llvm::makeArrayRef (llvm::cast<llvm::Metadata>(sr));
326
- llvm::DINodeArray subscripts = llvm::MDTuple::get (M->getContext (), mds);
324
+ SmallVector<llvm::Metadata *, 8 > subscripts;
325
+ uint64_t totalCount = 1 ;
327
326
328
- return addMDNode (inst, Builder.createArrayType (size * baseType->getSizeInBits (), 0 , baseType, subscripts));
327
+ for (unsigned int i = 0 ; i != numDims; i++)
328
+ {
329
+ auto val = BM->get <SPIRVConstant>(arrayType.getComponentCount (i))->getZExtIntValue ();
330
+ subscripts.push_back (Builder.getOrCreateSubrange (0 , val));
331
+ totalCount *= (uint64_t )(val);
332
+ }
333
+
334
+ DINodeArray subscriptArray = Builder.getOrCreateArray (subscripts);
335
+
336
+ return addMDNode (inst, Builder.createArrayType (totalCount * baseType->getSizeInBits (), 0 , baseType, subscriptArray));
329
337
}
330
338
331
339
DIType* createTypeVector (SPIRVExtInst* inst)
@@ -338,11 +346,11 @@ class SPIRVToLLVMDbgTran {
338
346
auto size = vectorType.getNumComponents ();
339
347
auto type = createType (BM->get <SPIRVExtInst>(vectorType.getBaseType ()));
340
348
341
- auto sr = Builder. getOrCreateSubrange ( 0 , size) ;
342
- auto mds = llvm::makeArrayRef (llvm::cast<llvm::Metadata>(sr ));
343
- llvm:: DINodeArray subscripts = llvm::MDTuple::get (M-> getContext (), mds );
349
+ SmallVector<llvm::Metadata *, 8 > subscripts ;
350
+ subscripts. push_back (Builder. getOrCreateSubrange ( 0 , size ));
351
+ DINodeArray subscriptArray = Builder. getOrCreateArray (subscripts );
344
352
345
- return addMDNode (inst, Builder.createVectorType (size, 0 , type, subscripts ));
353
+ return addMDNode (inst, Builder.createVectorType (size * type-> getSizeInBits () , 0 , type, subscriptArray ));
346
354
}
347
355
348
356
DIType* createTypeDef (SPIRVExtInst* inst)
0 commit comments