[Mlir-commits] [mlir] 2de3d00 - [mlir][tosa] Fix a crash in `PadOp::fold` (#114921)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Tue Nov 5 03:02:46 PST 2024
Author: Longsheng Mou
Date: 2024-11-05T11:02:42Z
New Revision: 2de3d00edc614cdce4b30b68be564a7a3123dbf9
URL: https://github.com/llvm/llvm-project/commit/2de3d00edc614cdce4b30b68be564a7a3123dbf9
DIFF: https://github.com/llvm/llvm-project/commit/2de3d00edc614cdce4b30b68be564a7a3123dbf9.diff
LOG: [mlir][tosa] Fix a crash in `PadOp::fold` (#114921)
This PR fixes a crash when padding of `tosa.pad` is not dense elements.
Fixes #114762.
Added:
Modified:
mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp
mlir/test/Dialect/Tosa/canonicalize.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp b/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp
index dbd573f96a79f8..39d0ee122b1630 100644
--- a/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp
+++ b/mlir/lib/Dialect/Tosa/IR/TosaCanonicalizations.cpp
@@ -878,8 +878,9 @@ OpFoldResult ReshapeOp::fold(FoldAdaptor adaptor) {
OpFoldResult PadOp::fold(FoldAdaptor adaptor) {
// If the pad is all zeros we can fold this operation away.
if (adaptor.getPadding() && getInput1().getType() == getType()) {
- auto densePad = llvm::cast<DenseElementsAttr>(adaptor.getPadding());
- if (densePad.isSplat() && densePad.getSplatValue<APInt>().isZero()) {
+ auto densePad = llvm::dyn_cast<DenseElementsAttr>(adaptor.getPadding());
+ if (densePad && densePad.isSplat() &&
+ densePad.getSplatValue<APInt>().isZero()) {
return getInput1();
}
}
diff --git a/mlir/test/Dialect/Tosa/canonicalize.mlir b/mlir/test/Dialect/Tosa/canonicalize.mlir
index 3bcf58015831ba..67cd01f62f0bdf 100644
--- a/mlir/test/Dialect/Tosa/canonicalize.mlir
+++ b/mlir/test/Dialect/Tosa/canonicalize.mlir
@@ -217,6 +217,17 @@ func.func @pad_noop(%arg0: tensor<?x?xf32>) -> tensor<?x?xf32> {
// -----
+// CHECK-LABEL: @pad_noop_padding_mismatch_nofold
+func.func @pad_noop_padding_mismatch_nofold(%arg0: tensor<?x?xf32>) -> tensor<?x?xf32> {
+ // CHECK: %[[PAD:.+]] = tosa.pad
+ // CHECK: return %[[PAD]]
+ %0 = "tosa.const"() { value = dense_resource<__elided__> : tensor<2x2xi32>} : () -> tensor<2x2xi32>
+ %1 = tosa.pad %arg0, %0 : (tensor<?x?xf32>, tensor<2x2xi32>) -> tensor<?x?xf32>
+ return %1 : tensor<?x?xf32>
+}
+
+// -----
+
// CHECK-LABEL: @pad_noop_type_mismatch_nofold
func.func @pad_noop_type_mismatch_nofold(%arg0: tensor<10xf32>) -> tensor<?xf32> {
// CHECK: %[[PAD:.+]] = tosa.pad
More information about the Mlir-commits
mailing list