[Mlir-commits] [mlir] [mlir][builtin] Make `unrealized_conversion_cast` inlineable (PR #139722)
Matthias Springer
llvmlistbot at llvm.org
Sat Aug 16 05:21:06 PDT 2025
https://github.com/matthias-springer updated https://github.com/llvm/llvm-project/pull/139722
>From 6ecd89fc1778244479732b3531fc035fae909251 Mon Sep 17 00:00:00 2001
From: Matthias Springer <mspringer at nvidia.com>
Date: Tue, 13 May 2025 14:38:27 +0200
Subject: [PATCH] [mlir][builtin] Make `unrealized_conversion_cast` inlineable
Until now, `builtin.unrealized_conversion_cast` ops could not be inlined by the Inliner pass.
---
mlir/lib/Transforms/Utils/InliningUtils.cpp | 6 ++++++
mlir/test/Transforms/inlining.mlir | 10 +++++++---
2 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/mlir/lib/Transforms/Utils/InliningUtils.cpp b/mlir/lib/Transforms/Utils/InliningUtils.cpp
index eeb40529cc2fe..5ea31054051ac 100644
--- a/mlir/lib/Transforms/Utils/InliningUtils.cpp
+++ b/mlir/lib/Transforms/Utils/InliningUtils.cpp
@@ -13,6 +13,7 @@
#include "mlir/Transforms/InliningUtils.h"
#include "mlir/IR/Builders.h"
+#include "mlir/IR/BuiltinOps.h"
#include "mlir/IR/IRMapping.h"
#include "mlir/IR/Operation.h"
#include "mlir/Interfaces/CallInterfaces.h"
@@ -182,6 +183,11 @@ static bool isLegalToInline(InlinerInterface &interface, Region *src,
IRMapping &valueMapping) {
for (auto &block : *src) {
for (auto &op : block) {
+ // UnrealizedConversionCastOp is inlineable but cannot implement the
+ // inliner interface due to layering constraints.
+ if (isa<UnrealizedConversionCastOp>(op))
+ continue;
+
// Check this operation.
if (!interface.isLegalToInline(&op, insertRegion,
shouldCloneInlinedRegion, valueMapping)) {
diff --git a/mlir/test/Transforms/inlining.mlir b/mlir/test/Transforms/inlining.mlir
index 1ed08878430b5..d8e10aa4212ba 100644
--- a/mlir/test/Transforms/inlining.mlir
+++ b/mlir/test/Transforms/inlining.mlir
@@ -5,14 +5,18 @@
// RUN: mlir-opt %s -inline='op-pipelines=func.func(canonicalize,cse)' | FileCheck %s --check-prefix INLINE_SIMPLIFY
// Inline a function that takes an argument.
-func.func @func_with_arg(%c : i32) -> i32 {
- %b = arith.addi %c, %c : i32
- return %b : i32
+func.func @func_with_arg(%arg0 : i32) -> i32 {
+ %b = arith.addi %arg0, %arg0 : i32
+ %c = builtin.unrealized_conversion_cast %b : i32 to i64
+ %d = builtin.unrealized_conversion_cast %c : i64 to i32
+ return %d : i32
}
// CHECK-LABEL: func @inline_with_arg
func.func @inline_with_arg(%arg0 : i32) -> i32 {
// CHECK-NEXT: arith.addi
+ // CHECK-NEXT: unrealized_conversion_cast
+ // CHECK-NEXT: unrealized_conversion_cast
// CHECK-NEXT: return
%0 = call @func_with_arg(%arg0) : (i32) -> i32
More information about the Mlir-commits
mailing list