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

    <tr>
        <th>Summary</th>
        <td>
            [SimpleLoopUnswitch] Assertion `LI.getLoopFor(ParentBB) == &L && "Branch in an inner loop!"' failed.
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          max-quazan
      </td>
    </tr>
</table>

<pre>
    https://godbolt.org/z/rv7j4sxYP

Run `opt -passes="loop(simple-loop-unswitch<nontrivial>,loop-instsimplify)" -S ` on the following test:
```
define void @test() {
bb:
  %tmp = call i1 @llvm.experimental.widenable.condition() #3
  %tmp1 = load atomic i32, ptr addrspace(1) poison unordered, align 8
  %tmp2 = load atomic i32, ptr addrspace(1) poison unordered, align 8
  br label %bb3

bb3: ; preds = %bb15, %bb
  br label %bb4

bb4:                                              ; preds = %bb13, %bb3
  %tmp5 = phi i32 [ poison, %bb3 ], [ %tmp14, %bb13 ]
 %tmp6 = phi i32 [ poison, %bb3 ], [ %tmp5, %bb13 ]
  %tmp7 = add nuw nsw i32 %tmp6, 2
  %tmp8 = icmp ult i32 %tmp7, %tmp2
  br i1 %tmp8, label %bb9, label %bb16, !prof !2

bb9: ; preds = %bb4
  %tmp10 = icmp ult i32 %tmp7, %tmp1
  %tmp11 = and i1 %tmp10, %tmp
  br i1 %tmp11, label %bb12, label %bb17, !prof !2

bb12:                                             ; preds = %bb9
  br i1 poison, label %bb15, label %bb13

bb13: ; preds = %bb12
  %tmp14 = add nuw nsw i32 %tmp5, 1
  br label %bb4

bb15: ; preds = %bb12
  br label %bb3

bb16: ; preds = %bb4
  ret void

bb17: ; preds = %bb9
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(inaccessiblemem: readwrite)
declare i1 @llvm.experimental.widenable.condition() #2

!2 = !{!"branch_weights", i32 1048576, i32 1}

```

Stack trace:
```
opt: /root/llvm-project/llvm/lib/Transforms/Scalar/SimpleLoopUnswitch.cpp:2188: void unswitchNontrivialInvariants(llvm::Loop&, llvm::Instruction&, llvm::ArrayRef<llvm::Value*>, llvm::IVConditionInfo&, llvm::DominatorTree&, llvm::LoopInfo&, llvm::AssumptionCache&, llvm::function_ref<void(bool, bool, llvm::ArrayRef<llvm::Loop*>)>, llvm::ScalarEvolution*, llvm::MemorySSAUpdater*, llvm::function_ref<void(llvm::Loop&, llvm::StringRef)>): Assertion `LI.getLoopFor(ParentBB) == &L && "Branch in an inner 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: /opt/compiler-explorer/clang-assertions-trunk/bin/opt -o /app/output.s -S -passes=loop(simple-loop-unswitch<nontrivial>,loop-instsimplify) <source>
 #0 0x000055d44904e07f llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x3a3807f)
 #1 0x000055d44904b7a4 SignalHandler(int) Signals.cpp:0:0
 #2 0x00007fee822a0420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #3 0x00007fee81d6d00b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
 #4 0x00007fee81d4c859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
 #5 0x00007fee81d4c729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
 #6 0x00007fee81d5dfd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #7 0x000055d448eaedac unswitchNontrivialInvariants(llvm::Loop&, llvm::Instruction&, llvm::ArrayRef<llvm::Value*>, llvm::IVConditionInfo&, llvm::DominatorTree&, llvm::LoopInfo&, llvm::AssumptionCache&, llvm::function_ref<void (bool, bool, llvm::ArrayRef<llvm::Loop*>)>, llvm::ScalarEvolution*, llvm::MemorySSAUpdater*, llvm::function_ref<void (llvm::Loop&, llvm::StringRef)>) SimpleLoopUnswitch.cpp:0:0
 #8 0x000055d448eafa45 unswitchBestCondition(llvm::Loop&, llvm::DominatorTree&, llvm::LoopInfo&, llvm::AssumptionCache&, llvm::AAResults&, llvm::TargetTransformInfo&, llvm::function_ref<void (bool, bool, llvm::ArrayRef<llvm::Loop*>)>, llvm::ScalarEvolution*, llvm::MemorySSAUpdater*, llvm::function_ref<void (llvm::Loop&, llvm::StringRef)>) SimpleLoopUnswitch.cpp:0:0
 #9 0x000055d448eb1a74 unswitchLoop(llvm::Loop&, llvm::DominatorTree&, llvm::LoopInfo&, llvm::AssumptionCache&, llvm::AAResults&, llvm::TargetTransformInfo&, bool, bool, llvm::function_ref<void (bool, bool, llvm::ArrayRef<llvm::Loop*>)>, llvm::ScalarEvolution*, llvm::MemorySSAUpdater*, llvm::ProfileSummaryInfo*, llvm::BlockFrequencyInfo*, llvm::function_ref<void (llvm::Loop&, llvm::StringRef)>) SimpleLoopUnswitch.cpp:0:0
#10 0x000055d448eb242e llvm::SimpleLoopUnswitchPass::run(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x389c42e)
#11 0x000055d4493d5116 llvm::detail::PassModel<llvm::Loop, llvm::SimpleLoopUnswitchPass, 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&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x3dbf116)
#12 0x000055d449db83df std::optional<llvm::PreservedAnalyses> llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::runSinglePass<llvm::Loop, std::unique_ptr<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, std::default_delete<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>>>>(llvm::Loop&, std::unique_ptr<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>, std::default_delete<llvm::detail::PassConcept<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>>>&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&, llvm::PassInstrumentation&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x47a23df)
#13 0x000055d449db85e6 llvm::PassManager<llvm::Loop, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&>::runWithoutLoopNestPasses(llvm::Loop&, llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>&, llvm::LoopStandardAnalysisResults&, llvm::LPMUpdater&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x47a25e6)
#14 0x000055d449db99fd 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&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x47a39fd)
#15 0x000055d449dbac3e llvm::FunctionToLoopPassAdaptor::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x47a4c3e)
#16 0x000055d4493d20b6 llvm::detail::PassModel<llvm::Function, llvm::FunctionToLoopPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x3dbc0b6)
#17 0x000055d446790eda 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>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x117aeda)
#18 0x000055d4487f0812 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x31da812)
#19 0x000055d446777486 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x1161486)
#20 0x000055d4487ee54a llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x31d854a)
#21 0x000055d4462fa145 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xce4145)
#22 0x000055d44621102f main (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xbfb02f)
#23 0x00007fee81d4e083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#24 0x000055d4462ebe0e _start (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xcd5e0e)
Compiler returned: 139
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWl1z2zaz_jX0DUYaAuCXLnwhy9aczEl6PHXaM--VBiSWEloQYAHQH_3174CkJJKWYrt1O02ajCOJxOLBfjzYBUEwa8VWAVwG8VUQX1-wxu20uazY4-y3hv3O1EWu-dPlzrnaBnQZkHVA1lvNcy3dXJttQNa_B2Rt7tNfIvv4n9sgvA7CZff5Y6NQkIS6dmhWM2vBBvQ6IERqXQcks6KqJcz81axR9kG4YhfQldLKGXEvmAzoTUBWbbtQ1rXyonwKyCIgBM3uPDjSCrkdoFJLqR-E2iIH1nlNO0WSsP9rLzmUQgG614KjIApbUZIFZIGC9KoTyfNDZ4QCEruqRgG9RgWTEgnsu0l5X83hsQYjKlCOyfmD4KBYLmFeaMWFE1rtcQmlYzTcwknNOGJOV6JAgpKArFDtDGKcG1uzAgKSYd-_1sJqhRqlDQcD3AsyKbYKZWNY8t6wuUGS5SA9fp7TYWD9JV2igF6h2gC37dCtGI49UvvzNE40xok8zpv-nRqUHgad-Dpuheqd8M5AQXzVG36UR0F83V7FV_v4RIdW3DV3kF1r8gcQ49OAfWvaIjLOkWoekLIPHXI3mu9JxvJZKy-KqkaNdAPhtB_Gk2HgfM_ZrqNvH4RiMbnGSQeAa6NL_03GsVqciXk04Xf4CgXxpE83KZjiR3VxeBQ_ZQ7GU_3J9Eb6ZYMweSv7Tli_GOt2ZMNQkXh6YzKd8Nn5NAk-jr7AlnYU_Kp5h-MXB_zi_MfJS2Qw4No8O-mXnum3ONMvvR4C-I7rRhU-waKlc8bXJKS0T845K35FSpcGACltn1SBlG7Ug1Ac2RqKRjLnUzR6EFIacI1RqIJKm6eAZEKxogBrRS6hgsqjGmD8wQgHvt701aOQzMAfqwIj7nku9rZjX3kIDgjJDVPFbvMAYrtzNiAtnX10cRhlcZocLqdOGde47vPOeXc443P-mWKoa9cGg6yN1i4ga2_RrDb6Fyj2l_5L5AFZfzZM2VKbygZkfVcwyYz_0Zbwj1rXP_UFfF7UdUCXBGeZB28r7b64_3Co7B_UPTOCKW9m1o5DlwFdfmwXBq2hx5sflHWmKTpvTtqWxrCnH6EM6Op482cmGwjIsls-DJF-Xu3j8kGV-hnata6EYk6bzwbgWatX7mS3pbVNVXvUFSt2zzuWPWE3plW0JTfJcq2ll9t_v2BU55rOpsUzy7qA3Nxr2XR-Wo7bP7U8v7tb_lRz5sA8Ezit4wuRuXNGqK3XtFeprRBLa8G0EzRIwo8f5ltwvvdam4Bkt8yAcldX7aSg190USD6iFjtBASFX7SxAQiGmkFAKDOrWi7idESkqmZDA5x2Hbz_eLO9ukG3ySjjEUN5skYFaG4ecRpNVq3C7Jp8XuhqQe0x5YW0DnuFdKVKFbDi068vCMLtDPse0c2o-nGW8qerDJAvnQbi4NXprWIWY2TY-Odh-ovkpR9aFrmohwczgsZba-HCsC8nUdsb2vrMzZxr1a0DWuVBdRzTTHoLVtb9uXN24ufWr4OPa-s8vrFFAV1Y3xmeNm8PCh4YofAzDMIxjHkWLMIIwLQdEsE-2-3FrhHKtUz6bbrV5FDLsYaOtM8CqnklCuS45Zn_SNQG5Ch8po1mYlods7fXGE73zlEXoTmwVk__DFJceP-vV6G7bPoGF7f8DEOmB0hIgI4SFEQnRZmPAOm1gY1xvRZcsH7Nkk0QzKVTzONuqpmuo3c7XlLnV87DVGEcRCUf60uEwmCc8DHNkmLDwCvzCIyctckTDMB8hR2PkqMjiBWK5fpXmA2RCsngxQo6nyOkhpq_GTMkYMxljxrzkydswKS15MsJMh1zIgAFnxffS9Czto6-hNqE_UpzQ2dXKZLJnE6aULIoPTLkC61aD5d0LavxFgVsufwTbSE_SSctnZrbgDsu1k-jfw34q7Itx2HPM0ugQ9m6wryja54P5VUT_1uhSSLhrqoqZp86uiciV1MWvawO_NaCK0yJ_K4f8eiOccIhEBIbIz2Bume3XTqZ5RTpZKiafrLCfmGJbMCciMiXcnWOKM8P3PQdM8qadoOgXeoxlbz8dope850IuWxQROT52e7-OF3KUxxgnA1U4OCZkzxxm7SfNQb7gnDOxmLAQLJh76H0B9i-OxvuEgt58Z9SYUTwvMU5GjCIjRvE8o7xE1vFOE91mYzbm0HM20JshWTzxXuXFfz5v7oTaSuiS0wnlDn5qlPitgU3txkZM5-NKqwJq99W6ZWgyh5I10m04SHDwTZt9-DuTRb7T4F9Eg6-ocKwmWbl7Tm936Q_P6u9WXKKUEcrLUXGh0-ISQ_KNVor_F26nm3aL9wew7rbbi_y-7OiZEcN42RFNmLFYlPwbZcZ3EvQkoIuSj0gQT0jACjp8Sty_4fysvQGeEkvOaqfNadfuxd_k3kOn3m3vaW9U0PHTWzJ5eiNh_rant6OJq1f56b0e4oZeOsfsf5b7Kc-LMB_nnNHOd5IuQuDsHdx_Lledln6Dm_-90cM4ZcDZKHrj3ei0DDNMhjtpmjcSPuu9Ti-mi67Dm-ztu7w7VzFnGSYjaxdjrqZplL0tVezNW73SR-9FtqOPzlHtn-N4jBMcZaMkQcY7lylAHLFXTPZT7v5W3EQxz-JoNBvJaCMyISXDUTzQ0jQtuW5FDVKo8Qvwwbbyc3Ke2dn_xIpdi7M81fpR5KbfHf9Q1fK5lNby_9qTAmshT4D8qeYz5px8WdD6RDZboZ7ld127jdO6n9PdeP8rFP-S1M9gRCnA7OWmry6-_P1u_CggwlE8ogcZ0wPjkJSoYkK915h5mYdk9LBJJocGIggzijYbKfJiYx0zbjNQ4LWv5KMwo6NRorFlkEMIqMN_N3_yGMLjynHVI6HusB7wgC4RpovJYbYLfkn5gi7YBVziJE1oiiMcX-wusxKzlPAsxjhPaMF4UeRlWkQJy9Iwy-mFuCQhoSHBEQ4jSuN5mnMoGKQl4RQD50EUQsWEnHsizrXZXrQHhC6TMKXJRXs60u4PzptLLzTLm60NolAK6-yxmxNOtkfsn790COLrv-vI1EVj5PQk_xvORLVW_zcAAP__3VHLww">