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

    <tr>
        <th>Summary</th>
        <td>
            Clang hangs when doing big vector initialization on x86_64.
        </td>
    </tr>

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

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

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

<pre>
    The source code in big_vector_initialize.cpp is like below:
`static const auto* const a = new std::vector<std::pair<long long, long long>> {
        
    {0xc53e, 0xd755}, {0x14ba, 0x8490}, {0xf8cb, 0xcf53}, {0x9b4b, 0xf404},
    {0xb752, 0x6fd7}, {0x474e, 0x904d}, {0x478c, 0x308d}, {0x8042, 0x4b3e},
    {0x9ecb, 0x3291}, {0x25c1, 0xa90f}, {0xf1bc, 0x338f}, {0xb524, 0xde4b},
    {0xa1e4, 0x68b1}, {0xf43a, 0xe2a8}, {0x855f, 0x1fe3}, {0x0730, 0x2fc1},
    {0xcc32, 0x0095}, {0xfcb6, 0xaa90}, {0x7ce1, 0xa681}, {0x203f, 0x61d3},
`

I can reproduce the problem with an old libcxx which is used on Android, but not an arbitrary one. So I compiled the source file to llvm IR,
In big_vector_initialize.ll:

`
clang++ -c -m64 -Iexternal/libcxx/include -Iexternal/libcxxabi/include   -fno-exceptions -target x86_64-linux-gnu  -O3 -std=gnu++17 -nostdinc++  -o big_vector_initialize.ll -S -emit-llvm   big_vector_initialize.cpp
`

Then the problem can be reproduced by running llc:
`
llc big_vector_initialize.ll -filetype=obj
`

When llc hangs, if I stop it, it always stops at DAGCombiner::mergeConsecutiveStores:

 #0 0x0000557e289ab664 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #1 0x0000557e289a8d3b SignalHandler(int) Signals.cpp:0:0
 #2 0x00007ff26343daa0 (/lib/x86_64-linux-gnu/libc.so.6+0x3daa0)
 #3 0x0000557e285d08e0 (anonymous namespace)::DAGCombiner::getStoreMergeCandidates(llvm::StoreSDNode*, llvm::SmallVectorImpl<(anonymous namespace)::DAGCombiner::MemOpLink>&, llvm::SDNode*&)::'lambda1'(llvm::SDNode::use_iterator)::operator()(llvm::SDNode::use_iterator) const DAGCombiner.cpp:0:0
 #4 0x0000557e28631b4c (anonymous namespace)::DAGCombiner::mergeConsecutiveStores(llvm::StoreSDNode*) DAGCombiner.cpp:0:0
 #5 0x0000557e2863e42b (anonymous namespace)::DAGCombiner::visitSTORE(llvm::SDNode*) DAGCombiner.cpp:0:0
 #6 0x0000557e28642fe5 (anonymous namespace)::DAGCombiner::combine(llvm::SDNode*) DAGCombiner.cpp:0:0
 #7 0x0000557e2864493f llvm::SelectionDAG::Combine(llvm::CombineLevel, llvm::AAResults*, llvm::CodeGenOpt::Level) (/ssd2/llvm/llvm-build/bin/llc+0x202e93f)
 #8 0x0000557e28788e89 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/ssd2/llvm/llvm-build/bin/llc+0x2172e89)
 #9 0x0000557e2878c868 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/ssd2/llvm/llvm-build/bin/llc+0x2176868)
#10 0x0000557e2878e6fd llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (.part.0) SelectionDAGISel.cpp:0:0
#11 0x0000557e26eb63d5 (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) X86ISelDAGToDAG.cpp:0:0
#12 0x0000557e27b84bbb llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#13 0x0000557e280b4b30 llvm::FPPassManager::runOnFunction(llvm::Function&) (/ssd2/llvm/llvm-build/bin/llc+0x1a9eb30)
#14 0x0000557e280b4c71 llvm::FPPassManager::runOnModule(llvm::Module&) (/ssd2/llvm/llvm-build/bin/llc+0x1a9ec71)
#15 0x0000557e280b5537 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/ssd2/llvm/llvm-build/bin/llc+0x1a9f537)
#16 0x0000557e26c7d036 main (/ssd2/llvm/llvm-build/bin/llc+0x667036)
#17 0x00007ff26342920a __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#18 0x00007ff2634292bc call_init ./csu/../csu/libc-start.c:128:20
#19 0x00007ff2634292bc __libc_start_main ./csu/../csu/libc-start.c:376:5
#20 0x0000557e26d03071 _start (/ssd2/llvm/llvm-build/bin/llc+0x6ed071)


The problem can be reproduced after https://reviews.llvm.org/D126885.
However, I can still reproduce the problem after using -fno-vectorize, -fno-slp-vectorize, and `-mllvm -vectorize-slp=false`.
So I feel the problem isn't in SLP vectorizer, but happens when SLP vectorizer isn't used.

The source file and IR file are in the attachment:
[big_vector_initialize.zip](https://github.com/llvm/llvm-project/files/9954980/big_vector_initialize.zip)

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytWFtz4yYU_jX2C2MPQvcHPzjOps3MptnZ7LR98wBCMV0saSSUS399DyDbwlE267Y7jhc4cM53rnDM6uJ19W0nUFf3LReI14VAskJMPm6fBNd1u5WV1JIq-bdY8qZBskNKfheICVU_z8L1DF_P8HqW4E5TLTlwqDqNaK_rGVkfZmgWXqNKPKNOF-ZMuHbMZ-HmuNJQaeaqrh6R-ZqRDTpNwk_wQbP0yslDw7_TDEj4hcehMOfwS5HG8Sy9NhNLCSJGHSWLcjymlBlnjsLLOBxTchYNlDLCkaOcCWRpTNyWpCzS8eEojQYoOY4Kn5JxRwlx5lEyHA3cIgaKTAnMxQFtSPJgfJjEPHAUmuPS0zBgB4Fh5lFYTKLBXgJ0nRJIAzFsSTLmCSyjcDCpIDTz9Ijj0lGCUngmxWmIHYWUPJgUyHk4GAHj3PNhyVkyaEh9H6ZcHHRPMt8qOBygJEERjgVCyA4D-32LOK1QK5q2LnrIBA1JAWOmxB49S71DQK1VAcHP-MsLet5JvjPJ0HeiQHWF1lXR1rIwslivUVVrc4K2TOqWtq-wRSzRQ41ATr1vpIJT-pR3JSwgXSOlnvbo9usR5O17qajUKfd8dbiiJnmu4IMWHC32SYQWt-JFi7aiakZunAYwkBVXPeT7BJUyOdqA0KKs6oV44aLRElIaLTRtH4VGL1myTaKFklX_sniseth5H6KFTeprmDscQYoWVQ2LwHBAhhb1u5qhxQNaiL3UC2sO9H41mvQklLPKc59xLBMn3xaIvaK2ryppqovi4yrmBrD4A3TGWfq1EaBizf6axPCHwWC47MAZnQkKWYLrO11DBdV2DvGhnulrZxc7RDW6Xv-yqfdMVqJ1JXEvwMgbsLfgvZZP4gHAiO7M8WhGQmyzBeM4TgXJcsoScPqXVlb6QVP-_VtLuXiQj-DhX2lVKOBPsicbresZyZEjddai4RrbvyPv4Ix3VoQMnTMDSR8yIgOjtCxJEkZhQSmG9cwFHXyfB9MQjcuuXkLeQzLbIyDnxDP0wMUFzoTlSau6et3XfYcquhddA_qbc9aqb8wMgWwte2fNDTrJgmqwM8lM_Lk9dsPD9W9wP1qjbdCItqdK_W5D5XbfQGJuLkVwJ_b3zWdZfTf3HEnO2J-kJkcWM5IqumcFhbqX-kjddjuG4rSVkNrU3LWHo3VzWMjM2k-eHa7yEfRpL0eeR5IwYBG_2CPvBP6PHJJ_DC0-gyYiwi6G9iQ7qR--3X_9NGW5n0SS-EgiUor4YiTczf4DjPQMRpSH5TjwhIKghnoPjNzKZkLksPZZPAnlB-56_VV0vdLdm4zZAMhfRHXfaDcfDudDOei6gpjkN_vdfwvWSwXl6gZE2SVuCwLBROTmgh-VhMxTKs0ykeXvKHULEw8QXOKf4N4x-trkuBhPkBIQ5-HJz_DwLMk-xONW4R66op3kV6rm3_3wv-kre8qlpasM_wJtAmCOaE2xx2doBbxrP0QLd-l9dUf5DuLgAMxD-4Z2gLtsaKuX2N4dZ6zfhqzB591GiWBJWHyYOX9mCfD8Vv8fmIGX4XHgNw2SjEGmLIsYY-hdzl9o140wTYL5oeUm-E3j8m9LDO0NvBxGQr6Yo3e0oo-HGnMJoktCL6C5YCH2Qi86R8fT4CfQ3cGbTvkl6bD0b5GBYA9ZfIYsjqF0nsQp8Uj5qxuPMLq3wIDz_8QHbWrq4fOuk4SnBYYbZk-hj7-QeZKkcNTjnfqvNpITTNF2ax5mW2j5W73l8PrZWmlLYMU7825bmmH32hWigbp1UzX60FucH1ruwCBxBl9BcpKavZHKOLJnzFv8XJAbGu4Ly31pnvQBMUzJKPzzKaaeKlNaTDIP08TAPvImXt1MwAEYgtdxvdgJosDjAPRbmx90NbSE5xraad3YekJu4NOKJymeu6WRt6xbaAxvrgOSZFm8dCx_rZ_h8m3N_exa4E5LaHKmG2Enoe9M42RbQtcgQWNkztuVTjX-KrynEXRHi71t5k40sxM6qBL6BQH0AY7tkEshlCdXdmCgVJtfph4-f0FHHu2h3d7RphHQlz6bvsvfcjxsOvXluTXH_bdBevt1GLf2dzADgmrooXZ7UdnHijsfX023h3_LZhZfg8N9LzxKvevZEl5sZxEACv4FTGBqpJpUyfM4yjNso-I9CYfQmItVACmbxTjLyLxYhUUe5nSupVZitTG_A7j-05mlqI3bgOtgHHTkSu1LAj6uA1vO-1atLtZAdl1vVYghuqL5blWmOAugoMCjiMS0FEGAA5FwUtKC0ZSXc0WZUN0KrAlGm8sVPOcIbEoDsEFElgWOSMjLJM3DkMPfLMICMlQdg3neroY8gh47wkp2-hTpc6jE0I4KceBPe72r29UrhXTjc4t2ZaH-A9XMQ4I">