Index: mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp =================================================================== --- mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp +++ mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp @@ -961,6 +961,10 @@ ValueRange{rank, voidPtr}); }; + // Save stack position before promoting descriptors + auto stackSaveOp = + rewriter.create(loc, getVoidPtrType()); + Value unrankedSource = srcType.hasRank() ? makeUnranked(adaptor.getSource(), srcType) : adaptor.getSource(); @@ -990,6 +994,10 @@ op->getParentOfType(), getIndexType(), sourcePtr.getType()); rewriter.create(loc, copyFn, ValueRange{elemSize, sourcePtr, targetPtr}); + + // Restore stack used for descriptors + rewriter.create(loc, stackSaveOp); + rewriter.eraseOp(op); return success();