[Mlir-commits] [mlir] ff68f71 - [mlir][builtin] Make `unrealized_conversion_cast` inlineable (#139722)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Mon Aug 18 01:23:29 PDT 2025
Author: Matthias Springer
Date: 2025-08-18T10:23:26+02:00
New Revision: ff68f7115cc816fd9ef479e3d433f7aad1364c06
URL: https://github.com/llvm/llvm-project/commit/ff68f7115cc816fd9ef479e3d433f7aad1364c06
DIFF: https://github.com/llvm/llvm-project/commit/ff68f7115cc816fd9ef479e3d433f7aad1364c06.diff
LOG: [mlir][builtin] Make `unrealized_conversion_cast` inlineable (#139722)
Until now, `builtin.unrealized_conversion_cast` ops could not be inlined
by the Inliner pass.
Added:
Modified:
mlir/lib/Transforms/Utils/InliningUtils.cpp
mlir/test/Transforms/inlining.mlir
Removed:
################################################################################
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