[Mlir-commits] [mlir] [MLIR][Math] Fix mathtolibm to use conversion patterns (PR #154083)
William Moses
llvmlistbot at llvm.org
Mon Aug 18 02:22:44 PDT 2025
https://github.com/wsmoses created https://github.com/llvm/llvm-project/pull/154083
This leads to catastrophic failures, especially when using conversion patterns inside the greedy driver that doesn't provide sufficient rewriter infrastructure.
As this is in conversion (and exported in populate functions), this should be a conversion rather than rewriter. And indeed I do see a segfault due to a mismatch of rewrite/conversion in a downstream project.
>From c9e11d914b21da87e0156c17d705968c15497e0e Mon Sep 17 00:00:00 2001
From: "William S. Moses" <gh at wsmoses.com>
Date: Mon, 18 Aug 2025 04:21:39 -0500
Subject: [PATCH] [MLIR][Math] Fix mathtolibm to use conversion patterns
---
mlir/lib/Conversion/MathToLibm/MathToLibm.cpp | 23 +++++++++++--------
1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/mlir/lib/Conversion/MathToLibm/MathToLibm.cpp b/mlir/lib/Conversion/MathToLibm/MathToLibm.cpp
index f7c0d4fe3a799..70514658ac366 100644
--- a/mlir/lib/Conversion/MathToLibm/MathToLibm.cpp
+++ b/mlir/lib/Conversion/MathToLibm/MathToLibm.cpp
@@ -29,32 +29,35 @@ namespace {
// Pattern to convert vector operations to scalar operations. This is needed as
// libm calls require scalars.
template <typename Op>
-struct VecOpToScalarOp : public OpRewritePattern<Op> {
+struct VecOpToScalarOp : public OpConversionPattern<Op> {
public:
- using OpRewritePattern<Op>::OpRewritePattern;
+ using OpConversionPattern<Op>::OpConversionPattern;
- LogicalResult matchAndRewrite(Op op, PatternRewriter &rewriter) const final;
+ LogicalResult
+ matchAndRewrite(Op op, ConversionPatternRewriter &rewriter) const final;
};
// Pattern to promote an op of a smaller floating point type to F32.
template <typename Op>
-struct PromoteOpToF32 : public OpRewritePattern<Op> {
+struct PromoteOpToF32 : public OpConversionPattern<Op> {
public:
- using OpRewritePattern<Op>::OpRewritePattern;
+ using OpConversionPattern<Op>::OpConversionPattern;
- LogicalResult matchAndRewrite(Op op, PatternRewriter &rewriter) const final;
+ LogicalResult
+ matchAndRewrite(Op op, ConversionPatternRewriter &rewriter) const final;
};
// Pattern to convert scalar math operations to calls to libm functions.
// Additionally the libm function signatures are declared.
template <typename Op>
-struct ScalarOpToLibmCall : public OpRewritePattern<Op> {
+struct ScalarOpToLibmCall : public OpConversionPattern<Op> {
public:
using OpRewritePattern<Op>::OpRewritePattern;
ScalarOpToLibmCall(MLIRContext *context, PatternBenefit benefit,
StringRef floatFunc, StringRef doubleFunc)
- : OpRewritePattern<Op>(context, benefit), floatFunc(floatFunc),
- doubleFunc(doubleFunc) {};
+ : OpConversionPattern<Op>(context, benefit), floatFunc(floatFunc),
+ doubleFunc(doubleFunc){};
- LogicalResult matchAndRewrite(Op op, PatternRewriter &rewriter) const final;
+ LogicalResult
+ matchAndRewrite(Op op, ConversionPatternRewriter &rewriter) const final;
private:
std::string floatFunc, doubleFunc;
More information about the Mlir-commits
mailing list