================
@@ -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

Reply via email to