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

    <tr>
        <th>Summary</th>
        <td>
            [mlir] SCF for loop canonicalization violated index check in SmallVector and crashed
        </td>
    </tr>

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

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

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

<pre>
    MLIR built at commit https://github.com/llvm/llvm-project/commit/0ee6bad6a6725c2913116a8fa7769b067c219f0
Reproduced with:  
`mlir-opt  --scf-for-loop-canonicalization temp.mlir`

temp.mlir:
```mlir  
#map6 = affine_map<(d0, d1, d2) -> (d0 floordiv 64)>
#map29 = affine_map<(d0, d1, d2) -> (d2 * 64 - 2, 5, (d1 mod 4) floordiv 8)>  
module {
  func.func @func1() { 
    %true = arith.constant true 
    %c0 = arith.constant 0 : index 
    %c5 = arith.constant 5 : index
    %c11 = arith.constant 11 : index 
    %c14 = arith.constant 14 : index
    %c15 = arith.constant 15 : index 
 %alloc_249 = memref.alloc() : memref<7xf32>
    %135 = affine.apply #map6(%c15, %c0, %c14) 
    %163 = affine.min #map29(%c5, %135, %c11)
 %196 = scf.index_switch %163 -> i1 
    default { 
 memref.assume_alignment %alloc_249, 1 : memref<7xf32>
      scf.yield %true : i1
    } 
    return
  } 
}
```

trace:
```console 
Assertion failed: (idx < size()), function operator[], file SmallVector.h, line 294.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: mlir-opt --scf-for-loop-canonicalization temp.mlir
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0  mlir-opt 0x000000010167e568 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 72
1  mlir-opt                 0x000000010167ea84 PrintStackTraceSignalHandler(void*) + 28
2  mlir-opt 0x000000010167cb34 llvm::sys::RunSignalHandlers() + 148
3  mlir-opt 0x00000001016806f0 SignalHandler(int) + 252
4 libsystem_platform.dylib 0x000000019970d4c4 _sigtramp + 56
5 libsystem_pthread.dylib  0x00000001996f5ee0 pthread_kill + 288
6 libsystem_c.dylib        0x0000000199630340 abort + 168
7 libsystem_c.dylib        0x000000019962f754 err + 0
8  mlir-opt 0x000000010170b60c llvm::SmallVectorTemplateCommon<mlir::Value, void>::operator[](unsigned long) + 88
9  mlir-opt 0x000000010313f710 canonicalizeMinMaxOp(mlir::RewriterBase&, mlir::Operation*, mlir::AffineMap, mlir::ValueRange, bool, mlir::FlatAffineValueConstraints) + 1452
10 mlir-opt 0x000000010313ea44 mlir::scf::canonicalizeMinMaxOpInLoop(mlir::RewriterBase&, mlir::Operation*, mlir::AffineMap, mlir::ValueRange, bool, llvm::function_ref<mlir::LogicalResult (mlir::Value, mlir::OpFoldResult&, mlir::OpFoldResult&, mlir::OpFoldResult&)>) + 576
11 mlir-opt 0x00000001030c4430 (anonymous namespace)::AffineOpSCFCanonicalizationPattern<mlir::AffineMinOp, true>::matchAndRewrite(mlir::AffineMinOp, mlir::PatternRewriter&) const + 164
12 mlir-opt                 0x0000000101767728 mlir::detail::OpOrInterfaceRewritePatternBase<mlir::AffineMinOp>::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const + 72
13 mlir-opt 0x0000000106264fcc mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<mlir::LogicalResult (mlir::Pattern const&)>) + 1356
14 mlir-opt                 0x000000010557c73c (anonymous namespace)::GreedyPatternRewriteDriver::simplify(llvm::MutableArrayRef<mlir::Region>) + 1640
15 mlir-opt                 0x000000010557bf84 mlir::applyPatternsAndFoldGreedily(llvm::MutableArrayRef<mlir::Region>, mlir::FrozenRewritePatternSet const&, mlir::GreedyRewriteConfig) + 240
16 mlir-opt                 0x0000000101d60c74 mlir::applyPatternsAndFoldGreedily(mlir::Operation*, mlir::FrozenRewritePatternSet const&, mlir::GreedyRewriteConfig) + 76
17 mlir-opt                 0x00000001030cc4f4 (anonymous namespace)::SCFForLoopCanonicalization::runOnOperation() + 192
18 mlir-opt 0x00000001053e4c58 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) + 512
19 mlir-opt 0x00000001053e5328 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) + 364
20 mlir-opt                 0x00000001053e756c mlir::PassManager::runPasses(mlir::Operation*, mlir::AnalysisManager) + 108
21 mlir-opt                 0x00000001053e7344 mlir::PassManager::run(mlir::Operation*) + 864
22 mlir-opt 0x00000001053cc61c performActions(llvm::raw_ostream&, bool, bool, llvm::SourceMgr&, mlir::MLIRContext*, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, bool, bool) + 560
23 mlir-opt 0x00000001053cc1b0 processBuffer(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, bool, bool, bool, bool, bool, bool, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, llvm::ThreadPool*) + 496
24 mlir-opt 0x00000001053cbf78 mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool)::$_0::operator()(std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const + 204
25 mlir-opt                 0x00000001053cbe8c mlir::LogicalResult llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool)::$_0>(long, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) + 80
26 mlir-opt                 0x00000001055d7440 llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::operator()(std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const + 96
27 mlir-opt                 0x00000001055d6f24 mlir::splitAndProcessBuffer(std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) + 128
28 mlir-opt 0x00000001053c98cc mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool) + 320
29 mlir-opt                 0x00000001053c9ad4 mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, mlir::PassPipelineCLParser const&, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool, bool) + 296
30 mlir-opt                 0x00000001053ca698 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) + 2912
31 mlir-opt                 0x0000000100e94f50 main + 148
32 dyld                     0x000000011f4b5088 start + 516

```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsGllv47j51ygvRAyK1GE95MFxkm6AGAmSwQLti0FRlM0ORaoklYnn1xekDkuOnfHszraziw0CH-LH7z5pEmP4RjJ2FcTXQXxzQRq7VfpqqYRQtdK2MfAiV8XuavVw_wzyhgsLiAVUVRW3YGttbQK8CNBdgO423G6bfEZVFaA7IV77t8taq38zagN01-4L0B1kLMlJkZAkRTFFWYjDMCHzkqRpkuUwSSkKsxIG8CaAi2dWa1U0lBXgC7fbAC8AaFeCBFaC60tVWwAuLw0tL0ulL4VS9SUlUklOieBfieVKAsuqeubAg6RD3L7un-PFgLb9d08HWghXpE5AgG8AKUsu2boidYCXAZoXMEBLUIT-FQUoA5cBvgV-BZRCKV3wV5BEAcoCfDvGh7LvRYhAgBYgicAlQG45di9uIQSVKoCjsSc5byn2MlSqaAQDQXrdfgegbCSduRcQRNC9hwFymxwM6IEACFBsdcNaXjW32xlV0lgiLWifjyEpPAbnHi4AlwV7OwCPj4HHe_ApdBgeA_dPj6MPo6MbopMEjvITxu8JBCgmQii6RlFrxopVmpUz_7DXI150jwO8TN9KjAYP6AiGOB75wIzUtdiBzts8EsdSa-SYwv5D6A09RZTgMaKKS9A7WYenRxPiAWEYOhcZ5Amz1sMNLWde1rX5wi3d9vi9G_JwRLhgJWmEHTtMrwZjmoqtieAbWTFpJ_py9MNvaQd4PnaciWLkggvAw5Hg6c2IG81so2X_fb8WpDcHsT1JAZpQ9j78nfGV6L17YQzTPpOUhAtWOEYCNOfFGwjwEhj-lbU29_9LH1oeXNVME6t0m2P9EhcMvFREiF8ZtUrPtu6p4JIBlEWzlt7Tw-3i5RaYJne5loC82QDNXFYGVn1_7uXGNMwE6A4QWQAuqWgKBuyWAaqJ2YKc0M9eDx35F0voZ1A0VT0oBs4CmD1ptdGkAkRvGmdV423YZ-Hzk_ABEZ_aVWOB2VW5EkCSihmnXyZNoxnYqQZsySsDXqwWiH9lGnDp1jR4Wnz6BSgNDLNeKiZfuVat470SDYIEPjz8ulq__HN1_fhw_6_b57XbEiTQqbNWXHq9uvKU7SUGe9HgG2z_QhgmKYuTuefFweKF2Zn2w5Pm0nqxPnmnQvM9kCZf1spYzUgVoMSZnEvrwxhdgxS1JMMRycO_AxbIPAIH9F74RhLxC5GFYDpA81fFiwAteiJo3hJBJ-WiOY6OyfXcyAlu0-c3dA3CqEOLT6Gdw6SE4JC5kfQo7sSPgOC52RnLqnUtiC2VrmbFTvB8hDHLUlhENAJrwzdWk6r2SOKkxRGPcditZqToUExwJGXMGAQdxPozF6JTUidOMsJDewyHlsiyBEMcQUByF5peH0mHID0TASrTOAJMa7-9S03zE8pMYZ5AOrLRKJF8YpVTGluqqlIywMu-r8GLX4lomPM57xL4tn16mJvmjfQdYQGEkpveOr1CsuMs4RCXaQjBKNrZissVeXusAzTf8_DMvmhumb4mhnURsF989KxwJb2_jlcWvqCtSD197CV6JnLjxcqVEtP1O0Fsu9VDLl0p14S7lDU4bu92ITwlGSNRNEJqaNl-OCbsvXxQ6n8v8t4V-pqzbivqfuOD2jhen5nxtXrM4eAYY77ulCha4CNMf8-ib3g7dcdpF6BheFzbkEYRho49p9xdpRrTFoLap9JsrJvH-mV5tzyoL0_EWqanjt-pkstHr0zXRAzuXxFLtwtZdFaa6OVg336hI9JbthUT-E6xC_-oExOdl8rTJE3RfEShYJZw0Wv0Ud9Ly3RJKOtodhx4nzol6jkinva_b8k4VCt81JIJSqKS0vcIF3UtOPUZ5wdz90EYuDiZ-nyHoBVo5KcfIHFp83cjOSsgT-Htchbuy1wYneVecZzSFNNvRdU_NGPFbqrZG81fWZ_4eFULXu4mHc2qsSQXbKE12T0fSPjMNs52I86TqCttYXwu53k5H2dfPxx1PJqFLFyy8Yxz8ZsYm5QLrb4yOY2wF2ZHZhhDt-rqoJdKlnyolmgQMzkv_osE0vQ7xDwnRH6YNEPOTs8SBkNKozL6lre9LO_ulHbV8jCFd61yIx_lSLp9r5n1mWd-NPPEmEU0Pp1MP6nH-okYsyhIPWQh3ciDCDTmnUY_KNaSiJ3hZkUk2bh0tC_NQzs16nXjsBchOyVCjD-oB6dEeOI1czPkgYc40IGz8xuQc2Wa5mVj7l2X5SdDpY8k7jHAyN49709EM2nvZal6Tx1mF9yXVQTPyx6YpXFCD6j38gxKI8a4sfisoHqnlM4nYT9WhWdzhidd5THOPuCp68oHhaATfkRpElJQM-2mqIUvROYbE2lv5Pe95YtqNGWrzXsvWj3cPy-VtOzNdir7vQVw6rF9WZ3y1gVTf5KDjnciTglhDkGtFWXGXDdl6WfPj3RgbNEurddh-6GR_D8NW9dWB3g5qjKsUnrX4zy2sTsdWxdMMMtOb3bd2hEZv_3-x2h6D3HDiWDUuppprN69a7U--eH5yXMzeGaUdUUDRaeMkpfpOMOtBNePtV0RLn9i4_x_lP29LtGFR4syQNEaHsz63Snl_OdQ5aGJx2MGgn2KO7NjxDRn83HOn9rjtxjwJ9XSMOBRIkRO6Od1OZ17_w6pPzakbp1W_SHZz6LB95Hk24S-QJ43jcRxkUYR_EuGyp8wAw6V9LzxK46LpESTA8tacLuQxdNBA_RziP6X8K0PIY63reHwS8ypMZZm88kB2t_p_Ien83asRH1-zM5tMTJSRH86y0y13M_by4cnog3TJ86FfqS6p2pHfWLD507zlCTZ6ZGhO4ugW9KeOhyMoS9Wc7l5ZuX58vV89qc1-LzhHrIsKmMIKuLvX4x_HUWg2Ini3eYpgrCM8hjO58BY0v2eGIfJ-LbCcD_horjCRYYzcsGuwiSFaRrFOLnYXiGYRgTPE4YjhnAUZQzFMcpgEpOYYZhf8CsEEQpRGIYJRGEym8MwogmKCEvLBJUoiCCrCBczp8KZ0psLf3_gKs6iCF8IkjNh_KUxhCT7AvxigFAQ31zoK_8Tfd5sTBBBwY01eyyWW-Fvm3kbxDfgZXkHSqWBUKoG764LvHIliPVHTQV7A3TL6GfA5fjuhL_O4K8wsOKi0eLqt9-M8ML9NwAA___eerkN">