From: Nicolas Vasilache Date: Thu, 29 Sep 2022 09:29:31 +0000 (-0700) Subject: [mlir][memref]Add conversion support for memref.extract_aligned_pointer_as_index... X-Git-Tag: upstream/17.0.6~32156 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=07801f713e3ab95c09887b547a263fd615d799f3;p=platform%2Fupstream%2Fllvm.git [mlir][memref]Add conversion support for memref.extract_aligned_pointer_as_index to LLVM Reviewed By: pifon2a Differential Revision: https://reviews.llvm.org/D134834 --- diff --git a/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp b/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp index c691c07..efeb255 100644 --- a/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp +++ b/mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp @@ -2070,6 +2070,25 @@ struct AtomicRMWOpLowering : public LoadStoreOpLowering { } }; +/// Unpack the pointer returned by a memref.extract_aligned_pointer_as_index. +class ConvertExtractAlignedPointerAsIndex + : public ConvertOpToLLVMPattern { +public: + using ConvertOpToLLVMPattern< + memref::ExtractAlignedPointerAsIndexOp>::ConvertOpToLLVMPattern; + + LogicalResult + matchAndRewrite(memref::ExtractAlignedPointerAsIndexOp extractOp, + OpAdaptor adaptor, + ConversionPatternRewriter &rewriter) const override { + MemRefDescriptor desc(adaptor.getSource()); + rewriter.replaceOpWithNewOp( + extractOp, getTypeConverter()->getIndexType(), + desc.alignedPtr(rewriter, extractOp->getLoc())); + return success(); + } +}; + } // namespace void mlir::populateMemRefToLLVMConversionPatterns(LLVMTypeConverter &converter, @@ -2080,6 +2099,7 @@ void mlir::populateMemRefToLLVMConversionPatterns(LLVMTypeConverter &converter, AllocaScopeOpLowering, AtomicRMWOpLowering, AssumeAlignmentOpLowering, + ConvertExtractAlignedPointerAsIndex, DimOpLowering, GenericAtomicRMWOpLowering, GlobalMemrefOpLowering, diff --git a/mlir/test/Conversion/MemRefToLLVM/memref-to-llvm.mlir b/mlir/test/Conversion/MemRefToLLVM/memref-to-llvm.mlir index ce6eb62..07979b1 100644 --- a/mlir/test/Conversion/MemRefToLLVM/memref-to-llvm.mlir +++ b/mlir/test/Conversion/MemRefToLLVM/memref-to-llvm.mlir @@ -1143,3 +1143,16 @@ func.func @memref_copy_unranked() { // CHECK: llvm.call @memrefCopy([[SIZE]], [[ALLOCA2]], [[ALLOCA3]]) : (i64, !llvm.ptr)>>, !llvm.ptr)>>) -> () return } + +// ----- + +// CHECK-LABEL: func @extract_aligned_pointer_as_index +func.func @extract_aligned_pointer_as_index(%m: memref) -> index { + %0 = memref.extract_aligned_pointer_as_index %m: memref -> index + // CHECK: %[[E:.*]] = llvm.extractvalue %{{.*}}[1] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> + // CHECK: %[[I64:.*]] = llvm.ptrtoint %[[E]] : !llvm.ptr to i64 + // CHECK: %[[R:.*]] = builtin.unrealized_conversion_cast %[[I64]] : i64 to index + + // CHECK: return %[[R:.*]] : index + return %0: index +}