xref: /llvm-project/mlir/test/Dialect/Builtin/canonicalize.mlir (revision e7790fbed32b729ad59cea4b77d152514605cb0e)
1// RUN: mlir-opt %s -canonicalize="test-convergence" | FileCheck %s
2
3//===----------------------------------------------------------------------===//
4// UnrealizedConversionCastOp
5//===----------------------------------------------------------------------===//
6
7// Test folding conversion casts feeding into other casts.
8// CHECK-LABEL: func @multiple_conversion_casts
9// CHECK-SAME: %[[ARG0:.*]]: i32, %[[ARG1:.*]]:
10func.func @multiple_conversion_casts(%arg0: i32, %arg1: i32) -> (i32, i32) {
11  // CHECK-NOT: unrealized_conversion_cast
12  // CHECK: return %[[ARG0]], %[[ARG1]]
13  %inputs:2 = builtin.unrealized_conversion_cast %arg0, %arg1 : i32, i32 to i64, i64
14  %outputs:2 = builtin.unrealized_conversion_cast %inputs#0, %inputs#1 : i64, i64 to i32, i32
15  return %outputs#0, %outputs#1 : i32, i32
16}
17
18// CHECK-LABEL: func @multiple_conversion_casts
19func.func @multiple_conversion_casts_failure(%arg0: i32, %arg1: i32, %arg2: i64) -> (i32, i32) {
20  // CHECK: unrealized_conversion_cast
21  // CHECK: unrealized_conversion_cast
22  %inputs:2 = builtin.unrealized_conversion_cast %arg0, %arg1 : i32, i32 to i64, i64
23  %outputs:2 = builtin.unrealized_conversion_cast %arg2, %inputs#1 : i64, i64 to i32, i32
24  return %outputs#0, %outputs#1 : i32, i32
25}
26