<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/119665>119665</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] Crash at -O2: Assertion `isAvailableAtLoopEntry(LHS, L) && "LHS is not available at Loop Entry"' failed.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
cardigan1008
</td>
</tr>
</table>
<pre>
This code crashes at `-O2`:
```c
int a, e;
int *b;
short c[];
short d;
void f() {
int g;
for (;;)
for (; a - 3 + g < 6; g = g + 1)
c[g] = d;
}
void h();
void i() {
h();
f();
}
void h() {
e = 0;
for (; e <= 50; ++e) {
int *j = &a;
*j = *b + e;
}
}
```
Compiler Explorer: https://godbolt.org/z/jfo65eK9x
Crash:
```console
clang: /root/llvm-project/llvm/lib/Analysis/ScalarEvolution.cpp:11744: 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.
```
Backtrace:
```console
Stack dump:
0. Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/clang -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -fno-verbose-asm -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -O2 -Wall -Wextra -fno-strict-aliasing <source>
1. <eof> parser at end of file
2. Optimizer
3. Running pass "function<eager-inv>(float2int,lower-constant-intrinsics,loop(loop-rotate<header-duplication;no-prepare-for-lto>,loop-deletion),loop-distribute,inject-tli-mappings,loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>,infer-alignment,loop-load-elim,instcombine<max-iterations=1;no-verify-fixpoint>,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;no-hoist-loads-stores-with-cond-faulting;sink-common-insts;speculate-blocks;simplify-cond-branch;no-speculate-unpredictables>,slp-vectorizer,vector-combine,instcombine<max-iterations=1;no-verify-fixpoint>,loop-unroll<O2>,transform-warning,sroa<preserve-cfg>,infer-alignment,instcombine<max-iterations=1;no-verify-fixpoint>,loop-mssa(licm<allowspeculation>),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;hoist-loads-stores-with-cond-faulting;no-sink-common-insts;speculate-blocks;simplify-cond-branch;speculate-unpredictables>)" on module "<source>"
4. Running pass "loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>" on function "i"
#0 0x0000000003c19758 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3c19758)
#1 0x0000000003c17464 llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3c17464)
#2 0x0000000003b649c8 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#3 0x000079aa17242520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x000079aa172969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#5 0x000079aa17242476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#6 0x000079aa172287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#7 0x000079aa1722871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
#8 0x000079aa17239e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#9 0x0000000002c90a7b llvm::ScalarEvolution::isLoopEntryGuardedByCond(llvm::Loop const*, llvm::CmpInst::Predicate, llvm::SCEV const*, llvm::SCEV const*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x2c90a7b)
#10 0x0000000002ca6d97 llvm::ScalarEvolution::getTripCountFromExitCount(llvm::SCEV const*, llvm::Type*, llvm::Loop const*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x2ca6d97)
#11 0x00000000058449e4 llvm::VPlan::createInitialVPlan(llvm::Type*, llvm::PredicatedScalarEvolution&, bool, bool, llvm::Loop*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x58449e4)
#12 0x000000000572a8ce llvm::LoopVectorizationPlanner::tryToBuildVPlanWithVPRecipes(llvm::VFRange&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x572a8ce)
#13 0x000000000572dd5a llvm::LoopVectorizationPlanner::buildVPlansWithVPRecipes(llvm::ElementCount, llvm::ElementCount) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x572dd5a)
#14 0x000000000572e24f llvm::LoopVectorizationPlanner::plan(llvm::ElementCount, unsigned int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x572e24f)
#15 0x000000000573044f llvm::LoopVectorizePass::processLoop(llvm::Loop*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x573044f)
#16 0x0000000005732a89 llvm::LoopVectorizePass::runImpl(llvm::Function&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x5732a89)
#17 0x00000000057330c3 llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x57330c3)
#18 0x0000000005283abe llvm::detail::PassModel<llvm::Function, llvm::LoopVectorizePass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x5283abe)
#19 0x00000000035c8550 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x35c8550)
#20 0x00000000010fa0ee llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x10fa0ee)
#21 0x00000000035c6e6b llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x35c6e6b)
#22 0x00000000010f977e llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x10f977e)
#23 0x00000000035c6870 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x35c6870)
#24 0x0000000003eca382 (anonymous namespace)::EmitAssemblyHelper::RunOptimizationPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&, clang::BackendConsumer*) BackendUtil.cpp:0:0
#25 0x0000000003ecdbfd clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3ecdbfd)
#26 0x000000000459e07e clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x459e07e)
#27 0x000000000655704c clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x655704c)
#28 0x000000000459e458 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x459e458)
#29 0x0000000004856fc9 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x4856fc9)
#30 0x00000000047d989e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x47d989e)
#31 0x000000000494267e clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x494267e)
#32 0x0000000000cb92df cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0xcb92df)
#33 0x0000000000cb0d7a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#34 0x00000000045e2229 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#35 0x0000000003b64e74 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3b64e74)
#36 0x00000000045e281f clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#37 0x00000000045a7f3d clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x45a7f3d)
#38 0x00000000045a902d clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x45a902d)
#39 0x00000000045b0565 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x45b0565)
#40 0x0000000000cb6123 clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0xcb6123)
#41 0x0000000000b84564 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0xb84564)
#42 0x000079aa17229d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#43 0x000079aa17229e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#44 0x0000000000cb0825 _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0xcb0825)
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzkW1tz27iS_jXwC4ouCrw_-EGW7ZPMZiqp2CfzqAJBUMIYBLgAKEvz67cAkuLFUmKfKFO7s1Oe2MKl--uvG40GQWGt2UZQegOiWxDdXeHGbKW6IVgVbIPFwvfTq1wWh5unLdOQyIJCorDeUg2xgSD2vc8IxD4IlhD4S_uX-yHAXzJhIAZoBSkIbrvPAC3z9pPeSmUgadWOm4r2w06yApYApQBlECS2CUIrYtP2Q1hKBW1_cGt_UOYax80QQw8GEKBbuIEgWMHYNto_7-y_6BYuhmnQYdmA6M71dyhActdj2bZYRujYDN1kBOzBnxN0nEadQr-bNoJvO1a2L7KdFjBAt3Q8tWUEoOWfTgZAMe61w3HzMnfmdo6ALZju395l9m9_uZJVzThV8H5fc6mosp7dGlNrECwBegDoYSOLXHJzLdUGoIe_AHr4s5RxRP8r23cybIDY4eOAkEJLToG_JByLjYsX9KCkNAA9cL6rvFrJPynpP9pfLAfoYSkwP2imAXp4JJhjdb-TvDFMimtS1yBYLhZJGFp5uZQcurnBEgTL2ei2kelPUtb3wqjDvxqsClrcHlZSFAClFqEZzbcDAVraAB4aV1X9UWjTfviiaMEINtSOmU9_XN1_66af7cos7KXWVFmEdjUxvdxhxnHO6dIcoQKUfvrwaEV9ct5HMUAxBAh9-vAImYZCGoj7eXZd2pmwm4oASmCJGafF9czft5g8G4UJPeusR4PJMyyaqm6H-NfAz74ouVG4glhtmooKoztvytp6j3QR5NE-gtCD87mHe0u1Z1QjngF6yJnou6G3KV6wKr0QehvoSSsR17WV25i6MdcaepUlEXrePo09rCtPH4TBexDcMWEoh14ppLejKpea2n7oPULP2xDiGSk52WImQHD3XaR2sBa41ltpoFcSyaXyCoY3QmrDiG51uBQ4bf6MoPcH5hx6f9C9UbgdqI1ixHiYM6yZcFlIy0ZZxu-Bv1xYOkGworIEwT2ssdJUWQdSUUBZwpI5LyA77HNtWMX-ogr4y8A2fG2EsDJrrLUNhrIRpI30FcUbqjwmdlYNSksusUFMGIBWXL5Q5bmQxMJ4TBjFhGZEuz4b8qn95SlpbGQHqy3FBVVe0dTcBrtTcCukVytaY0W9UiqPG-k0OQleQTl141B2bGKWibxxa4UJu9A9w5lX4bpmYtMr93aUGKnYX1axkBYdVZzinVNDaOFJwQ-t_uPQWVcLhImSKsv7RtgQ7eVziQuPcla5IdoQWeVMWG0V3nvMUOUs1CC4W_RqFCsPXsn2tbQMOumaVTVn5YGUGxCscika7VlxntkqqreSF52AUqoXrApPvzBDtpZ2u7F0nxQWG-oZ6TFi11ffbKTHpXxu6hbAM6UWt7QZ-HYrmTYekVUlhdOo20Ftu7VOe9pIRbX3wkyr0Ctxww2zSfdWM_E8n65rShqODfVyLsmza-rsa-fnCguybRUNgxtRu_xnbNLRHS985EIF0Kr94PU0_xTpzoGNUJJzEKw-o7bVKCx0KVXlvWBl14OFoSQGwapWVFO1o55z0-mo-Fk8ldbYLhlGKhCsMOfypafIrZT7dhEcVXqlkpXNhE1Vt0o6QdYzHZ6efYBWBdt5ilZejZmyQw1mnGDOuxB-cxwK6b0rFK2nX0fjJBSPUTcLp7eGolXxU9H43VDMAEJQCljJouHUpsdJ6kUI-MvwVBa9aBpyEPq8bKWzVjMEKPChv_f7_wKyyJIoHRUJ-qD7KoMJ4_bhJ7dVo3QYpPDLWmqjKK5cUbCCLslnroL82Q0ZoFt_3wHr6mSAgsUMdhLG4SnYK06xaOrP4pFtBOYApY1wR40CcmmFXxakhTGARBOQeRxmJIWuLP1KidxRdWhRfcCi4FZX2vE2GbOSwtC96epM3_3fyg86-UmG8SJBIYqQ35nTVq37NF7HoceZaPbeRjRtB7nW8jp2kN2UAXA4FZjFWUlgbVcxLtbPjPP3SXfzB-nRHG6YxHCjHQXvhR0m8SA4ngpGaVIGEOf2GPcusW7iIDZ5JXaRv1vgIh8EplOBQUaz-H0C3ZRBYDYOMEQyHyf5T5w9pqeO9sDwjrPH9GhxZvqs64LLr7O_ZcemCH_KDo6LLPkROxtqnhSrV7IR5kHJ6n7PjPswoec79j0davqqcUbnRY12Zg1GTxJjlIZhRseJ8dsXjjtTiaLY0I-CGYZ52z628aQhR38Xc_bavG8Pv-PfJ86xFzS-M28wfpJwowThlNAZhm_dRukKI2u0cA8XQLA06vAkbxvGC0fGH8xsv335SgmrqZ4w8-3hq61TnMmXtKbFO1gTzKwpigi_2Zr8aIg-b8k9p7Ya7AJ87K5pz2WttHYMVoYzKykKyzdbWc-jdm7Rcbe_dEXSIR3siKZ2BH541g76BeuuPqmVJFTrT92R99culxbUADmeQUY4zX4MWTXiY1XzCdyH_tB_8TXhQA2QkxnkwCfBmyCfhzsO-_4x3-9Y4I0NstWJSbakvriZ1pDBzHRiJkoDnI8TWUHtCaxLyVjr32VB-Wmwr5LwlJ7_yHr783-C1pa4gdZJvRREJI0if7y7WSq_B_EfzVbHx5EtNKmfFn6JfXqJIPxlLP-jvdPxP3hnMYvlmMbj2v9398ThSfaQLOvLAtdGqtMGtxPeZW435ZeEojVnMBbNQjFLkveFYm_d6o0U_QccnIuk_03EdtQNxAbzKEqTt2TEU3T-c1jqeBhYmtSoASU4SJFVh4UUh0o2GgpcUV3jtnxvK9GKmaXWtMr54QPldV-yfm1Ed4fSlrOsptw9lE77K0kQuCsxKorlMSFqU7Q9jWD_3dB1baZcKPyyrl8UM3TdP4gbTSqoe-K5dlci9AcTu2Qav0Xtk5T8s7sXe2BtPLxF52zWWOFrDlZS6KayDnTVcNf6b8P47ImYdVQ0c1SRl8VYpnVKJ6EFMKX9brhKuxcb55U5qg_uHuqRYkW2n9tn5_3Jfj50JQv6Lyp-MOoJqw01Pxj0CYvNqSGjRxJGMbH5SstTOa6_Af5OgA1TPgqjGs129CstV8J8mbl8V3ZFtfXd40EbWnWb798fo2-Il8slhTaahqQwOT2FUUb9hH4PTxs-7lHvk8JCt3cz_xZsFoTLx6fuke-l81oHcjBhcpqKoyjxQzI24QtWmi4fn6YAH2mFTz7vuSDUDswANZ2zHUbpicXWBXS72PeUNIb2MZ5enMuwv5GwACdnizCN4pJkY4APyjr1uOTGCC-OrdV-xDa95AmTIkszOiWv1fbRXce3L2K85u-8MZeO0xbhgH9S64ZZiOLpUuuQDmbsZPeOwAT1KzMvnCI6ZAPuSdnqkzxDRQkJWawrzKblz1IpfLDZO1iRLVbDw-IuzU3a0AruJCsuDb_FN6APZuj9IsGwp3q1eHJrfvxUvMKct48X3AOiU6bMdi0ro0t2o30tg4ViO6peb_BBOE0DFCGUOTJGQvubzrVyfLre_iW4rvokmPMck-d1KSzMIURaxV24rBYrWVVYFPPVetJvx51Muo0aTw8gw_583LuOE9Zrst8vFt2DW6wZsfucu592FE4G24a1UZgZ3XfPxGHObfjbg96x3w5ZDpnaBU5LuJsCUMJxlRcYoGSgCqX9HelvMj_hjGh-v0mT8V3DqVvMYw38iEvKDxMuv--3i-7lLdYh1ON5WKWLEv5_DgvL9XWNlbn2z_s_mbKGkzIozrLm_IVf7X09lZNEPZtoB5yrjL8zdDkpUkaGXaoCcAYPQTQrUXDmo3fT8ZvM9XkufpP5J6bNuSPAq_x79H2NmXV7--7dm-kbH8x-HYmWpoHEaRkV5X4UR-cA343-npQAJ_b-c-T_jSRetPp0xBxpC_3ZXh0vUNBC7GuNHrZLHMvX99ZnduILVhcW04B4UtP5eRpGcQgt1supbIUOKtHshY6syN75voybMggM5gJp6MP12s5Za4OVWY8MerMKGo5UhPMiLEURbIVf0jdWbKd09Gb2VXETFFmQ4St6s0iCIEuT2M-utjc4RLTMkzgk8SLPclImPi7KGMVRlkV5RK7YDfJRuEAL5CeLAGXXNCFlltGEhOmC0oyC0KcVZvzahuC1VJsrpnVDbxaLLI6jK45zyrX7OghCHVAEorsrdeNe08-bjQahz5k2ehBhmOHuOyTtjOiufZMKYgO9z-jvfs39qlH8ZvalBWa2TX5NZDX6gsH0aweOBg3QQ8fE7gb9TwAAAP__NOT06Q">