@@ -353,14 +353,9 @@ void UnrankedMemRefDescriptor::unpack(OpBuilder &builder, Location loc,
353
353
results.push_back (d.memRefDescPtr (builder, loc));
354
354
}
355
355
356
- void UnrankedMemRefDescriptor::computeSizes (
356
+ Value UnrankedMemRefDescriptor::computeSize (
357
357
OpBuilder &builder, Location loc, const LLVMTypeConverter &typeConverter,
358
- ArrayRef<UnrankedMemRefDescriptor> values, ArrayRef<unsigned > addressSpaces,
359
- SmallVectorImpl<Value> &sizes) {
360
- if (values.empty ())
361
- return ;
362
- assert (values.size () == addressSpaces.size () &&
363
- " must provide address space for each descriptor" );
358
+ UnrankedMemRefDescriptor desc, unsigned addressSpace) {
364
359
// Cache the index type.
365
360
Type indexType = typeConverter.getIndexType ();
366
361
@@ -371,34 +366,31 @@ void UnrankedMemRefDescriptor::computeSizes(
371
366
builder, loc, indexType,
372
367
llvm::divideCeil (typeConverter.getIndexTypeBitwidth (), 8 ));
373
368
374
- sizes.reserve (sizes.size () + values.size ());
375
- for (auto [desc, addressSpace] : llvm::zip (values, addressSpaces)) {
376
- // Emit IR computing the memory necessary to store the descriptor. This
377
- // assumes the descriptor to be
378
- // { type*, type*, index, index[rank], index[rank] }
379
- // and densely packed, so the total size is
380
- // 2 * sizeof(pointer) + (1 + 2 * rank) * sizeof(index).
381
- // TODO: consider including the actual size (including eventual padding due
382
- // to data layout) into the unranked descriptor.
383
- Value pointerSize = createIndexAttrConstant (
384
- builder, loc, indexType,
385
- llvm::divideCeil (typeConverter.getPointerBitwidth (addressSpace), 8 ));
386
- Value doublePointerSize =
387
- LLVM::MulOp::create (builder, loc, indexType, two, pointerSize);
388
-
389
- // (1 + 2 * rank) * sizeof(index)
390
- Value rank = desc.rank (builder, loc);
391
- Value doubleRank = LLVM::MulOp::create (builder, loc, indexType, two, rank);
392
- Value doubleRankIncremented =
393
- LLVM::AddOp::create (builder, loc, indexType, doubleRank, one);
394
- Value rankIndexSize = LLVM::MulOp::create (builder, loc, indexType,
395
- doubleRankIncremented, indexSize);
396
-
397
- // Total allocation size.
398
- Value allocationSize = LLVM::AddOp::create (
399
- builder, loc, indexType, doublePointerSize, rankIndexSize);
400
- sizes.push_back (allocationSize);
401
- }
369
+ // Emit IR computing the memory necessary to store the descriptor. This
370
+ // assumes the descriptor to be
371
+ // { type*, type*, index, index[rank], index[rank] }
372
+ // and densely packed, so the total size is
373
+ // 2 * sizeof(pointer) + (1 + 2 * rank) * sizeof(index).
374
+ // TODO: consider including the actual size (including eventual padding due
375
+ // to data layout) into the unranked descriptor.
376
+ Value pointerSize = createIndexAttrConstant (
377
+ builder, loc, indexType,
378
+ llvm::divideCeil (typeConverter.getPointerBitwidth (addressSpace), 8 ));
379
+ Value doublePointerSize =
380
+ LLVM::MulOp::create (builder, loc, indexType, two, pointerSize);
381
+
382
+ // (1 + 2 * rank) * sizeof(index)
383
+ Value rank = desc.rank (builder, loc);
384
+ Value doubleRank = LLVM::MulOp::create (builder, loc, indexType, two, rank);
385
+ Value doubleRankIncremented =
386
+ LLVM::AddOp::create (builder, loc, indexType, doubleRank, one);
387
+ Value rankIndexSize = LLVM::MulOp::create (builder, loc, indexType,
388
+ doubleRankIncremented, indexSize);
389
+
390
+ // Total allocation size.
391
+ Value allocationSize = LLVM::AddOp::create (builder, loc, indexType,
392
+ doublePointerSize, rankIndexSize);
393
+ return allocationSize;
402
394
}
403
395
404
396
Value UnrankedMemRefDescriptor::allocatedPtr (
0 commit comments