[Mlir-commits] [mlir] [mlir][arith] Fix type conversion in emulate-wide-int (PR #112104)
Jakub Kuderski
llvmlistbot at llvm.org
Sat Oct 12 10:48:19 PDT 2024
https://github.com/kuhar created https://github.com/llvm/llvm-project/pull/112104
Use `nullptr` to indicate that type conversion failed and no fallback conversion should be attempted.
Fixes: https://github.com/llvm/llvm-project/issues/108163
>From a6da7e8ba9b0fffb084d053fb9f6b59af007bc10 Mon Sep 17 00:00:00 2001
From: Jakub Kuderski <jakub at nod-labs.com>
Date: Sat, 12 Oct 2024 13:42:28 -0400
Subject: [PATCH] [mlir][arith] Fix type conversion in emulate-wide-int
Use `nullptr` to indicate that type conversion failed and no fallback
conversion should be attempted.
Fixes: https://github.com/llvm/llvm-project/issues/108163
---
.../Arith/Transforms/EmulateWideInt.cpp | 8 ++--
.../Arith/emulate-wide-int-unsupported.mlir | 43 +++++++++++++++++++
2 files changed, 47 insertions(+), 4 deletions(-)
create mode 100644 mlir/test/Dialect/Arith/emulate-wide-int-unsupported.mlir
diff --git a/mlir/lib/Dialect/Arith/Transforms/EmulateWideInt.cpp b/mlir/lib/Dialect/Arith/Transforms/EmulateWideInt.cpp
index c48ded094eacff..2d49854347d406 100644
--- a/mlir/lib/Dialect/Arith/Transforms/EmulateWideInt.cpp
+++ b/mlir/lib/Dialect/Arith/Transforms/EmulateWideInt.cpp
@@ -1081,7 +1081,7 @@ arith::WideIntEmulationConverter::WideIntEmulationConverter(
if (width == 2 * maxIntWidth)
return VectorType::get(2, IntegerType::get(ty.getContext(), maxIntWidth));
- return std::nullopt;
+ return nullptr;
});
// Vector case.
@@ -1102,7 +1102,7 @@ arith::WideIntEmulationConverter::WideIntEmulationConverter(
IntegerType::get(ty.getContext(), maxIntWidth));
}
- return std::nullopt;
+ return nullptr;
});
// Function case.
@@ -1111,11 +1111,11 @@ arith::WideIntEmulationConverter::WideIntEmulationConverter(
// (i2N, i2N) -> i2N --> (vector<2xiN>, vector<2xiN>) -> vector<2xiN>
SmallVector<Type> inputs;
if (failed(convertTypes(ty.getInputs(), inputs)))
- return std::nullopt;
+ return nullptr;
SmallVector<Type> results;
if (failed(convertTypes(ty.getResults(), results)))
- return std::nullopt;
+ return nullptr;
return FunctionType::get(ty.getContext(), inputs, results);
});
diff --git a/mlir/test/Dialect/Arith/emulate-wide-int-unsupported.mlir b/mlir/test/Dialect/Arith/emulate-wide-int-unsupported.mlir
new file mode 100644
index 00000000000000..586bd632f19721
--- /dev/null
+++ b/mlir/test/Dialect/Arith/emulate-wide-int-unsupported.mlir
@@ -0,0 +1,43 @@
+// RUN: mlir-opt --arith-emulate-wide-int="widest-int-supported=32" \
+// RUN: --split-input-file --verify-diagnostics %s
+
+// Make sure we do not crash on unsupported types.
+
+// Unsupported result type in `arith.extsi`.
+func.func @unsupported_result_integer(%arg0: i64) -> i64 {
+ // expected-error at +1 {{failed to legalize operation 'arith.extsi' that was explicitly marked illegal}}
+ %0 = arith.extsi %arg0: i64 to i128
+ %2 = arith.muli %0, %0 : i128
+ %3 = arith.trunci %2 : i128 to i64
+ return %3 : i64
+}
+
+// -----
+
+// Unsupported result type in `arith.extsi`.
+func.func @unsupported_result_vector(%arg0: vector<4xi64>) -> vector<4xi64> {
+ // expected-error at +1 {{failed to legalize operation 'arith.extsi' that was explicitly marked illegal}}
+ %0 = arith.extsi %arg0: vector<4xi64> to vector<4xi128>
+ %2 = arith.muli %0, %0 : vector<4xi128>
+ %3 = arith.trunci %2 : vector<4xi128> to vector<4xi64>
+ return %3 : vector<4xi64>
+}
+
+// -----
+
+// Unsupported function return type.
+// expected-error at +1 {{failed to legalize operation 'func.func' that was explicitly marked illegal}}
+func.func @unsupported_return_type(%arg0: vector<4xi64>) -> vector<4xi128> {
+ %0 = arith.extsi %arg0: vector<4xi64> to vector<4xi128>
+ return %0 : vector<4xi128>
+}
+
+// -----
+
+// Unsupported function argument type.
+// expected-error at +1 {{failed to legalize operation 'func.func' that was explicitly marked illegal}}
+func.func @unsupported_return_type(%arg0: vector<4xi128>) -> vector<4xi64> {
+ %0 = arith.trunci %arg0: vector<4xi128> to vector<4xi64>
+ return %0 : vector<4xi64>
+}
+
More information about the Mlir-commits
mailing list