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

    <tr>
        <th>Summary</th>
        <td>
            Assertion `!isInvalid() && "Loop not in a valid state!"' failed with LoopUnrollAndJam
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

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

<pre>
    The assertion starts with patch https://reviews.llvm.org/rG8ae0d9aa072643a7c596e147e3fc7ee0b4dede1f.

Reproduce the assertion below using a build with assertion ON, since the ScalarEvolution verify is guarded by macro NDEBUG in `llvm::UnrollAndJamLoop`.

To reproduce:
`opt -verify-scev -passes=loop(require<iv-users>,loop-unroll-and-jam) reproduce.ll -stats -o /dev/null`

Result:
```
opt: ../../llvm-project/llvm/include/llvm/Analysis/LoopInfo.h:152: bool llvm::LoopBase<llvm::BasicBlock, llvm::Loop>::contains(const BlockT *) const [BlockT = llvm::BasicBlock, LoopT = llvm::Loop]: Assertion `!isInvalid() && "Loop not in a valid state!"' failed.

Stack dump:
0.  Program arguments: ../../llvm/build/bin/opt -verify-scev -passes=loop(require<iv-users>,loop-unroll-and-jam) reproduce.ll -stats -o /dev/null
 #0 0x00000000130e9e34 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int, void*) (../../llvm/build/bin/opt+0x130e9e34)
 #1 0x00000000130ea254 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #2 0x00000000130e6f98 llvm::sys::RunSignalHandlers() (../../llvm/build/bin/opt+0x130e6f98)
 #3 0x00000000130ea51c SignalHandler(int) Signals.cpp:0:0
 #4 0x000074c7894404c8 (linux-vdso64.so.1+0x4c8)
 #5 0x000074c788ccd168 __libc_signal_restore_set /build/glibc-E31xyL/glibc-2.31/signal/../sysdeps/unix/sysv/linux/internal-signals.h:86:3
 #6 0x000074c788ccd168 raise /build/glibc-E31xyL/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:48:3
 #7 0x000074c788ca4850 abort /build/glibc-E31xyL/glibc-2.31/stdlib/abort.c:79:7
 #8 0x000074c788cbc49c __assert_fail_base /build/glibc-E31xyL/glibc-2.31/assert/assert.c:92:3
 #9 0x000074c788cbc540 __assert_fail /build/glibc-E31xyL/glibc-2.31/assert/assert.c:101:3
#10 0x0000000011da6dec llvm::ScalarEvolution::computeLoopDisposition(llvm::SCEV const*, llvm::Loop const*) (../../llvm/build/bin/opt+0x11da6dec)
#11 0x0000000011da5858 llvm::ScalarEvolution::getLoopDisposition(llvm::SCEV const*, llvm::Loop const*) (../../llvm/build/bin/opt+0x11da5858)
#12 0x0000000011da69f0 llvm::ScalarEvolution::computeLoopDisposition(llvm::SCEV const*, llvm::Loop const*) (../../llvm/build/bin/opt+0x11da69f0)
#13 0x0000000011da5858 llvm::ScalarEvolution::getLoopDisposition(llvm::SCEV const*, llvm::Loop const*) (../../llvm/build/bin/opt+0x11da5858)
#14 0x0000000011daaadc llvm::ScalarEvolution::verify() const (../../llvm/build/bin/opt+0x11daaadc)
#15 0x00000000131e4b04 llvm::UnrollAndJamLoop(llvm::Loop*, unsigned int, unsigned int, unsigned int, bool, llvm::LoopInfo*, llvm::ScalarEvolution*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::TargetTransformInfo const*, llvm::OptimizationRemarkEmitter*, llvm::Loop**) (../../llvm/build/bin/opt+0x131e4b04)
#16 0x0000000012e5d758 tryToUnrollAndJamLoop(llvm::Loop*, llvm::DominatorTree&, llvm::LoopInfo*, llvm::ScalarEvolution&, llvm::TargetTransformInfo const&, llvm::AssumptionCache&, llvm::DependenceInfo&, llvm::OptimizationRemarkEmitter&, int) LoopUnrollAndJamPass.cpp:0:0
#17 0x0000000012e5b6f8 llvm::LoopUnrollAndJamPass::run(llvm::LoopNest&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (../../llvm/build/bin/opt+0x12e5b6f8)
#18 0x000000001353177c llvm::detail::PassModel<llvm::LoopNest, llvm::LoopUnrollAndJamPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::LoopNest&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (../../llvm/build/bin/opt+0x1353177c)
#19 0x0000000013bebcc8 llvm::Optional<llvm::PreservedAnalyses> llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::runSinglePass<llvm::LoopNest, std::unique_ptr<llvm::detail::PassConcept<llvm::LoopNest, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, std::default_delete<llvm::detail::PassConcept<llvm::LoopNest, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>>>>(llvm::LoopNest&, std::unique_ptr<llvm::detail::PassConcept<llvm::LoopNest, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, std::default_delete<llvm::detail::PassConcept<llvm::LoopNest, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>>>&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&, llvm::PassInstrumentation&) (../../llvm/build/bin/opt+0x13bebcc8)
#20 0x0000000013beaf14 llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::runWithLoopNestPasses(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (../../llvm/build/bin/opt+0x13beaf14)
#21 0x0000000013beaa44 llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (../../llvm/build/bin/opt+0x13beaa44)
#22 0x00000000134d7dec llvm::detail::PassModel<llvm::Loop, llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (../../llvm/build/bin/opt+0x134d7dec)
#23 0x0000000013becb80 llvm::FunctionToLoopPassAdaptor::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (../../llvm/build/bin/opt+0x13becb80)
#24 0x000000001351240c llvm::detail::PassModel<llvm::Function, llvm::FunctionToLoopPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (../../llvm/build/bin/opt+0x1351240c)
#25 0x000000001276eb74 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (../../llvm/build/bin/opt+0x1276eb74)
#26 0x000000001080ca0c llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (../../llvm/build/bin/opt+0x1080ca0c)
#27 0x0000000012774554 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (../../llvm/build/bin/opt+0x12774554)
#28 0x000000001080c62c llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (../../llvm/build/bin/opt+0x1080c62c)
#29 0x000000001276d9f4 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (../../llvm/build/bin/opt+0x1276d9f4)
#30 0x00000000103df424 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::StringRef>, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool) (../../llvm/build/bin/opt+0x103df424)
#31 0x00000000103f3108 main (../../llvm/build/bin/opt+0x103f3108)
#32 0x000074c788ca4ccc generic_start_main /build/glibc-E31xyL/glibc-2.31/csu/../csu/libc-start.c:308:16
#33 0x000074c788ca4ea4 __libc_start_main /build/glibc-E31xyL/glibc-2.31/csu/../sysdeps/unix/sysv/linux/powerpc/libc-start.c:98:10
```

[reproduce.ll.zip](https://github.com/llvm/llvm-project/files/9815442/reproduce.ll.zip)

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztWllz2zgS_jXSC0oq3seDHuQjs9nN4Yqd2UcVCEISJhTBAKBs5ddPA6QkgpJjaZJsYmddMg9c_fXXjcZBZDzfTO6WFGEpqVCMl0gqLJRE90wtUYUVWaKlUpUc-NOB9wp-gq4ZvZfjolivxlwsdNIfCaZOnmLsxF4U-DgmYRpRN4ipPycxpU4W5DSn7nw8cK4GzrS5fqCV4HlNKFIWgowW_B7VkpULhFFWsyJv4OyLvH838C4RlGgr3xJcYHG95kVt8tdUsPkGMYkWNRYgG2UbtMJEcPTu6vri4x-IlWgQOVoJrZk__VgKXhTTMv83Xr3hvIJMC-wdR2KLV9dosiKHVwqNGnEjSegajSoNE_i6KnQzXiLo55oJqHTJ1qMaNIC8a4Cvs0e1ETvCZT76C68GXrqXAgyjEVgDjDHiCGjO6RquZV0UINcmUtaF6qJqf-YVEEIWGo-hsrlopUcg5C9KVPsKN-CyqHO6T5iWuNhIJuFRE_K6nPPxElpyQ0-3l3FeoD1_usgFllrNfSIkMHJRcPJJm8surEkwL4SXCrMS5CTwKBUyFe5A46nmo0kbhBfbZP8KPSZBt9svYWSFVxrydOc_mhzPZfJ1ucYFy0G0FjXwIvjBzdOVUMmVdhOMTBndMRTQ40L2wIvRHLOC5paP3CpMPqG8XlU7WzhjhG4EXwi8Qlgs6hUtlTw0B9yMn-s7K-H6c9zKQIY030HOg9P-ub5DU-oHHU7lRjYPN4KVyqh9JzB0DC_ZFxL4fsalElQDiLR5oKy-rblmfNownjxNxMC7cB62KKDWHqbbg4m9MEA9TLdsAY78L6CioALkdaQ3WXJMKm0wx_zv2vZ6bUfzNDlGwYe6tETInTOdo5pu3VLN76sWugT1dTGEPqFH0DYUByRO0iBwApJocAUr64fROpc8CsaSj12DBTItGGG3dkJI7kYJms0KlpGZNGJngkrFBZ1JqlBHx4UuM7r23YfNm92rN_ZBzqum5pYcoDKnlY4zdckemgTtkgahiUyKCig_kq2eOgolEVz8PdDoGFCBmaQ_BpRpekwARJDYSGIbCQ6S0EE44-J0elQOr_BgahkhcaoveyGJLSQjQUrALs0IOdOxaZbh03Vv6u0ejMjUs_VK-yLDwLFFfos013H34nTXtkKQm-Mop6TT_3oj_nYoWVW1ojp6XzFZcclMXjcq3V5e_9mMKSYI9EelTtZZXbgFuOs7WgO3p0GYhMlTGiyo-jnoNTgLvdfnP507vzb_ANDSwH_W_Ac99BjnT_p_M2FoB6B24nQWCi3EQhFaw5BLg8zpTgQOZs1dspoEQ1Nd6ugK0_B2CvDUu55cHtKrp6AHvPeJ6Odf8RUrMYxQd4LSg1yYEsJ0TVe8xGR5mH8HkzaqYCJRyjkXK43gEfu_h1ZW7AvWbX2gKyw-Xa-YUnqcPuIpJvHsKVDDv2WgqGsgj4Z5DE6uxOaOn2qbR6mK_qkFopM5jJ6wRi__ila0zCms-hog0ckm2M8_U7NK6JJzA8PQ4dxJkxv3yM2iedJjpN9QO_etywO639FjGreLrLe4xAsA2l09NTbqmwBmtmUOa9ptzWbxJ3XLev5_xGhfqWGXvXn7scrxlq-zXLMlx3LNxIodIdAZdyNYTmHZV7TrCGDuLc9pcUBAw1pfpQPWrRI3MCWlYk1bjan8wZx_H8K36-Hfznda17B8J7V8J6MZIUmvp3M9W-_qfGh2_7rrFdrHTqLq13eQW1YuCtrEm0c6DCwimkRYv3yu6axStiL97nfJIazqraInO-CvS09X7ZzOMdSaQVChir541Xe_r4SO_7vEb-gSz2jUuOxF69cwRxRmyxTvJpbnjSzNwNEdWTynN7LguRu80FHiv0wtt05702wfH64Bno97nGt6bVnL9G7f9Dh4qab_vQwNdrQMbe_dB3ls7x2etvI4jEfP3Tle-CLp5bp448GWi_u9WEaypLs9-6ouiR4z77gGqZ13muNKcXGcvm3xsyjcVWqpObfbasiWToG9YeB6gXNet92rcXkSF9-rQ3SZeMxDfwLFDYMWxdZ-rhdHNItPGQKPE_v8KGk1tiixdlCdxCH4u3jdD6PyZTttawDLQvY2bBwHYdh1WrBIXdA7vpX7ZLRrKpylU1vln_mcAWxplPR9LvLO87mtCpcn8vC9nGbPw2Mu878lt-XOIjftxbg8nZ8S445R-pyoaDXtUmGf43H8fB54XSoAsGbjhlW0YKV9fOdWCVYuPtD5MSd75BvPW0yWpp2jX9HesExgsdGfbl6vquKwFOfF-1pVtXrFiiONfFP2I-pMhcAbndo1wr5sP9weLW4oLOoFKw_Kg3FmSn_LNG8NvP-wMv9aqT_1R1xGxbbc9lvoaffzek_jEZbLuLbLzH3oY2iF9XnJcxo29ayGvf65GEIIWtAS1CUzc-p01oo56RAJkfUWS_NoMk075kCJ7-hzOW60B-D3AVAc7M4yfYv8p84KVfyeioocYkwNxO0HR_vYZnsNL7on98ZfmDnM6CX2odwFU8s6GxO-2ptG3zrHPOfQKzTENHHDIPAG-iRvr-GttYZ04kZR5Ppu7HvDfOLnqZ_ioWKqoJMfcIiyOd3b_643rEUxOVtNJmVt9AyTIAyGy0mEgwiWFgR7ue_koRdnAY3nESUeaEfcaFjgjBZyAkwDs0M28RzPcx038eDPdcc0J14QxG4SzLM0zN1B4FDwk2J3AHooJgZDVi8kZBZMqv3p6CHEBn2ygW7bx7VacjH5zHD5ZUmHBu7EYP0bAGH6Cg">