<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/62352>62352</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [MLIR]`-affine-super-vectorize` pass crashes with `mlir::makePermutationMap`: Assertion `perm[kvp.second] == getAffineConstantExpr(0, context) && "permutationMap already has an entry along dim"' failed.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          BealZephyr
      </td>
    </tr>
</table>

<pre>
    Test commit: https://github.com/llvm/llvm-project/commit/8acd87447705de1480c57388f2be64b2e9d40f7d

Steps to reproduce:
```
mlir-opt test.mlir -affine-super-vectorize=virtual-vector-size=4,8
```
Test case:
```
#map = affine_map<(d0) -> (d0 + 1)>
module {
 func.func @main(%arg0: memref<80x62x15x84xi1>){
    %true = arith.constant true
    %alloc = memref.alloc() {alignment = 64 : i64} : memref<80x62x84xi1>
    affine.for %arg1 = 0 to 80 {
      affine.for %arg2 = 0 to 62 {
        affine.for %arg3 = 0 to 84 step 4 {
 affine.store %true, %alloc[%arg1, %arg2, %arg3] : memref<80x62x84xi1>
 %2 = affine.apply #map(%arg3)
        }
      }
    }
 
    return
  }
}
```
Crash trace:
```
mlir-opt: /home/ty/llvm-project/mlir/lib/Dialect/Vector/Utils/VectorUtils.cpp:87: mlir::AffineMap makePermutationMap(llvm::ArrayRef<mlir::Value>, mlir::DenseMap<mlir::Operation*, unsigned int>&): Assertion `perm[kvp.second] == getAffineConstantExpr(0, context) && "permutationMap already has an entry along dim"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /home/ty/llvm-project/build/bin/mlir-opt test.mlir -affine-super-vectorize=virtual-vector-size=4,8
 #0 0x00005598eeea0eca llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/ty/llvm-project/build/bin/mlir-opt+0xd62eca)
 #1 0x00005598eee9e03c SignalHandler(int) Signals.cpp:0:0
 #2 0x00007fd35d515980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #3 0x00007fd35c1c6e87 raise /build/glibc-CVJwZb/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
 #4 0x00007fd35c1c87f1 abort /build/glibc-CVJwZb/glibc-2.27/stdlib/abort.c:81:0
 #5 0x00007fd35c1b83fa __assert_fail_base /build/glibc-CVJwZb/glibc-2.27/assert/assert.c:89:0
 #6 0x00007fd35c1b8472 (/lib/x86_64-linux-gnu/libc.so.6+0x30472)
 #7 0x00005598f0462647 mlir::makePermutationMap(mlir::Block*, llvm::ArrayRef<mlir::Value>, llvm::DenseMap<mlir::Operation*, unsigned int, llvm::DenseMapInfo<mlir::Operation*, void>, llvm::detail::DenseMapPair<mlir::Operation*, unsigned int>> const&) (/home/ty/llvm-project/build/bin/mlir-opt+0x2324647)
 #8 0x00005598eefd5d39 vectorizeAffineStore(mlir::affine::AffineStoreOp, (anonymous namespace)::VectorizationState&) SuperVectorize.cpp:0:0
 #9 0x00005598eefd8a17 mlir::WalkResult llvm::function_ref<mlir::WalkResult (mlir::Operation*)>::callback_fn<vectorizeLoopNest(std::vector<llvm::SmallVector<mlir::affine::AffineForOp, 2u>, std::allocator<llvm::SmallVector<mlir::affine::AffineForOp, 2u>>>&, mlir::affine::VectorizationStrategy const&)::'lambda'(mlir::Operation*)>(long, mlir::Operation*) SuperVectorize.cpp:0:0
#10 0x00005598eefd09eb mlir::WalkResult mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<mlir::WalkResult (mlir::Operation*)>, mlir::WalkOrder) (/home/ty/llvm-project/build/bin/mlir-opt+0xe929eb)
#11 0x00005598eefd0a8c mlir::WalkResult mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<mlir::WalkResult (mlir::Operation*)>, mlir::WalkOrder) (/home/ty/llvm-project/build/bin/mlir-opt+0xe92a8c)
#12 0x00005598eefd0a8c mlir::WalkResult mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<mlir::WalkResult (mlir::Operation*)>, mlir::WalkOrder) (/home/ty/llvm-project/build/bin/mlir-opt+0xe92a8c)
#13 0x00005598eefd0a8c mlir::WalkResult mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<mlir::WalkResult (mlir::Operation*)>, mlir::WalkOrder) (/home/ty/llvm-project/build/bin/mlir-opt+0xe92a8c)
#14 0x00005598eefd2213 vectorizeLoopNest(std::vector<llvm::SmallVector<mlir::affine::AffineForOp, 2u>, std::allocator<llvm::SmallVector<mlir::affine::AffineForOp, 2u>>>&, mlir::affine::VectorizationStrategy const&) SuperVectorize.cpp:0:0
#15 0x00005598eefda07f vectorizeLoops(mlir::Operation*, llvm::DenseSet<mlir::Operation*, llvm::DenseMapInfo<mlir::Operation*, void>>&, llvm::ArrayRef<long>, llvm::ArrayRef<long>, llvm::DenseMap<mlir::Operation*, llvm::SmallVector<mlir::affine::LoopReduction, 2u>, llvm::DenseMapInfo<mlir::Operation*, void>, llvm::detail::DenseMapPair<mlir::Operation*, llvm::SmallVector<mlir::affine::LoopReduction, 2u>>> const&) SuperVectorize.cpp:0:0
#16 0x00005598eefdafc9 (anonymous namespace)::Vectorize::runOnOperation() SuperVectorize.cpp:0:0
#17 0x00005598f0d4525e mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/home/ty/llvm-project/build/bin/mlir-opt+0x2c0725e)
#18 0x00005598f0d4559a mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/home/ty/llvm-project/build/bin/mlir-opt+0x2c0759a)
#19 0x00005598f0d45982 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&)::operator()(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&) const Pass.cpp:0:0
#20 0x00005598f0d449a5 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool) (/home/ty/llvm-project/build/bin/mlir-opt+0x2c069a5)
#21 0x00005598f0d451a2 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/home/ty/llvm-project/build/bin/mlir-opt+0x2c071a2)
#22 0x00005598f0d460b3 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (.constprop.510) Pass.cpp:0:0
#23 0x00005598f0d4673d mlir::PassManager::run(mlir::Operation*) (/home/ty/llvm-project/build/bin/mlir-opt+0x2c0873d)
#24 0x00005598f0d38640 performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#25 0x00005598f0d38de5 processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::MlirOptMainConfig const&, mlir::DialectRegistry&, llvm::ThreadPool*) MlirOptMain.cpp:0:0
#26 0x00005598f0d38fa1 mlir::LogicalResult llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::'lambda'(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) MlirOptMain.cpp:0:0
#27 0x00005598f0e19120 mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) (/home/ty/llvm-project/build/bin/mlir-opt+0x2cdb120)
#28 0x00005598f0d34589 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (/home/ty/llvm-project/build/bin/mlir-opt+0x2bf6589)
#29 0x00005598f0d392ca mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (/home/ty/llvm-project/build/bin/mlir-opt+0x2bfb2ca)
#30 0x00005598eee639ed main (/home/ty/llvm-project/build/bin/mlir-opt+0xd259ed)
#31 0x00007fd35c1a9c87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#32 0x00005598eee7668a _start (/home/ty/llvm-project/build/bin/mlir-opt+0xd3868a)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWltP5L4V_zTmxWLk2Lk-8DAMjLrVUhBst9L_ZXQSOzMpzqW2A0w_fWVnLkkYYFho_7vVSlwS5_hcfufik9igdbGshDhDwTkKLk6gNatanZ0LkH-IZrVWJ2nN12ffhDY4q8uyMIhN8cqYRiM2RXSO6HxZmFWbTrK6RHQu5cP232mj6n-KzCA630yl8xgyHke-H0Uk4MLzY5IFEYvjnKYi9FMqEu6TPOKIXCAy7f7eGdFobGqsRKNq3mbCiu4IQrL5cbelLNRp3RhshDYTe4dPIc-LSpzqthHq9EFkplbFvwViFw-FMi3Izdip7kZ9RGfxQeYdBqBflI4oK6HBiF3gTuiihAaxGaIxJ4gm-BSxS-zuMKLn2EM0Qexyo3rNWykwis67e5y3VTaxfzDySQlFhWiMaABqSawLSlEqkSM2i8lTSJ-84Cn2nwrP8qPJngvGGNHAqFZ0eqnCrCZZXWkDlcF2fEAIUtaZo-z4T9yAk5xY3UAWy6oUlXE0oY-tKkXoo-gCH9Bqp9JORgfMJK8V7ozxHCdi3RsTPFD8ADXdU4d0TH2AnvW4-1gb0WC_N21Dr02txBYnRGc7JGxSdFpuR9WS7i8ZCo4xG9GA9qJiAk0j17iLlp1TmXXbwBgUXfQHBrf7m_2YEqZV1fZ-R7G_GEbrTIFeYaPg7XSyJiI6X9WlQHRu1s_z21La0SJFdH5RgOyGv7vUQnT-d1NIvRtwd5OsaRCbxpED0M5nU8SmU4fRFTS4hHtxI1TZGjBFXV05sFx56QiVgvWtQ30_-zvIVrgcmPV4XohKW5YD0utGKMcY0aklbytXCTkuKuM4hC49p3iqtVCWEKOQNEKVKDi_f2gmWmR1xbsQuLDuXQrTaT_b5NflU6MQjYlln9WVEU_G5ZFlHWJEaTMwD4NUAvgar0BjqLCojFpjkHW1xLwoEaWIRjiHQgo-6Tx08_VyeneJdZuWhcGA03Zpq2StjA35d5fpQutWWD9hqCwQmWy5wGYlcOaiJYXs3kXMZFuZIbvHvC2bXQiRCSLJjaqXCkoMatnaaqHfjqC0LSS3_22hm39uIbe5RjB5IoSQIEhiIQQQkQHeR5Ne6-7iRhWVcXZ9c6nRDzkFj4taGyWgdD6cuVhxHo1_xDpEz8kTD6nIYJ_9iDJvqGsiCMvwXbGsQP4FKi6FjaqN6G54m03E_e4Y0Q2jKOcs4IEXJDHBi4USruItlNlo3uXtUxwuQv9UFlX7dLqs2u5BY1Y2Kie6nhCnsEcTG9I9fVlfTOZloYgjrKDQtqjubF_KIs1OZ9__-vhHurulExohOtfOCkTnk4m9W2suGhuHbVU8dQMPTpuqtbeO9SRDbBp4Q4P9kSZxlHsY0tpZepwmhndouFlOSDwSEgyFpDHLAS8W4OrEwubnIoXjbe_m7S46kclQZDgW6Uf0CN9l1muh8xojfkQHXot6UZYTP6ShH_WK5sHyu398LuvsflM631GU96TvL8oHp3-p8vpVFg91wZ8J58JAIYecbsCyeMcKwS6x66S6peJDRYAy6od-NPBPPKgCOQ84S_Cu7nUrzZ3N44FfuirZX0sdzXXTtS0xVHW1LutW4wpKoRtX45KNozbMndF3BozYmHZna-72qThca5KRujF4_XD6B8j7W6FbaXpusO2tlbVQo5DpUQ-sG7rEdc9uPAMp7eK0yCvEZjuQvtZ18zdhPRRrwzvS7iFis70adyVI-X07_hqW81p1SNJ2E1M7vq5hhE9j3f10q8zhaSNvKTBiue5HZEeGaCShTDkgW21ex5LGttkYihyRvRkLdv0io1ggiUgPx8J-sJ-SjyDvB3DNa_UIin8xVhcL5eUrpsw-OcIGcNh514rbJfhjKS8Smoh0l_EWNm8MG8TZb9iewQZxNoCN_obtR2Bjv2H7Edj8EWyUegz_XnGOaxQsgMEIQCBRPgRQHxk3rnO7E-bVru0DLeMOjoMNrlsqx43lW8-P6nrf50yL2K3gbdZx6EXKn9otf4oRz7vsYyIsHEdYniXH9r4bfVRbXVc9k-JjZQ_fqrgf0EC8UECvm2_1dXMDWk85NA6djehB_FuCDaYvo937gFaBXOtCX0EFS1sBZzita_n8beqDbywZiWggBqUxHtseJPBu22-KRkgbF8MaYEl3JoWfDkZ_khX1pdJGuW9XtXrGdUjQSe4ebHS_ASUqY5NtG7vTz8A7SGCAdzLGO4npu_HuhflUr6vsS9lIROMOprfeIT5PxHVzc-WqU-_VpW42nYRLv_-J4M5f2DI7mN-UjDD3Ewg-GfOPxkmYQNCPE-qN48SD98fJL1KTPKAD2-nI9pCk7HdNGtSkbj-wUXUzCTy3Ufly-LMxnBHjIy22dh0MnPHXhA-6O44YH7jbH-rH4tAnuBEqr1U5dc2FfuOT_q691itQgi8aM-qv61Zl4mqphp1J3xdXX7_czrb7PSM_XclCXTfmCopqVld5sRx0N72nh_EPxvZxEeBG1ZnQ-rzNc7c1cJR5bVX8qxXPzLsSZa3WW1Y9ei5yaKVZcCGFES_P2fTNx9o82KfrNg5vxbLQRq2fNd_f3E7EjUuW6VFwhWO4cvB6Ar_WyyIDefx3yeGE_kvefx3Ol5360mfQgw74CcPjsNuPTJmDDcpP45X9B9WfQqW3E2b4-iK8xKOk5wrdyMJMK34zqjh_hnW_YJK-SrFvAz6nD-SpR8lgcRy9nzE_iJPDefb_ViU-BmWah0GcDKAcvXqxhGbwIpSbbi5bQde3jb-PGFVUy1uRv23whw1JaTZ4hxyfiwhZIjguoag-dqiBBokYdGa7Qw2bLWxIsjjCi4Us0myhDSiz2Eg9atM80-32tEB36R46Pm4Dnfn-oLCx4SaBiMIwBtwJ_pilLA7jHqTbE1Qn_IzxhCVwIs68MKY-DSNKTlZn1GMhRB6Lgee5xyHmwLI8Ax8CP8sydlKcUUIZ8WngUT-gZJJQGvieT3xP8DBPQuQTUUIhJ1bLSa2WJ-7czllIWUBPJKRCaneek9JKPGL3EFGKgosTdeYsS9ulRj6RhTZ6z8UURrqDoLZ_RcEFCslLh25CghvQujsWJDR-LMwKo5C8enwgJD_vcaqTVsmzHz8v5aD_TwAAAP__L5ZErw">