[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