================
@@ -1008,6 +1008,29 @@ struct ConvertOpConversion : public
fir::FIROpConversion<fir::ConvertOp> {
rewriter.replaceOpWithNewOp<mlir::LLVM::BitcastOp>(convert, toTy, op0);
return mlir::success();
}
+ // Pointer to MemRef conversion.
+ if (mlir::isa<mlir::MemRefType>(toFirTy)) {
+ auto dstMemRef = mlir::MemRefDescriptor::poison(rewriter, loc, toTy);
+ dstMemRef.setAlignedPtr(rewriter, loc, op0);
+ dstMemRef.setOffset(
+ rewriter, loc,
+ createIndexAttrConstant(rewriter, loc, getIndexType(), 0));
+ rewriter.replaceOp(convert, {dstMemRef});
+ return mlir::success();
+ }
+ } else if (mlir::isa<mlir::MemRefType>(fromFirTy) &&
+ mlir::isa<mlir::LLVM::LLVMPointerType>(toTy)) {
+ // MemRef to pointer conversion.
+ auto srcMemRef = mlir::MemRefDescriptor(op0);
+ mlir::Type elementType = typeConverter->convertType(
+ mlir::cast<mlir::MemRefType>(fromFirTy).getElementType());
+ mlir::Value srcBasePtr = srcMemRef.alignedPtr(rewriter, loc);
+ mlir::Value srcOffset = srcMemRef.offset(rewriter, loc);
+ mlir::Value srcPtr =
----------------
Hardcode84 wrote:
There is `MemRefDescriptor::bufferPtr()` which already does this.
https://github.com/llvm/llvm-project/pull/168703
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits