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

    <tr>
        <th>Summary</th>
        <td>
            A/F: `NumElts > 1 && "Expected at least 2-element fixed length vector(s)."' after 59a67ea
        </td>
    </tr>

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

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

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

<pre>
    Several of our internal tests started hitting an assertion failure after commit 59a67ea.

I was able to reduce one of the failures to the following code:
```c++
struct {
  long alpha : 38;
} bravo;
__attribute__((__vector_size__(sizeof(long)))) long volatile charlie;
void delta() { bravo.alpha = long(charlie); }
```
When compiled with optimizations enabled by a compiler that containers 59a67ea, you hit the assertion failure:
```
$ ~/src/upstream/59a67ea35d60-linux/bin/clang -c -O2 repro.cpp
clang: /home/dyung/src/upstream/llvm_clean_git/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:7095: llvm::InstructionCost llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator::computeExtractCost(llvm::ArrayRef<llvm::Value*>, llvm::ArrayRef<int>, llvm::
TargetTransformInfo::ShuffleKind): Assertion `NumElts > 1 && "Expected at least 2-element fixed length vector(s)."' 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: /home/dyung/src/upstream/59a67ea35d60-linux/bin/clang -c -O2 repro.cpp
1.      <eof> parser at end of file
2.      Optimizer 
 #0 0x000055e108d3860f llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x3cc960f)
 #1 0x000055e108d3618c llvm::sys::CleanupOnSignal(unsigned long) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x3cc718c)
 #2 0x000055e108c79e98 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f3f83f46420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007f3f83a1300b raise /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #5 0x00007f3f839f2859 abort /build/glibc-SzIz7B/glibc-2.31/stdlib/abort.c:81:7
 #6 0x00007f3f839f2729 get_sysdep_segment_value /build/glibc-SzIz7B/glibc-2.31/intl/loadmsgcat.c:509:8
 #7 0x00007f3f839f2729 _nl_load_domain /build/glibc-SzIz7B/glibc-2.31/intl/loadmsgcat.c:970:34
 #8 0x00007f3f83a03fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #9 0x000055e10a49040f llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator::computeExtractCost(llvm::ArrayRef<llvm::Value*>, llvm::ArrayRef<int>, llvm::TargetTransformInfo::ShuffleKind) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x542140f)
#10 0x000055e10a491841 llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator::adjustExtracts(llvm::slpvectorizer::BoUpSLP::TreeEntry const*, llvm::ArrayRef<int>, llvm::TargetTransformInfo::ShuffleKind) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/cla
ng+0x5422841)
#11 0x000055e10a4cd05e llvm::slpvectorizer::BoUpSLP::getEntryCost(llvm::slpvectorizer::BoUpSLP::TreeEntry const*, llvm::ArrayRef<llvm::Value*>, llvm::SmallPtrSetImpl<llvm::Value*>&) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x545e05e)
#12 0x000055e10a4e82b3 llvm::slpvectorizer::BoUpSLP::getTreeCost(llvm::ArrayRef<llvm::Value*>) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x54792b3)
#13 0x000055e10a4efe8f llvm::SLPVectorizerPass::tryToVectorizeList(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP&, bool) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x5480e8f)
#14 0x000055e10a4f28b8 llvm::SLPVectorizerPass::tryToVectorize(llvm::Instruction*, llvm::slpvectorizer::BoUpSLP&) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x54838b8)
#15 0x000055e10a4f2a93 llvm::SLPVectorizerPass::tryToVectorize(llvm::ArrayRef<llvm::WeakTrackingVH>, llvm::slpvectorizer::BoUpSLP&) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x5483a93)
#16 0x000055e10a4f332c llvm::SLPVectorizerPass::vectorizeRootInstruction(llvm::PHINode*, llvm::Instruction*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*) (.constprop.0) SLPVectorizer.cpp:0:0
#17 0x000055e10a4f6526 llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x5487526)
#18 0x000055e10a4f9c16 llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*
, llvm::OptimizationRemarkEmitter*) (.part.0) SLPVectorizer.cpp:0:0
#19 0x000055e10a4fa5aa llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x548b5aa)
#20 0x000055e10a0627f6 llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dyung/src/upstream/59a67ea35d6
0-linux/bin/clang+0x4ff37f6)
#21 0x000055e1065283bd 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>&) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x14b93bd)
#22 0x000055e1086decfd llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x366fcfd)
#23 0x000055e10650b446 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dyung/src/upstream/59a67ea35
d60-linux/bin/clang+0x149c446)
#24 0x000055e1086dcc7d llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x366dc7d)
#25 0x000055e108fb70ff (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>>&) BackendUtil.cpp:0:0
#26 0x000055e108fba4ef (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) BackendUtil.cpp:0:0
#27 0x000055e108fbab39 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, l
lvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x3f4bb39)
#28 0x000055e109ffc9c7 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x4f8d9c7)
#29 0x000055e10b1feb89 clang::ParseAST(clang::Sema&, bool, bool) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x618fb89)
#30 0x000055e109ffb128 clang::CodeGenAction::ExecuteAction() (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x4f8c128)
#31 0x000055e109839309 clang::FrontendAction::Execute() (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x47ca309)
#32 0x000055e1097b7bde clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x4748bde)
#33 0x000055e10991cc56 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x48adc56)
#34 0x000055e106150546 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x10e1546)
#35 0x000055e106147c1a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#36 0x000055e10960cf8d 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::'lam
bda'()>(long) Job.cpp:0:0
#37 0x000055e108c7a3a0 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x3c0b3a0)
#38 0x000055e10960d5af 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
#39 0x000055e1095d43bc clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x45653bc) 
#40 0x000055e1095d4e4d clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x4565e4d)
#41 0x000055e1095dd3e5 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x456e3e5)
#42 0x000055e10614d92a clang_main(int, char**, llvm::ToolContext const&) (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x10de92a) 
#43 0x000055e106063265 main (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0xff4265)
#44 0x00007f3f839f4083 __libc_start_main /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:342:3 
#45 0x000055e1061476de _start (/home/dyung/src/upstream/59a67ea35d60-linux/bin/clang+0x10d86de) 
clang: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 18.0.0 (https://github.com/llvm/llvm-project.git 59a67ea35d608480257fc64ec3e5106ef50de740) 
Target: x86_64-unknown-linux-gnu 
Thread model: posix 
InstalledDir: /home/dyung/src/upstream/59a67ea35d60-linux/bin
```
@alexey-bataev this was your change, can you take a look?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkW1tz27iS_jX0CyoqEuD1wQ_ybZPZzIkr9sx5VIFAU8IxCGgBULHzsL99CyR1AS0ndqKcnamTUmSRuHT31x8aDRCk1oqlAjiPsosouzqjnVtpc86fOrU8qzV_Or-DDRgqkW6Q7gwSyoFRVCIH1llkHTUOOFoJ54RaIqoQtRaME1qhhgrZGUC0cWAQ020rHMoqmhdAZ1F8FcXz4fsD-kItorUE5DQywDsGSCvwQt0Kth1ZX9pfayn1Fy-PaQ4RGbuJ8nj4sAhf-E9_1zrTMYeiYrxGSGqvqVyvKIrIHJEyImNZVFyh2tCN3t1ZLKhzRtSdg8UiwmWEy8ViA8xps7Di63DT_9BNhEvfc4Sr3WcQtdGSOiEBsRU1UsCu840WHHGQjvY9V17JQf5sq94VGvost21xFZELFBVXE5uHy3-uQHmk10ICR1-EWyG9dqIVX6l3iUWgPMwc1U-Ibisa5FbUIaaVo0KBsVsnRfgSPenOe7fH_Zlrn0M_XuIU_W-Eb6xhEb7p1tYZoG2Eb8aOScbz-J0UqnuM8E0tVIRvmKRqid4x9O4TRgbWRs_Yej3015d5X0X4ZqVbiPBNT9FjIqTctAsmgarFUrjxhv8j6gjf3BuqbKNNayN882fvR_HV93f38XZ3aXrJZF7EVeal9j2QeUTmH9RAJ6HVpbbuoMTK9WbXfrh1of9Y3328HS7uVl3TSPCtrq0TLXV6rOa90Dm4fnSGMucreCbtOp4bQ58-QxORy_3NP6nsIMLziFx7Jx2tLZR7VjzAeU_NEtwOig-q0YGS_y0U74k2R_Ody6M8_kfXXktnUUSuUYIinEc4RxHG149rYD4MUIckUOsQfgcSWlAONeIROJKglm6FBoT8iIlwNYswjnDRcwn4GBBuP17P766R7WofLCiqu6UngzbOD_6Vc2vrVcU3Eb5ZCrfq6hnT7YGX5aZ9tzb6X8C874W1HXhXI6o4EorJjkPPZWaoXaGasgcPO3iY1j3rGFgLHFndmeG2b0mt1UxQb6PpFLLMiLUbVb5zlD0g3rWeMmj8NxTFM3Rr9NLQFlGz7Dwg9pU0_sGRksxG-eTShyRyjdbUWDDeNaC4j6iNkDBUxmPlT0OIADOqjSJMYhQ_xnEcZxkkcclJmcfNId2f7PDj1gjlegjuBxwPqGvol4XeWpR7LD0nfZzz4e6nIYjwRfxIGKvyuPF03emeTHTPk5Id0_3SR4lu_UndiaWiMsJlp_r5kI9R99SaFknJAk1xoCkrKqhKdOmp-RmY3oB5GlR7TxWX4EfOiGBQ51IrB49ujFpx_38ngowiioY0JWnSPMUxWiwMWKcNLIwbbRzi42OZL_J0sOHdUnVDwdqtDFA-s3oW97YkaYrjwJI0EEMTEsc1MlRY8GyvOyG5H7JS1Ozd3dcPX4uL3SWekcSjOjrhZjbzV0-Ww9oP3U6Jx-HGptdmQLfvesYiMs-SiMyTvSZZoEnV4DKrEK11b-nrNHF8QKNv1QspvZBiLySfCilwhZbgFoPeCwtLP9oXGx-oXytXKOftl5ry1i4ZHURnsY_E5V52cUz2QsmFb7jguqVC_ZzIqvAkIuleZhm6NyYNz19BHOYpkw_0900CylSH5KdpFadhiPlbzKivnEtPGUiyFCfpQcjzES-eYJmUaXISLCn_V2fdCKUNcPxep_cG4Fo58-RTS--D-V8W2QHIPb64TJMA3yTEl_E4gzfguwTXI_GMiyfE8BVcvmuplLfO3IH70K7ly43yk1M2gziDAFIcQgolrsnbIPXg_MDoPrFlRYVrElhGJpY1UB4GtmCpcUvtmI0483SvdwUfxU9FrW-gN2Ritdby5FCUMZRhXEpDKBpc1uVboQhgOFiBPRsM3zH61MaSsi4DY7OpsbQiP2XsUZ__E2ifaz8Itfzz_Vs9f3IQaBWSP5-AQAhm3wdhp_JnrV3g4wM4bt9_-Ifm8Mzv3-LEBbWCXUjNHt5Kl-_NRb67Hs1ZH5rXRq99dlyhY1sJB0m5B6mYgJRnOH8DSJcrKpT9oEa7ylOYe2piFBnOA2KUE5srlrzCZtOpfqo6NPKmU6OzJ266Y1RSc73RsjtKhpfc-LzOR1Ebap6O1pjPP4PtpM-GJiUftV4fbXKlW6F8UuWnrOcdWtu1635TibLV8_IraKniwC_EIHOE9LDKp4Ndvs_QUvNw3Qrn_JJxR9M1Ne7VDJ0k5w3NKH2Vt17nqbmi8skK-ztVdOnpeHmk0a_JRMo6o_SQmThMnuMcF80hMzk4KuQYgqi1v2sO8rjGIRufYRQU3xqwYDbAByzA_hhC_vNXgn7c-XrRAWnTkKIJQgMOsus8wyWp-Qkc0Nf9lpU_Cvhf3o8DtL90ICVpXZGaB34Mt7NyDqw59OPvmncS7vVWL--fOafr3WJzavvQ4E2Wj01-hcUkzxvWhBaTkLlxnaZvCx1bEy9fidOpqLfH6SXi_fvBH2D9NukqlqZh8EgnpGOs4K8IAseA_7sB9h22claEbA0WKGVTF3HTeJlUafXU6s4iRVuw634jvxpU9HnE3Fpoa_n0HuR6mzt-7tRh0nEr1iCF8uuX7dO6Ph1lD6D4fBdureNDSafE_3SwWLsQEEO_LNZfjHCw2Jp70IhDQzvpFhwkOPhOwzFU568Re6-1_NS5deduxECKqczxcfARyZO2e7EVGs3_wwl5NMvC-cQhNIUfdsjh_b-cF16BRTHFoiYVOrDC2zd2MsAdGnkl6FJp6wSz12rZM7F3_UGV90A5mDughq0-rYcH4uO22rTqpebwX6C-U2tYK3yn0keqlseqHCSKzgi19Ov8I9PAuBr4ljvlAOLBetiZzooNfIbmUrnbiXc3zZite77ePVkH7ZjU_H_w4pQhr0nrmlRByAtWnVXTsIoVR8C81Mp27XYoDY_b-nWi7KPbH0pM6Da_ux8fu50-dKdNyStWBHYE67E6aaAug9FxS42F-d19qOUdtDTY8PslG395UjZ1GeAePj-umqZOcHlkgI0kHgb4I7DOwZbX5elRZQkOduzCJ8VVSSoSB6jeGO_j3Vg7VPMXKFgwSuIQxiCjroq6qDmEMA5HeD4o66hicBzJly06PXeLtKx5sNNPgiS5qhLGsjyI7IO6e1s2mtHnqj-zdbe1cTLlS8pZFqSXJEgv8ySLszRHjCWLlgr10m4tW1Gzf2IzBNfwHr5EGy346W1IYkiyMEUmWWhDWrCEoi3ql8l9HxLKyXOiYe9ifE703KDpDqnWcgyIB7NchbgRmxf2mEiQ_VR5zJqS96gc9NuMa6CF6YHtS4eht8vDGZWypuxh0Siv6Z4wg-yRPJfJpW5bqvh0FB914G5S0_3MTcNF237C3u0H7BosFuzxMUmGi5pawfyUJ7xOPYpBZX9j4QwVzm6LJ91RKf1g8CvkXbmvMt_H8p5BA-bD4h8XkrYDzDWnES72gO3OKKLfdH3cK8XkTAolND5wyLGTJ7sVwR1toM8-X-vAUx-xiWtC44D75YRkPKMN-k8myWQv-EUeBBlHlfGU1OxF4PrQTJ9Nkls0gzg-aegrvJQ7f6PqfPIgc2fbySaDLM9IzXqKbkFJ4ykokPK3gvKbru3LiPym64_CupeWCs8i844EayrMeJTiDSAerpJ_KZSQBnsRaTJBkhPIXtL66uB3kCwcyRJe8sC_EcnT5iRZDgSyADs8mc95hemg5zYr2erex5L584dcL8zWJ81DOFSYhsMn3C6Nc4LzDI3n1U4muWlSnIeApZMjc2lcErRYSFH7wEuNW7zl0Byz3faY4vCzL-z76Y_PkRT77wO7nyVgOQc0SD4x5mXeJ99ocnAejOk32QeWoGZcBfRvZXgWD4ewhzcG4FG4_s0KlJDUq9dZQO82yGlkAZA4SM-rAzFoA8YKrVBSzuJZ7Bu-7bz2bLl_P6S3s0zLGGdFw_IUGIEsiXNosphDkcZ7G4dNGG_beAaxUw9Kf1H7s4jbiv0hVtQOe_BztNZWPI5l_ZpCSuBXwvzsCe2jb0SkMZXwCE_vauoobJBbCdu_9vKkO-PHqVr2-46Mqv6dC0cfAFEktX6IyM0ZPye8IhU9g_Mkr7KqyIo8PVudEygywqu6wAVuCG8YKVOa0ZqkeZUkJD4T5zjGJK5wFZcYp-msSgjDScmbrKigrFiUxtBSIWfeFTNtlmf9ofnzvCiK9EzSGqTtXw_CWMEX1BdGGEfZ1Zk5791Xd0sbpbEU1tl9L044Cefe9Tc9oL_q9YHh7aLRGWedkec__pZAb_P_BQAA__-Qmjsa">