[Mlir-commits] [mlir] [mlir][ptr] Add constantop convertion (PR #204846)
lonely eagle
llvmlistbot at llvm.org
Fri Jun 19 09:24:48 PDT 2026
https://github.com/linuxlonelyeagle updated https://github.com/llvm/llvm-project/pull/204846
>From 79d75f0f3e4d9e6c804d16eb6589fd1fd87244b4 Mon Sep 17 00:00:00 2001
From: linuxlonelyeagle <2020382038 at qq.com>
Date: Wed, 17 Jun 2026 12:31:41 +0000
Subject: [PATCH 1/3] add ptr.constant convert to llvm pattern.
---
mlir/lib/Conversion/PtrToLLVM/PtrToLLVM.cpp | 42 ++++++++++++++++++++-
1 file changed, 41 insertions(+), 1 deletion(-)
diff --git a/mlir/lib/Conversion/PtrToLLVM/PtrToLLVM.cpp b/mlir/lib/Conversion/PtrToLLVM/PtrToLLVM.cpp
index 01199155ade39..815553078206b 100644
--- a/mlir/lib/Conversion/PtrToLLVM/PtrToLLVM.cpp
+++ b/mlir/lib/Conversion/PtrToLLVM/PtrToLLVM.cpp
@@ -73,6 +73,16 @@ struct TypeOffsetOpConversion
matchAndRewrite(ptr::TypeOffsetOp op, OpAdaptor adaptor,
ConversionPatternRewriter &rewriter) const override;
};
+
+//===----------------------------------------------------------------------===//
+// ConstantOpConversion
+//===----------------------------------------------------------------------===//
+struct ConstantOpConversion : public ConvertOpToLLVMPattern<ptr::ConstantOp> {
+ using ConvertOpToLLVMPattern::ConvertOpToLLVMPattern;
+ LogicalResult
+ matchAndRewrite(ptr::ConstantOp op, OpAdaptor adaptor,
+ ConversionPatternRewriter &rewriter) const override;
+};
} // namespace
//===----------------------------------------------------------------------===//
@@ -370,6 +380,35 @@ LogicalResult TypeOffsetOpConversion::matchAndRewrite(
return success();
}
+//===----------------------------------------------------------------------===//
+// ConstantOpConversion
+//===----------------------------------------------------------------------===//
+
+LogicalResult ConstantOpConversion::matchAndRewrite(
+ ptr::ConstantOp op, OpAdaptor adaptor,
+ ConversionPatternRewriter &rewriter) const {
+ mlir::TypedAttr value = op.getValue();
+ Type resultType = getTypeConverter()->convertType(op.getType());
+ if (!resultType)
+ return rewriter.notifyMatchFailure(op, "Couldn't convert the result type");
+
+ if (llvm::dyn_cast<ptr::NullAttr>(value)) {
+ rewriter.replaceOpWithNewOp<LLVM::ZeroOp>(op, resultType);
+ return llvm::success();
+ }
+
+ auto llvmPtrType = cast<LLVM::LLVMPointerType>(resultType);
+ auto addrAttr = cast<ptr::AddressAttr>(value);
+ unsigned addressSpace = llvmPtrType.getAddressSpace();
+ unsigned bitwidth = getTypeConverter()->getPointerBitwidth(addressSpace);
+ Type intType = rewriter.getIntegerType(bitwidth);
+ APInt addr = addrAttr.getValue().zextOrTrunc(bitwidth);
+ Value intConst =
+ LLVM::ConstantOp::create(rewriter, op.getLoc(), intType, addr);
+ rewriter.replaceOpWithNewOp<LLVM::IntToPtrOp>(op, resultType, intConst);
+ return llvm::success();
+}
+
//===----------------------------------------------------------------------===//
// ConvertToLLVMPatternInterface implementation
//===----------------------------------------------------------------------===//
@@ -433,7 +472,8 @@ void mlir::ptr::populatePtrToLLVMConversionPatterns(
// Add conversion patterns.
patterns.add<FromPtrOpConversion, GetMetadataOpConversion, PtrAddOpConversion,
- ToPtrOpConversion, TypeOffsetOpConversion>(converter);
+ ToPtrOpConversion, TypeOffsetOpConversion, ConstantOpConversion>(
+ converter);
}
void mlir::ptr::registerConvertPtrToLLVMInterface(DialectRegistry ®istry) {
>From 0e95c2142e537c55b3dcb348541862430a61f9ef Mon Sep 17 00:00:00 2001
From: linuxlonelyeagle <2020382038 at qq.com>
Date: Wed, 17 Jun 2026 13:52:05 +0000
Subject: [PATCH 2/3] add test.
---
mlir/test/Conversion/PtrToLLVM/ptr-to-llvm.mlir | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/mlir/test/Conversion/PtrToLLVM/ptr-to-llvm.mlir b/mlir/test/Conversion/PtrToLLVM/ptr-to-llvm.mlir
index 5128fd8ccb265..d53fc19a47c90 100644
--- a/mlir/test/Conversion/PtrToLLVM/ptr-to-llvm.mlir
+++ b/mlir/test/Conversion/PtrToLLVM/ptr-to-llvm.mlir
@@ -316,3 +316,17 @@ func.func @test_memref_ptradd_indexing(%arg0: memref<10x?x30xf32, #ptr.generic_s
%3 = ptr.ptr_add %0, %2 : !ptr.ptr<#ptr.generic_space>, index
return %3 : !ptr.ptr<#ptr.generic_space>
}
+
+// CHECK-LABEL: func @test_constant_address_ops
+// CHECK: %[[C_0:.*]] = llvm.mlir.constant(0 : i64) : i64
+// CHECK: %[[PTR_0:.*]] = llvm.inttoptr %[[C_0]] : i64 to !llvm.ptr
+// CHECK: %[[PTR_ZERO:.*]] = llvm.mlir.zero : !llvm.ptr
+// CHECK: %[[RET_0:.*]] = llvm.mlir.poison : !llvm.struct<(ptr, ptr)>
+// CHECK: %[[RET_1:.*]] = llvm.insertvalue %[[PTR_0]], %[[RET_0]][0] : !llvm.struct<(ptr, ptr)>
+// CHECK: %[[RET_2:.*]] = llvm.insertvalue %[[PTR_ZERO]], %[[RET_1]][1] : !llvm.struct<(ptr, ptr)>
+// CHECK: llvm.return %[[RET_2]] : !llvm.struct<(ptr, ptr)>
+func.func @test_constant_address_ops() -> (!ptr.ptr<#ptr.generic_space>, !ptr.ptr<#ptr.generic_space>) {
+ %addr_0 = ptr.constant #ptr.address<0> : !ptr.ptr<#ptr.generic_space>
+ %null = ptr.constant #ptr.null : !ptr.ptr<#ptr.generic_space>
+ return %addr_0, %null : !ptr.ptr<#ptr.generic_space>, !ptr.ptr<#ptr.generic_space>
+}
>From ac95f9579db8cd48f465034edf0d27dca3490c06 Mon Sep 17 00:00:00 2001
From: lonely eagle <2020382038 at qq.com>
Date: Sat, 20 Jun 2026 00:24:39 +0800
Subject: [PATCH 3/3] Update mlir/lib/Conversion/PtrToLLVM/PtrToLLVM.cpp
Co-authored-by: Fabian Mora <fmora.dev at gmail.com>
---
mlir/lib/Conversion/PtrToLLVM/PtrToLLVM.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mlir/lib/Conversion/PtrToLLVM/PtrToLLVM.cpp b/mlir/lib/Conversion/PtrToLLVM/PtrToLLVM.cpp
index 815553078206b..4e098b3266720 100644
--- a/mlir/lib/Conversion/PtrToLLVM/PtrToLLVM.cpp
+++ b/mlir/lib/Conversion/PtrToLLVM/PtrToLLVM.cpp
@@ -406,7 +406,7 @@ LogicalResult ConstantOpConversion::matchAndRewrite(
Value intConst =
LLVM::ConstantOp::create(rewriter, op.getLoc(), intType, addr);
rewriter.replaceOpWithNewOp<LLVM::IntToPtrOp>(op, resultType, intConst);
- return llvm::success();
+ return success();
}
//===----------------------------------------------------------------------===//
More information about the Mlir-commits
mailing list