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

    <tr>
        <th>Summary</th>
        <td>
            Clang crash: Assertion `DT.dominates(RHead, LHead) && "No dominance between recurrences used by one SCEV?"' failed.
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          shao-hua-li
      </td>
    </tr>
</table>

<pre>
    Clang at -O2 crashes.

Bisected to 7abe3497e72af3ddee789dfc62c63a981a25dbf6, which was committed by @davemgreen 

Compiler explorer: https://godbolt.org/z/hPTj849f6

```console
% cat a.c
int a, l;
short b, e;
unsigned c, d;
char f;
char *g;
static char **h = &g;
long j;
static signed char m(int);
void n() { m(0); }
signed char m(int t) {
  char o;
  char p[80];
  for (; t <= 3; t++) {
    int i = 0;
    for (; i < 2; i++)
      for (;;) {
 unsigned *q = &c, *r = &d;
        short *s = &e;
        l = ++*r;
        *q = (5 && l) / a;
        *s = c;
        if ((char)d + d)
          e = 0;
        o = *g;
        **h = o;
 break;
      }
    for (; f & 3;)
      for (; d <= 3; d++)
 for (; 127 + **h; j++)
          p[t + **h + j] && (b = 8);
    char ***k = &h;
    &k == 0;
  }
  return 0;
}
int main() {}
%
% clang -O2 a.c
<a.c>:33:6: warning: comparison of address of 'k' equal to a null pointer is always false [-Wtautological-pointer-compare]
   33 |     &k == 0;
      |      ^ ~
<a.c>:33:8: warning: equality comparison result unused [-Wunused-comparison]
   33 |     &k == 0;
      | ~~~^~~~
clang: /root/llvm-project/llvm/lib/Analysis/ScalarEvolution.cpp:740: std::optional<int> CompareSCEVComplexity(llvm::EquivalenceClasses<const llvm::SCEV*>&, llvm::EquivalenceClasses<const llvm::Value*>&, const llvm::LoopInfo*, const llvm::SCEV*, const llvm::SCEV*, llvm::DominatorTree&, unsigned int): Assertion `DT.dominates(RHead, LHead) && "No dominance between recurrences used by one SCEV?"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/clang -gdwarf-4 -g -o /app/output.s -S --gcc-toolchain=/opt/compiler-explorer/gcc-9.2.0 -fcolor-diagnostics -fno-crash-diagnostics -O2 <source>
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module '<source>'.
4.      Running pass 'Loop Pass Manager' on function '@n'
5.      Running pass 'Loop Strength Reduction' on basic block '%for.cond1.preheader.i'
 #0 0x000000000370a088 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x370a088)
 #1 0x0000000003707d4c llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3707d4c)
 #2 0x00000000036509a8 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007fce57d2f420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007fce577f200b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
 #5 0x00007fce577d1859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
 #6 0x00007fce577d1729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
 #7 0x00007fce577e2fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #8 0x00000000028265bf CompareSCEVComplexity(llvm::EquivalenceClasses<llvm::SCEV const*, std::less<llvm::SCEV const*>>&, llvm::EquivalenceClasses<llvm::Value const*, std::less<llvm::Value const*>>&, llvm::LoopInfo const*, llvm::SCEV const*, llvm::SCEV const*, llvm::DominatorTree&, unsigned int) ScalarEvolution.cpp:0:0
 #9 0x000000000283989a void std::__merge_adaptive<llvm::SCEV const**, long, llvm::SCEV const**, __gnu_cxx::__ops::_Iter_comp_iter<GroupByComplexity(llvm::SmallVectorImpl<llvm::SCEV const*>&, llvm::LoopInfo*, llvm::DominatorTree&)::'lambda0'(llvm::SCEV const*, llvm::SCEV const*)>>(llvm::SCEV const**, llvm::SCEV const**, llvm::SCEV const**, long, long, llvm::SCEV const**, long, __gnu_cxx::__ops::_Iter_comp_iter<GroupByComplexity(llvm::SmallVectorImpl<llvm::SCEV const*>&, llvm::LoopInfo*, llvm::DominatorTree&)::'lambda0'(llvm::SCEV const*, llvm::SCEV const*)>) ScalarEvolution.cpp:0:0
#10 0x0000000002839ae8 void std::__stable_sort_adaptive<llvm::SCEV const**, llvm::SCEV const**, long, __gnu_cxx::__ops::_Iter_comp_iter<GroupByComplexity(llvm::SmallVectorImpl<llvm::SCEV const*>&, llvm::LoopInfo*, llvm::DominatorTree&)::'lambda0'(llvm::SCEV const*, llvm::SCEV const*)>>(llvm::SCEV const**, llvm::SCEV const**, llvm::SCEV const**, long, __gnu_cxx::__ops::_Iter_comp_iter<GroupByComplexity(llvm::SmallVectorImpl<llvm::SCEV const*>&, llvm::LoopInfo*, llvm::DominatorTree&)::'lambda0'(llvm::SCEV const*, llvm::SCEV const*)>) ScalarEvolution.cpp:0:0
#11 0x0000000002839fe0 GroupByComplexity(llvm::SmallVectorImpl<llvm::SCEV const*>&, llvm::LoopInfo*, llvm::DominatorTree&) ScalarEvolution.cpp:0:0
#12 0x0000000002855568 llvm::ScalarEvolution::getAddExpr(llvm::SmallVectorImpl<llvm::SCEV const*>&, llvm::SCEV::NoWrapFlags, unsigned int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x2855568)
#13 0x0000000002857916 llvm::ScalarEvolution::getAddExpr(llvm::SmallVectorImpl<llvm::SCEV const*>&, llvm::SCEV::NoWrapFlags, unsigned int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x2857916)
#14 0x0000000001926452 llvm::ScalarEvolution::getAddExpr(llvm::SCEV const*, llvm::SCEV const*, llvm::SCEV::NoWrapFlags, unsigned int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x1926452)
#15 0x0000000002854b1c llvm::ScalarEvolution::getMinusSCEV(llvm::SCEV const*, llvm::SCEV const*, llvm::SCEV::NoWrapFlags, unsigned int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x2854b1c)
#16 0x000000000353437b (anonymous namespace)::LSRInstance::NarrowSearchSpaceByPickingWinnerRegs() LoopStrengthReduce.cpp:0:0
#17 0x000000000355418e (anonymous namespace)::LSRInstance::LSRInstance(llvm::Loop*, llvm::IVUsers&, llvm::ScalarEvolution&, llvm::DominatorTree&, llvm::LoopInfo&, llvm::TargetTransformInfo const&, llvm::AssumptionCache&, llvm::TargetLibraryInfo&, llvm::MemorySSAUpdater*) LoopStrengthReduce.cpp:0:0
#18 0x000000000355544f ReduceLoopStrength(llvm::Loop*, llvm::IVUsers&, llvm::ScalarEvolution&, llvm::DominatorTree&, llvm::LoopInfo&, llvm::TargetTransformInfo const&, llvm::AssumptionCache&, llvm::TargetLibraryInfo&, llvm::MemorySSA*) LoopStrengthReduce.cpp:0:0
#19 0x0000000003558538 (anonymous namespace)::LoopStrengthReduce::runOnLoop(llvm::Loop*, llvm::LPPassManager&) LoopStrengthReduce.cpp:0:0
#20 0x000000000279adab llvm::LPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x279adab)
#21 0x000000000308fdc9 llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x308fdc9)
#22 0x0000000003090001 llvm::FPPassManager::runOnModule(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3090001)
#23 0x0000000003090822 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3090822)
#24 0x00000000039810f2 (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) BackendUtil.cpp:0:0
#25 0x0000000003981599 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>>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3981599)
#26 0x00000000049762bf clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x49762bf)
#27 0x0000000005e71b09 clang::ParseAST(clang::Sema&, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x5e71b09)
#28 0x0000000004974a68 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x4974a68)
#29 0x00000000041d7bd9 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x41d7bd9)
#30 0x000000000415898e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x415898e)
#31 0x00000000042b6dce clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x42b6dce)
#32 0x0000000000bdcd16 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0xbdcd16)
#33 0x0000000000bd45da ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#34 0x0000000003fb6099 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 0x0000000003650e54 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3650e54)
#36 0x0000000003fb668f 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 0x0000000003f7e9d5 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3f7e9d5)
#38 0x0000000003f7f43d 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+0x3f7f43d)
#39 0x0000000003f87365 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0x3f87365)
#40 0x0000000000bda1bc clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0xbda1bc)
#41 0x0000000000ad4f31 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0xad4f31)
#42 0x00007fce577d3083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#43 0x0000000000bd40be _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+0xbd40be)
clang: error: clang frontend command failed with exit code 134 (use -v to see invocation)
Compiler returned: 134
%
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzse01z47ay9q-BNyipKPB74YUsWyeTmpxxWU6yVIFkU-KYAhgAtK13kd_-FgBSIijZ45mrm5NbJyrPmAaa3U9_oglCVMpqwwCuUXiDwtsr2qotF9dyS_lk29JJXV1lvNhfL2rKNpgqPPlCcC6o3IKcIu8WeXP7_00lIVdQYMVxTDPwgzSGmNDSLwqAOEmLMo9IHvk0TWaUhEVWRogs8Mu2yrf4hUqc892uUppFtsco8Ar6DLuNAGB4KGjBd01Vg8Dw2tRcgED-HG-VaiTy54gsEVlueJHxWk252CCy_H-ILLf3j1-TIC2jIScUefYn50zyGrpREuKcKkynuR2omMJUQ62Rf2OH5JYLhTM9CIfBlhlTFjjX48VhPN9SgUv3T0TmmyM3RVWV434CkfkWI_8WIxIdiWrONvjr-J5eor51h0hSMYVIeqB65lWBGSIJIilG8Y2h8SwFRvFtx-uUCVbdHZYC20l-YNwNNCi8STwU3g4mSq61SLQEhZG_0Jr45i9EbsyPwxhjLa4yCnsDNg4jPb3AxFweuBwph7T6x5FwcAsi8z96uxoXITIX_UDhiNYf62NE5rKngROaupuyiObihGAgMwk1D0QiXBuAZInpOXorLj-ZqkqjIUm05RFJtUI3uBgZQn_gjDH1h3dIBqE3kHsIu4GXMwH0aUR8CJuRjzS8yHj6Td_gwgmIYuzKAeWMxEa_Dpge-nrW8_qjw1ANyc31VxTe9iZHJMmMcskwPfS9g6xDZP7U-3rrECESmZmxXQe2EKBawQazhzkd3ztaDdLwMIVIOCg6psTq-nooPchf6Gv_Dvlz30f-PNLF7oUKVrGNvsz5rqGikpxhXmJaFAKk1JeIxE-IxBj-aGmtazLFrK1r3PCKKRC4kpjWL3QvcUlrCRiFN5PfFW0Vr_mmymk96SgnVgToJO_t4fsYxQv8nmVspCy6i_AO__mGRslIIwO4UvuhagJkWyvcslbqPNZQ7fXkSPSD-P78808U3un_bXHWPtAwEFkKzhUiy7p-3k0awb9C3v-pf1UZIss5o_VeVhKR5SqnNRV3z7xuVcXZNG8a5M_jwNPcpCr04uTPeaMnaY38hS7V_h1eWPOuFne_6csaXiu1RyQxcsw9d3-01TOtgeWwqKmUIJG_0EuWwkcifb8OYf_ORPwCf-f9v9G6BYfBmOIz580nVnKTKKfTPYD3p46Dt3xXMaq4eBQAnchDqe6XsTmeSwlC2wyjyLt9nBb2NpCIJA8_AS30fZ_tRXrMdvJvji0pywFnoF50GyEgb4XQhpDYhFK2x5wBNgD9JSJEp0xJqxqKrrm5_3w3X91h2Wa7SmGKs3aDBTR6aVB83HZUattm05zvBnHiRk8lZauxLzFlWs28bgvAagu2p8IZzZ-UoDlotRoBjeA5SA1V8lbYYX0nlZLnFdXNkmgZlrmoGtVBXimaP-Gi3ekAtEPeFHnpveAbQXeYik27A6ZkF-e80cjyrq2aHNoqsjTZMKG9C-REiZY9IbLMdDVbdgVrU7xQUU4CPNngCdccadNovq1qWjWVeLLCk8kmzyeK8zrf6lLo374rWBOnUzL18KTMec3FpKjohnGpqlziScn4xNjLHf5C9PLSGcq_s6rPtOrIXwAvdbo1VEgQupEFVuhCWVZ940c05YIXgDfAQFCtsp3x9cxDy3SNwg2VUpfXZctyE5j3euAXyuhGY48xZ3jHi7YGTeUAInHnouAcQ51g55iVvSDNLvCY_mW4hG9yWSkBbKO2-AGK1tzc8cqorHKc1Tx_MuxIWHIxzTkrZtNGwBZoAWJaHURgRHwPe69e__Fjj3pJMkhkuZf24l5UTJnge7QRPKhhgr6suVQC6K7LdZvitqX5H4YgIjfeawfs2B0g4s9GyOMiyM8hX9RAWdt8Yatqo4szSQ6VSLfdl8apYTg4iYMzCr2UJnihA_wBcv4MYm-B_URZUWtxXZ_v0iw4U_CqupXHM_8OIvxORFzmEMYFKQPi4fVagFRcwNp0uslhXXtNonUUTOqKta-TDWvtRKO2AmgxlXzqGV1mQUA8R5PAEROXxPMyLGilO4xv8s8158hwDnzPyxzOocu5mCVhimnGP4R8wJmQJEwdztGYc3zw94d5xsTlGbs8gZRF9H08fb8sIodnMowSkpAozMofbR_cxdmu2N0SfehVapDvkeoW7oPNxqjN-KC4Ee15eX1X4vB8R7sPTX2gN8Hn-71R1qWuy_w0SSk2D-UHtdfrHYgNrGlBG1U9w3vOsTBNRXpHE0O1Xm9Yu85fX3spvOmK3fqTArHWNWxdKRDIX_xL8La52b8RP6sdrevfIFdcfNo19fsR8ZZ7PmDi1E4gEtd0lxXUM-tT8iO-TPtgefvu9xl8ZLZ3w4fc0VP945aPpI5eur1x6lBITlJHKprVsJZcqO9IoH889XdKoH8M_dGUmI1TogQP_01M8jENiKtBGIbR8FFixMMObkDNi-LutRGX08w-8Ourf_PfBW2WNd3Ic6v8xdr-TtlDQ6et4Y-sEaez6L_GGlpZxxrB0BqzlERBSH7UGj_U9f31Zui0dMwQjoIiyGb5B8zwS8VaaTfa_g8aotPTMUTkPBSHfuDHmZZIGWf7HW8lZnQHsjFbDV1J_rx6-MSkoiyHTgEqBH9ZARX5dqVJb_b3Vf5Usc3vFWMgHkBrZvbldbXr903Mtgmcr2GxiysMZgl8N67hwNBhGsSJPz799qsEIU_zdhQL4_lzjzHnqvto4pGKDahHQZksudgNn65GlHMp253Z0V7QfHsqwnL6XGWCiv1ZWb_Ajov9ajX_tSmoXuPNovhhXyQjX4RBUNo9Lxiy-MfE2sTfadt0ZNsk9JNvxvkJ7277r2VfmDX8tzzx-f6eSnnYAY2-AzJxnxnilBY0e5P1EVi_k-uAOw5Gly11Ftaw1BF3n9JLyiJPB7iXfwfcHSwHt7tv6aV64f4A7l_M7riDuh-6NGYDycHsjzEnZNhm1LCh-d5eD9DbpqrT4C9CnhCnMyBOg-SnycwrybcS8m5XqbmUsMvq_U9QN70fhuOIJP1rT-TPb2j-BKyYd0E02KBrWfVHC-tGCae9FPRl3byISsG63-Af3FRASdtarQuoQcE3buweOlPcgfhVVfX5TA_HtgjTFA-00Pp1TL6Y11CukrfH10Z3bFOxvq4OSH4yr0Js5_DFFGDplOgB6YIX8C9g36CylfobRJ8p25wjGaxISlRs8wDlqMp3YTgfMTxx52DNY0q0snqGBygXTN2P_Ppcdo_hy6qG1V4qMA76D0XE5TLLBouTWU6rGaRxRLLyjBEXnMl216eQfRlj1vDavCv8lVWjMJuvHruXMpeuDx1IRwunMQ0hnmWekxP3VEiYrx5djCvY0S7IMs7r4-8Lou3AOGiTkc0DGiVnkqoLXJvUr5C3CvpYTi5tUQ3Bwei0QMGsiLPCsehSaO8esmsI8uLwrPQhPPfFbDALkzQB14RWoPvoMbbi2_pcOmYtQkcFp_MJSBYVuaNCB_aoyTPP6SnwE01tq3s56BaZA91pfrysyItZhPN8tu7Oeg16eCHoXldsf2FOmzl7MQvsjpGF2eW-tAYWn6OAP1IgCAuKe4MvZo-mCry7x3SqzfjphPO6q4CD5SzFhaieQZxd2n23zSmzyEtTu_F_5NsfiVgLY1UzazPOnixD_jyndZ3R_GldMo30GCtWdhc3i9mC73aUFePkPeu9c8e4zq3M3aq1GL6qyF9fZzP7hzmEoVc4c-RtYc9zDoj1wFoJWinZT4_Y0brWecDFYF6TzI_l24SPtbm7W203q_ut56Q_4PAzz877IxwfToAwGLji3BEEO_PQshUtoXZ3pN933UVXeovVifloHFxR4qz0_3XBoc09bahQU-_dKHB3vcoY0iJ803DGa_RkTeyt6ZTu0Y2a4K3m-B3SudPCDHS7UChZhZ1QSkYWKQO_-F6L_Mwz-bY5fubZ50qqtx4ETsrxIQIaWonuhOl3WHB4wOJ_z47aTI4d3X2mMon96M3Iuh1cO63BmZ7gLfv_hXa8ZDGzhhlaLvBGCzidZblF2fcgPXJTRE5fy761PF-w69CYHNBOx-fRIij9mTkefzmplqkjlYzOePle4uP1uq4yXWupUOsBhI-e-gq8xHeknHRUXgbY8r-kTTXbg9zDiXUQgpvvQtljuWXXy5uvVen4tMea8UulthheK-3xAvDMDzS0VgKePGPFsQTA1aDNTkffurLfcwCdIfrm8fcY-q9UXRXXfpH6Kb2C61mUhmmSxEFytb2OvDAt0rgAj0IS0diLC4iCxAuTGYE4T6-qa-IR30tJOpuFqZdMSVp6ZRISH7zEp0WEAg92tKqnOpCnXGyuzKnq6yiO0-CqphnU0nydjZDOagSFt1fi2pzFztqNRIFXV1LJIwdVqRq6L7mZk8X_2bPnV62or3_8cLmxxP8PAAD__30Lxsg">