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

    <tr>
        <th>Summary</th>
        <td>
            [MLIR]`vectorizeAffineForOp` triggers assertion Failure `it != strategy.reductionLoops.end() 
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </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/c3440e213ca02c2fcd91f3f8cf65774a2b1a9e6f

Steps to reproduce:

```
mlir-opt test.mlir -affine-super-vectorizer-test -vectorize-affine-loop-nest
```
Test case:
```
func.func @vecdim_unknown_reduction_rejected(%in: memref<256x512xf32>, %out: memref<256xf32>) {
 %cst = arith.constant 1.000000e+00 : f32
 %final_red = affine.for %j = 0 to 512 iter_args(%red_iter = %cst) -> (f32) {
   %add = arith.addf %red_iter, %red_iter : f32
   affine.yield %add : f32
 }
 return
}
```
Crash trace:
```
mlir-opt: /home/ty/llvm-project/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp:1307: mlir::Operation* vectorizeAffineForOp(mlir::AffineForOp, {anonymous}::VectorizationState&): Assertion `it != strategy.reductionLoops.end() && "Reduction descriptors not found when vectorizing a reduction loop"' 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-vectorizer-test -vectorize-affine-loop-nest
 #0 0x0000555e1883b0da llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/ty/llvm-project/build/bin/mlir-opt+0x22b0da)
 #1 0x0000555e1883836c SignalHandler(int) Signals.cpp:0:0
 #2 0x00007feaf1af4980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #3 0x00007feaf07a5e87 raise /build/glibc-CVJwZb/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
 #4 0x00007feaf07a77f1 abort /build/glibc-CVJwZb/glibc-2.27/stdlib/abort.c:81:0
 #5 0x00007feaf07973fa __assert_fail_base /build/glibc-CVJwZb/glibc-2.27/assert/assert.c:89:0
 #6 0x00007feaf0797472 (/lib/x86_64-linux-gnu/libc.so.6+0x30472)
 #7 0x0000555e1891ba1a vectorizeAffineForOp(mlir::AffineForOp, (anonymous namespace)::VectorizationState&) SuperVectorize.cpp:0:0
 #8 0x0000555e1891c7bb mlir::WalkResult llvm::function_ref<mlir::WalkResult (mlir::Operation*)>::callback_fn<vectorizeLoopNest(std::vector<llvm::SmallVector<mlir::AffineForOp, 2u>, std::allocator<llvm::SmallVector<mlir::AffineForOp, 2u>>>&, mlir::VectorizationStrategy const&)::'lambda'(mlir::Operation*)>(long, mlir::Operation*) SuperVectorize.cpp:0:0
 #9 0x0000555e18914d7b 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+0x304d7b)
#10 0x0000555e189164f3 vectorizeLoopNest(std::vector<llvm::SmallVector<mlir::AffineForOp, 2u>, std::allocator<llvm::SmallVector<mlir::AffineForOp, 2u>>>&, mlir::VectorizationStrategy const&) SuperVectorize.cpp:0:0
#11 0x0000555e18916cd7 mlir::vectorizeAffineLoopNest(std::vector<llvm::SmallVector<mlir::AffineForOp, 2u>, std::allocator<llvm::SmallVector<mlir::AffineForOp, 2u>>>&, mlir::VectorizationStrategy const&) (/home/ty/llvm-project/build/bin/mlir-opt+0x306cd7)
#12 0x0000555e19d943ef (anonymous namespace)::VectorizerTestPass::runOnOperation() (.part.261) TestVectorizationUtils.cpp:0:0
#13 0x0000555e19d952fb (anonymous namespace)::VectorizerTestPass::runOnOperation() TestVectorizationUtils.cpp:0:0
#14 0x0000555e1a155bee mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/home/ty/llvm-project/build/bin/mlir-opt+0x1b45bee)
#15 0x0000555e1a155f2a 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+0x1b45f2a)
#16 0x0000555e1a156312 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&)::operator()(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&) const Pass.cpp:0:0
#17 0x0000555e1a155335 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool) (/home/ty/llvm-project/build/bin/mlir-opt+0x1b45335)
#18 0x0000555e1a155b32 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/home/ty/llvm-project/build/bin/mlir-opt+0x1b45b32)
#19 0x0000555e1a156a43 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
#20 0x0000555e1a1570cd mlir::PassManager::run(mlir::Operation*) (/home/ty/llvm-project/build/bin/mlir-opt+0x1b470cd)
#21 0x0000555e1a14b043 performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#22 0x0000555e1a14b711 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
#23 0x0000555e1a14b901 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
#24 0x0000555e1a21d810 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+0x1c0d810)
#25 0x0000555e1a146a23 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+0x1b36a23)
#26 0x0000555e1a14924e mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) (/home/ty/llvm-project/build/bin/mlir-opt+0x1b3924e)
#27 0x0000555e188070c0 main (/home/ty/llvm-project/build/bin/mlir-opt+0x1f70c0)
#28 0x00007feaf0788c87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#29 0x0000555e18819f2a _start (/home/ty/llvm-project/build/bin/mlir-opt+0x209f2a)
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWltz27gV_jXwC8YcEOD1wQ-KbU3TiWtPnKYz-6IBCVDChgRYAIyt_voOQEoiaTmW126b3W7GsUTw4Fy-c8EBYGqMWEvOL0D8AcRXZ7SzG6UvPnBa_8LbzVafFYptL75wY2GpmkZYQBZwY21rAFkAvAR4uRZ20xVBqRqAl3X9ffdx3mr1Ky8twMthKl6WJIoQxyEpKcIlrkqWhxWpsrJK4jSNKC5CmvOkAugKoEX_-97y1kCroOatVqwruRM9IgAJGn78Y1MLfa5aCy03NnBP8JxWlZD83HQt1-ffeWmVFv_i-tyRwMPAjq5Wqj2X3NijAno0qBnpMSWoOlkG7hcEEfrOSyaaVSe_SfUgV5qzrrRCuW8OHc4AzgCOhXTINrzRvALkEsfJYxzix4pgQK4BvoQAx6qzT4h2BDkE6YdevCMtjYWAXEGqhd0EpZLGUmlhGCD_jwP8ASHouDkG-2mVkLR2OvaTPRpBpbR796sfQ84TcYihsFyvqF6bXn_N2coNeaJeAafUOSDXEODMSZnoCB0RZWykJWWsgiNWg9UjzmNt4U69reA1O3CbWJReDd80t52Wg7d2ozO3XWpqNtBqWj7r2V1sOTEALzeq4QAv7fZpyDtKNyoKgJdXgtb98MLrDPDyi6bSVEo3BuDlvYvLr7soDMq2BWQREpR6dztOZAHI4rblmrrYAXgB90Hbs1wqfdsCnB2oJ-OXDnoqldw2qjMOAU-zk-m53ltqOcAJwLmTuzCGazcOQYKEhQCHzlfGamr5ehvsI_mTUq0JuOwjOYeeRQIBxp93JJBxU2rRWqUNlMrCSnWSwYcNl3tDhFxDCvdcoUtCgDHAKayoqDkLeh_cfbpe3F9D0xWNsJDColu70qC0daH56tokjOm4cwKkkkEhy7pjHNoNh6WPh4KW33xMBLtyRMtvkHVNuw8SFACU32m11rSBVK-7hktrXo6RohM1c59CDhHzvnULAkwQRI8u4-M45mGWkQIxCj0SPgDM1vRf7rSQ1tv2xScAzg5Emj6slLGa08b79hIKaXtPZ7_FQld8HjF2qrhY2-saznTNSFLCe7GWtP4Llax2JSEbRPfDZsgV5P_vGeGBUVpxWoW0ivIMwdVKc2OV5ittB8377HzMklUSnddCdo_na9n1L1q70ZyywKgAeYVDnGdooi8Zi0EpjXmWQk2F4XBk-7oWRXl--fWvD78U-0cc4BTgpfFWALwMAve0NYy3LhY7KR77ge9eG9m5R886KAFZxOHU4GimSZpWIaSF8paepollPRp-lheSzYTEUyF5SioKVyvq68TK5eiqoKfb3s_bf-lF5lORyVxklOITfFc6ryXeawRFKZ54LZ1EWR4WNKSvr6Y421dTKGnDTeuzJv9xXYVHK_0serOZgmVaFKNV4B-0_vaZm662ozx23cbQVbjO4Cj1xJ7xWuLVvu7HS1rXruStKgnI5R4WV-P_5goLzoxlPWn_EpDLgxr3Da3rr7vxZ9HD3dDU7HnRulYlfRO7_qevTwfSmSf6tQv6hmi_1PnlIq1pU7iClL6EE85qJddTMTOyk_ycz_wcsfQZPx8GGbdU1P33B1p_m8CyVPqBavbROl0cZNc_MOXynaNnAoebd6uZK9hvWyUIcqjs89ctEmgGWxJVBP4fBOqLMeXACefglCwdCZmVuT8wWG8LOgfbJOjwGNec5RHh1amLANdux3hHzdBq6U7eylEGDU1zFrRU2wAnoXt2UyZW_t2KY-2OU47MlItxVbyrcq9RJhorQ8M4Ljh_poDdtl_UbetkLxhtfTgMKkyKjVeuL1nPF7NRGElab40wN1TSdb-LLJSq3Wcn_XEHe4_-NSwiZ9okSuK57RWmr7b9TrS89pvEScF1pHuTkncHYzzJifoojdV-I6P0E65Tgl5y_2LQ_Y5qLu1HWaldUi7eA-8K0wneyQzvxCXqa_EehfvCbGX5sWlrgLMeppfag_cTcdve3TjAxl2JaoeV3Kfhf0Vw7y_omB3P73Qe44TE74z5m-OEkHgSJ9mTmkReHye_l5pE8MT2fJ4jNCJ_1qRJTerPR1ut2iAO3Rb_-fDHaAZniko202Jn19HAmW8U3uhuJ37sbhxO9YsKFBHYcl0p3Sx8k29eONvZd29mQzVnq9bO2jfV6ZLfrN3-YtRyjX1x8-nj50slLX-0T_x0Uwt929obKuSlkpVYT9q20dvj-OO5fWkYwlarkhvzoasqf0Z0knmdFP_s-BPzbnij9HbHakTPeEW72q4Yr7nlz88ZOtZTbR7TDefEn_laGKu3w_uDnC_-SOrOJ8viJLjIHK4chSOBn9RalLQ-_ThhOmG8b_iPw_m8U587vTjqgJ8wPI67_cSUOdqg_DReOZyV_BQqvZww0-0LDlkWopErTFsLu5DsblZx_hfW_Q6T9IcUhzbgXfrAEjnfTRbH2f4sSigmx_Psj1Yl3thnEIfUBMrZ1ivKccSfhXLo5soN7fu22fHjvdVCrj_z6hSD32ePQJy-E4Om1wIZSlGJYEOFfJukyvGZCMqmdxpZVmYpXK1qUZQrY6m2q0HqSbcopel210f9V__S8_E3KiSKpgVueuqchXmFKewFv-0-D-WT7fn04vyMXRCWk5ye8YswyVCYpRjnZ5sLVOAwiiMSJWnBcJrHKWEZylGYxlleEXQmLjDCBBGCwihCOA-iJEtIXoSsLFHECgIixBsq6sDpGii9PvNXuhdJmEX4rKYFr83u71v0hTeo6NYGRKgWxprDNCts7f8SxrWvIL4CCTp6LZQgaLVYr7k2kO4vyZdU1J3mr70sP-t0ffHbL629kf8OAAD__--RChI">