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

    <tr>
        <th>Summary</th>
        <td>
            [LoopUnroll] Assertion `isAvailableAtLoopEntry(LHS, L) && "LHS is not available at Loop Entry"' failed.
        </td>
    </tr>

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

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

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

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

Run `opt -passes='loop-unroll<runtime;partial>' -S` on the following test:
```
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:1-p2:32:8:8:32-ni:2"
target triple = "x86_64-unknown-linux-gnu"

declare void @llvm.experimental.deoptimize.isVoid(...)

define void @bar(i8 addrspace(3)* %arg) !prof !1 {
bb:
  br label %bb1

bb1:                                              ; preds = %bb13, %bb
  %tmp = phi i32 [ undef, %bb ], [ %tmp22, %bb13 ]
  br label %bb2

bb2:                                              ; preds = %bb6, %bb1
  %tmp3 = phi i32 [ undef, %bb6 ], [ %tmp, %bb1 ]
  %tmp4 = phi i64 [ %tmp9, %bb6 ], [ undef, %bb1 ]
  %tmp5 = icmp sgt i32 %tmp3, 2147469285
  br i1 %tmp5, label %bb35, label %bb6

bb6:                                              ; preds = %bb2
  %tmp7 = load atomic i32, i32 addrspace(1)* undef unordered, align 4
  %tmp8 = sub i32 0, %tmp7
  store atomic i32 %tmp8, i32 addrspace(1)* undef unordered, align 8
  %tmp9 = add i64 %tmp4, 1
  %tmp10 = icmp sgt i64 %tmp9, 40
  br i1 %tmp10, label %bb11, label %bb2, !prof !2

bb11:                                             ; preds = %bb6
  %tmp12 = sub i32 undef, %tmp8
  br label %bb14

bb13:                                             ; preds = %bb14
  br label %bb1

bb14:                                             ; preds = %bb14, %bb11
  %tmp15 = phi i32 [ 1, %bb11 ], [ %tmp33, %bb14 ]
  %tmp16 = phi i32 [ %tmp12, %bb11 ], [ %tmp22, %bb14 ]
  %tmp17 = icmp eq i8 addrspace(1)* undef, null
  %tmp18 = load atomic i32, i32 addrspace(1)* undef unordered, align 8
  %tmp19 = load atomic float, float addrspace(1)* undef unordered, align 4
  %tmp20 = fadd float undef, %tmp19
  %tmp21 = add i32 undef, undef
  %tmp22 = add i32 %tmp16, 1
  %tmp23 = shl i32 %tmp22, 1
  %tmp24 = add i32 undef, %tmp23
  %tmp25 = icmp slt i32 %tmp16, %tmp24
  %tmp26 = icmp ult i32 undef, %tmp18
  %tmp27 = load atomic i8 addrspace(1)*, i8 addrspace(1)* addrspace(1)* undef unordered, align 8
  %tmp28 = call noundef i32 @wibble(i8 addrspace(1)* undef, i8 addrspace(1)* %tmp27) #3 [ "deopt"(i32 0, i32 2, i32 0, i32 310, i32 0, i32 13, i32 0, i32 7, i8* null, i32 7, i8* null, i32 3, float undef, i32 3, i32 %tmp22, i32 7, i8* null, i32 7, i8* null, i32 3, i32 undef, i32 3, i32 %tmp15, i32 7, i8* null, i32 7, i8* null, i32 7, i8* null, i32 7, i8* null, i32 7, i8* null) ]
  %tmp29 = icmp eq i32 %tmp28, 0
  %tmp30 = fadd float undef, 0x4124755D40000000
  %tmp31 = shl nuw nsw i32 %tmp15, 16
  %tmp32 = add nuw i32 %tmp31, 262144
  %tmp33 = ashr exact i32 %tmp32, 16
  %tmp34 = icmp sgt i32 %tmp32, 2031616
  br i1 %tmp34, label %bb13, label %bb14

bb35:                                             ; preds = %bb2
  call void (...) @llvm.experimental.deoptimize.isVoid(i32 7) #4 [ "deopt"() ]
  ret void
}

declare i32 @wibble(i8 addrspace(1)*, i8 addrspace(1)*) #2 gc "statepoint-example"

!0 = !{i64 582}
!1 = !{!"function_entry_count", i64 32768}
!2 = !{!"branch_weights", i32 1, i32 32}
```

Failure is
```
opt: /root/llvm-project/llvm/lib/Analysis/ScalarEvolution.cpp:11041: bool llvm::ScalarEvolution::isLoopEntryGuardedByCond(const llvm::Loop*, llvm::CmpInst::Predicate, const llvm::SCEV*, const llvm::SCEV*): Assertion `isAvailableAtLoopEntry(LHS, L) && "LHS is not available at Loop Entry"' 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-unroll<runtime;partial> -S <source>
 #0 0x000055cd28f7bccf PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #1 0x000055cd28f796fc SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f95e82a23c0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x143c0)
 #3 0x00007f95e7d6f03b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4303b)
 #4 0x00007f95e7d4e859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
 #5 0x00007f95e7d4e729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
 #6 0x00007f95e7d60006 (/lib/x86_64-linux-gnu/libc.so.6+0x34006)
 #7 0x000055cd27ec1499 (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x24c1499)
 #8 0x000055cd27ec17dc llvm::ScalarEvolution::isKnownOnEveryIteration(llvm::CmpInst::Predicate, llvm::SCEVAddRecExpr const*, llvm::SCEV const*) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x24c17dc)
 #9 0x000055cd27ec1a1b llvm::ScalarEvolution::proveNoUnsignedWrapViaInduction(llvm::SCEVAddRecExpr const*) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x24c1a1b)
#10 0x000055cd27ebc6a0 llvm::ScalarEvolution::getZeroExtendExpr(llvm::SCEV const*, llvm::Type*, unsigned int) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x24bc6a0)
#11 0x000055cd27e9f717 llvm::ScalarEvolution::willNotOverflow(llvm::Instruction::BinaryOps, bool, llvm::SCEV const*, llvm::SCEV const*) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x249f717)
#12 0x000055cd27ed8bd5 llvm::ScalarEvolution::getStrengthenedNoWrapFlagsFromBinOp(llvm::OverflowingBinaryOperator const*) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x24d8bd5)
#13 0x000055cd2914c5e3 (anonymous namespace)::SimplifyIndvar::simplifyUsers(llvm::PHINode*, llvm::IVVisitor*) SimplifyIndVar.cpp:0:0
#14 0x000055cd2914e3ec llvm::simplifyLoopIVs(llvm::Loop*, llvm::ScalarEvolution*, llvm::DominatorTree*, llvm::LoopInfo*, llvm::TargetTransformInfo const*, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x374e3ec)
#15 0x000055cd2907b9be llvm::simplifyLoopAfterUnroll(llvm::Loop*, bool, llvm::LoopInfo*, llvm::ScalarEvolution*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::TargetTransformInfo const*) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x367b9be)
#16 0x000055cd2908125d llvm::UnrollLoop(llvm::Loop*, llvm::UnrollLoopOptions, llvm::LoopInfo*, llvm::ScalarEvolution*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::TargetTransformInfo const*, llvm::OptimizationRemarkEmitter*, bool, llvm::Loop**) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x368125d)
#17 0x000055cd28d43516 tryToUnrollLoop(llvm::Loop*, llvm::DominatorTree&, llvm::LoopInfo*, llvm::ScalarEvolution&, llvm::TargetTransformInfo const&, llvm::AssumptionCache&, llvm::OptimizationRemarkEmitter&, llvm::BlockFrequencyInfo*, llvm::ProfileSummaryInfo*, bool, int, bool, bool, llvm::Optional<unsigned int>, llvm::Optional<unsigned int>, llvm::Optional<bool>, llvm::Optional<bool>, llvm::Optional<bool>, llvm::Optional<bool>, llvm::Optional<bool>, llvm::Optional<unsigned int>) LoopUnrollPass.cpp:0:0
#18 0x000055cd28d4579c llvm::LoopUnrollPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x334579c)
#19 0x000055cd292a3b41 llvm::detail::PassModel<llvm::Function, llvm::LoopUnrollPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x38a3b41)
#20 0x000055cd286f782a llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x2cf782a)
#21 0x000055cd26a77881 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+0x1077881)
#22 0x000055cd286f723a llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x2cf723a)
#23 0x000055cd26a781e1 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+0x10781e1)
#24 0x000055cd286f5b64 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x2cf5b64)
#25 0x000055cd266b2ada 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) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xcb2ada)
#26 0x000055cd265ef973 main (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xbef973)
#27 0x00007f95e7d500b3 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x240b3)
#28 0x000055cd266a61fa _start (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xca61fa)
Compiler returned: 139
```
Likely related to https://github.com/llvm/llvm-project/issues/56282 but our triage hasn't confirmed it yet.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzlW1tzo7gS_jXOi8ouEPeHPDi3M6mdnaQms9mq85ISINs6wYgRIonn129LgEFAbhPv1u6eVOKA1N3q_vqiFiQxT3fHGymLcuYsZ_gCvtc8jXkmF1ys4e4H_MTnD983DyX3Z9bZzFrWn1-rHM18ixcSzQtSlhQknM1wkHFezKtc8CybOaeiyiXb0plzUhAhGYGxcyBC8xvgRTxHckPRCmj5I8vXSNJSKkXqdXyr-da3kog1lSglkmRkxyuJYEE0w5jOt8BD5wUOLLhwsP5Qt7Z5q658V3_MWXuxChWTjcN5HqoLv-WBuRs9zNQw8LcTYfMDQvUcBh0MFaVgRUZb9Z5C_w5kVfl9zh_zecby6mm-zqs9V_2Z0iQjgqIHzlI0c60se9gu6FNBBeCXg82LlALYbMt-0AUrb4FshsPFYjHDkSlnxfJOTEwEkLEQkTQVZUESCreO4sFL0M4jyssRXNmF4Cv120az4KSWFcd7ZyAUC5SRmGaKK47t_prq1gGS93xBSKBC0LRscFIyQa_T-rJdFG7kttAkxYYh5mA0805QlYOZe2IYOtM3MFMzALTtpO3o6UkjsGkEPoQRfreyaYTzihX-2IxOVN-Ges7txPlujyeaFmiuNSHP0_JYAmiXa1nrWOutuLDtBq4f4dDrIcnslleR9HB1hgO-CbR_CKCxqX-gZzJOUkQk37JEmaDUUJb0g99ugl8jAp9cpBQkK1KSsXWOXFNwqAWXVawlWQ2GasWWrpQcErdbtWX8qdVDc_VIrw4SajfXrlfUg-iyrYH_9tQ6IFxrym-2NfCTbQ8GmjzaF4dBxtjvzvvJjDEtwQbg_cDVoE6XI3egmHMAxWz3bbXPPcxa--QcutYbVQ67RzwuG05XR213nOm2P5LXIv-i2H5RnRIbdBFIv6PBlmPEvZKTV9AgmALCg6XwIInsaCR5BTdSMeiLDxUIXKfeSiVpLW0Qs3Y0YLC7pO5HeH1hkmKDtHXgRAHA9f5SbrIeZe2yIaU7vXwrZ0Dd3xgyOVKjlTng8juuquEaojJwEp6o4JMxpCNiOro-EiS4Dr-EZBnKec2ljXWtRxbHGR33UaOgfma-NbDutBynSSqsOzrVB4Lkdm9RF_ug3484tjUaq9slYyiolVBr6vx6edjp4r-zoB0fBtFPijccPyHc9n5O-AeHo3H9wpFZvzr79UZumdTO80lvPbk2dgPPO3Ot-mvAau8zNa8eUV4-jvCwB3ui05UBxdJrzvROgH3ozwYZ6NT1gJQbgegTSYyWDk8u4j7bAmp6bDm23zH1GwnHHTYSznBgsEFDi_jxTXPfAuqkrY887Zno7WeoJkB0aroTqTmIFgEnPLVUY09wNnWKe1vheL5kNOpgtE6UNqUkkhac5XIOvtwWSqbRikFrZjW42HB8U92fF-JOOX2s20-rT4xXVZ5IxvM7gEbs7hKoebXFp7p7dHDgh30JeCQhFiRPNnePlK03spx1hcLeZ3tPB_M4X39eEJZVCq9ykkj5wFH180JwDspdKI_OoRn9H03aW_WLxfC5zEm2K0ESvriBgCDi_IFnlbJwkRSFOsTblqsb1pjzDGleON46ywF1PcjKz5wX5wqa_1QE9o70ZHfKcxUwCc9L2eNXhI03u8HTbXGZ108znOU1xC1LwIeKZsh-c3p-27A_OxUptZdlSYXSUD14YeXyAcAjEF9LuVcVtPv86UaJ-lyHEOzRvoogGAWQYWODXqflg20WKU7UsGL1ZGYFkzRd1Phffz5f3pyrXnzLgBHF1Rriv-BCIsnR4LkRk5sqXiR823OM6S5WlhVV_kEkh-YjT7IqpfoRUCKgUKGYJPdSQCI0y99IGEBptS32zyEsmIquBV8LskVErCuV2GUTJDplL0CDAmwQkCpFBiczocYykq_npAWwnEtR5ffq2RbLa0Y050oEgUiB-0oWlVyUaH7Te7r1-qMtRQ9TJa8EZLNz3tQMyGQLtgW1FXhekuJwFcRJskLXAjJaG_lNWX0DXQnJPgE2mVI61FWmrgX1VNkEsqV_9rLtgezIXyVoKIyp5H5FEG4EBavIoyEm2EksdHcnqD7h3oHXdTls8q15sNV7oKUmCrkRlKSLki-gLTmxnmwXpOwfUtX9T2-ZIPVXlhMjQVhJ3yA_UZJ9Ldl1gNGQ7JqSXRp6ESIxf5PmPckYA6Mh2RtKDnR6vUtmgE2Z_gAHuPTfJ9OBDsM3ZAb9WAhoYrtRq-dHsqO2wNXijPXC4XpBmrxeWn9Rj0Kv8vMHKnaXkgqiJ3H4lvJpVsdlmn6lyflTIeriOarDiqg3dVAwwFYDjGgIBrHj18CA6vhAv_Df8hIyk6a_C1LcMnKZp1UyAuVZgw9qFSjdPVOG6mKZVsWJT6zXrFpT-V8q-PmTpHmqlB3Z8Yy7vu0K2gxWDSSoKV0HM1FbYJhomyZGq8AOXjPxkWXZFy6vIIbhAPBoGKhCVzQO1AMnLCdidwXbJRim2o8Xg_SviV9tpQEDNmFIwzj13uDpGylovoZtHJz1hasIvsjIuoSebQt2XxUGNC1eLF-3oKj8539SOGsbDCOdvpGR7SYeddR6JOf5bssraJLIljb9eNRYzqDnZqsdpOUDEfVY2Yz9BjqUhonXny6_8JSOXHl5e8tKBqbuN_W91Fsixluy0tYdaEsd2q-vrRKqjbu8NdWYbEuHPhzOn_EteAV0_Cbo2AK9TL7i47TVb76gi8nLFRdbRfNcPG_hrHYL_SAXl6A7dEvd3O-U6E7oHoLj9pN-VegfMBqcQMNnRINn4GsFcRTTZ_BdrmCn-q1u_57BeZzZzyL2MUfAUQC6YsV4SpLNeP5lfxwOUV8DZiDqm4iGNvbSnmY1gDVmrwVrR3ulbS3_Adj2Ka_qZw26u_lKt0Tcn8M5SlLxYrjoycN6STvB8JLRJ4ap63jgODgFfuPvcdAASP9n_eO_GWH_FV_5b_bAgPIk48n9haDfK5onu0m14di5AhfcVFsQ1Cdp_agble527N46jNVR8dToblSl-yCdXuxvPD-yI9LPHupou4YYnt7_wkGcekGUDEKsE1GPQQ4YkXvRPOcaB0_zwOhXkpM1hER_K9ozHXwTcrQNRjIa54YIEyd27Z6eKZWEZU0MwgK_QnORTWs7yr8eOINYpqDoA01rEGj5c9Co738A5qGGtI85Nh_I-KsgxKSPj8L5JR3_xXDhRKNhwGWckHwSBGF4iBD902D-_w1229LOMbyHh8GOnX6wg7eqjH7jrU7KK8uUFOqoMmlxzfAuexuWPyNWwRjDWmcQq6FN3xerrXmnb8ToUMHWYfRcqP19gIcwU7gawLuDMPNi331Dsk_B_W-BCeJToWDAZJw5fT_GJO1nI8hRSF2zgmYsp-aTMyngbPy1ftH8qr11H_0rdMZazuQ55jOLRdPN6vP4iAr6uiv9OuSCZRNCPjT9jDlLIchOjfYd1NEOy_skuYYwq9YsH9GDb-6kbld1j6rV-4Xl6UtUt1SwFaOipRv2-NO_DxZGiQ4SI4qMc7bv0VUUOGhLWH6oNWMt0lgzMN9YeJYVO-juTr2UuCslEfKup8Bb34u4IMRYJTTzg_j2iqBa_sHw1EL3q542ktTL_UrAKQU8jmyn1cl8Kf2Z3dNsB6QZkXCe-dCLUM_HIUZxJRGvhPrDcahLaENK0DWQ6sy7YmKrDk0S7ahcHKXHTho5ETmSTGb0eOaddE3-zDv7S18RH1UiG_7vwDtN9482x5ZDvJQmBEdhhB04DFGP-NiNncixLDexj_RfkZTKVlg_p49Ii1C6eGdH7BhbGFs-jmwLwtFbuGlqJZSufIwpsUk8cy0497NsofRQ_9RwJI61SnG1LtXfiLBSlt0kRI46pmpolXxSyQ0Xx1vyNP9ekR8kP9KrH2vt_wD04X9Y">