@@ -353,14 +353,9 @@ void UnrankedMemRefDescriptor::unpack(OpBuilder &builder, Location loc,
353353 results.push_back (d.memRefDescPtr (builder, loc));
354354}
355355
356- void UnrankedMemRefDescriptor::computeSizes (
356+ Value UnrankedMemRefDescriptor::computeSize (
357357 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) {
364359 // Cache the index type.
365360 Type indexType = typeConverter.getIndexType ();
366361
@@ -371,34 +366,31 @@ void UnrankedMemRefDescriptor::computeSizes(
371366 builder, loc, indexType,
372367 llvm::divideCeil (typeConverter.getIndexTypeBitwidth (), 8 ));
373368
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;
402394}
403395
404396Value UnrankedMemRefDescriptor::allocatedPtr (
0 commit comments