[Mlir-commits] [mlir] 1a0453e - [mlir][vector] Fix bug in extractOp folding
Lei Zhang
llvmlistbot at llvm.org
Thu Dec 22 14:53:33 PST 2022
Author: Thomas Raoux
Date: 2022-12-22T14:51:02-08:00
New Revision: 1a0453eb44cdf82df292d2da93092f0fa64043b9
URL: https://github.com/llvm/llvm-project/commit/1a0453eb44cdf82df292d2da93092f0fa64043b9
DIFF: https://github.com/llvm/llvm-project/commit/1a0453eb44cdf82df292d2da93092f0fa64043b9.diff
LOG: [mlir][vector] Fix bug in extractOp folding
We were missing to check for transpose when folding.
Also add a new file to test folding independently of
canonicalization as canonicalization was hiding the bug.
Reviewed By: aartbik
Differential Revision: https://reviews.llvm.org/D140533
Added:
mlir/test/Dialect/Vector/constant-fold.mlir
Modified:
mlir/lib/Dialect/Vector/IR/VectorOps.cpp
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
index 345e6b0fd672c..b1142e878027f 100644
--- a/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
+++ b/mlir/lib/Dialect/Vector/IR/VectorOps.cpp
@@ -1296,7 +1296,7 @@ ExtractFromInsertTransposeChainState::handleInsertOpWithMatchingPos(
// Case 2.a. early-exit fold.
res = nextInsertOp.getSource();
// Case 2.b. if internal transposition is present, canFold will be false.
- return success();
+ return success(canFold());
}
/// Case 3: if inserted position is a prefix of extractPosition,
diff --git a/mlir/test/Dialect/Vector/constant-fold.mlir b/mlir/test/Dialect/Vector/constant-fold.mlir
new file mode 100644
index 0000000000000..626d66f94c8c9
--- /dev/null
+++ b/mlir/test/Dialect/Vector/constant-fold.mlir
@@ -0,0 +1,13 @@
+// RUN: mlir-opt %s -split-input-file -test-constant-fold | FileCheck %s
+
+// CHECK-LABEL: fold_extract_transpose_negative
+func.func @fold_extract_transpose_negative(%arg0: vector<4x4xf16>) -> vector<4x4xf16> {
+ %cst = arith.constant dense<0.000000e+00> : vector<1x4x4xf16>
+ %0 = vector.insert %arg0, %cst [0] : vector<4x4xf16> into vector<1x4x4xf16>
+ // Verify that the transpose didn't get dropped.
+ // CHECK: %[[T:.+]] = vector.transpose
+ %1 = vector.transpose %0, [0, 2, 1] : vector<1x4x4xf16> to vector<1x4x4xf16>
+ // CHECK: vector.extract %[[T]][0]
+ %2 = vector.extract %1[0] : vector<1x4x4xf16>
+ return %2 : vector<4x4xf16>
+}
More information about the Mlir-commits
mailing list