[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