[Mlir-commits] [mlir] [mlir][linalg] Fix UnPackOp::getTiledOuterDims (PR #152960)

Han-Chung Wang llvmlistbot at llvm.org
Mon Aug 11 10:55:36 PDT 2025


================
@@ -5765,13 +5765,48 @@ ArrayRef<int64_t> UnPackOp::getAllOuterDims() {
   return getSourceType().getShape().take_front(destRank);
 }
 
+static SmallVector<int64_t>
+inversePerm(const llvm::SmallVector<int64_t> &perm) {
+  const size_t n = perm.size();
+  llvm::SmallVector<int64_t> invPerm(n);
+
+  for (size_t i = 0; i < n; ++i) {
+    assert(perm[i] >= 0 && static_cast<size_t>(perm[i]) < n &&
+           "Invalid permutation entry");
+    invPerm[perm[i]] = i;
+  }
+
+  return invPerm;
+}
+
+/// Compute the inverse of a permutation. Assumes `perm` is a valid permutation
+/// of 0...n-1.
+static SmallVector<int64_t> invertPermutation(SmallVector<int64_t> perm) {
+  const size_t permLen = perm.size();
+  llvm::SmallVector<int64_t> inv(permLen);
+  for (size_t i = 0; i < permLen; ++i) {
+    assert(perm[i] >= 0 && static_cast<size_t>(perm[i]) < permLen &&
+           "Invalid permutation entry");
+    inv[perm[i]] = i;
+  }
+  return inv;
+}
----------------
hanhanW wrote:

I think you're looking for existing [invertPermutationVector](https://github.com/llvm/llvm-project/blob/fb1035cfb4f0ceda143e01cc50100ce5b0d4e2e2/mlir/include/mlir/Dialect/Utils/IndexingUtils.h#L231-L232) method. btw, the second method is not used.

https://github.com/llvm/llvm-project/pull/152960


More information about the Mlir-commits mailing list