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

    <tr>
        <th>Summary</th>
        <td>
            [SLPVectorizer] Assertion `I1 == PoisonMaskElem && "Expected unused subvectors mask"' failed.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:SLPVectorizer,
            crash-on-valid
      </td>
    </tr>

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

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

<pre>
    Reproducer: https://godbolt.org/z/3dahr6Mb4
```
; bin/opt -passes=slp-vectorizer reduced.ll -S
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

define i32 @main() {
entry:
  br label %func_135.exit.i

func_135.exit.i:
  %g_228.promoted166.i1105.i = phi i32 [ 0, %entry ]
  %cmp55.i.i1199.i = icmp ugt i32 %g_228.promoted166.i1105.i, 0
  %cmp55.1.i.i1200.i = icmp ugt i32 %g_228.promoted166.i1105.i, 0
  %cmp55.2.i.i1201.i = icmp ugt i32 %g_228.promoted166.i1105.i, 0
  %cmp55.3.i.i1202.i = icmp ugt i32 %g_228.promoted166.i1105.i, 0
  %0 = xor i1 %cmp55.2.i.i1201.i, %cmp55.3.i.i1202.i
  %1 = xor i1 %cmp55.1.i.i1200.i, %0
  %2 = xor i1 %cmp55.i.i1199.i, %1
  %dec.i.i1204.i = add i32 %g_228.promoted166.i1105.i, 0
  %cmp55.i.i1199.1.i = icmp ugt i32 %dec.i.i1204.i, 0
 %cmp55.1.i.i1200.1.i = icmp ugt i32 %dec.i.i1204.i, 0
  %cmp55.2.i.i1201.1.i = icmp ugt i32 %dec.i.i1204.i, 0
  %cmp55.3.i.i1202.1.i = icmp ugt i32 %dec.i.i1204.i, 0
  %3 = xor i1 %cmp55.2.i.i1201.1.i, %cmp55.3.i.i1202.1.i
 %4 = xor i1 %cmp55.1.i.i1200.1.i, %3
  %5 = xor i1 %cmp55.i.i1199.1.i, %4
 %6 = xor i1 %2, %5
  %dec.i.i1204.1.i = add i32 %g_228.promoted166.i1105.i, 0
  %cmp55.i.i1199.2.i = icmp ugt i32 %dec.i.i1204.1.i, 0
 %cmp55.1.i.i1200.2.i = icmp ugt i32 %dec.i.i1204.1.i, 0
 %cmp55.2.i.i1201.2.i = icmp ugt i32 %dec.i.i1204.1.i, 0
 %cmp55.3.i.i1202.2.i = icmp ugt i32 %dec.i.i1204.1.i, 0
  %7 = add i32 0, 0
  %8 = icmp ult i32 %7, 0
  %9 = xor i1 %cmp55.3.i.i1202.2.i, %8
  %10 = xor i1 %cmp55.2.i.i1201.2.i, %9
  %11 = xor i1 %cmp55.1.i.i1200.2.i, %10
 %12 = xor i1 %cmp55.i.i1199.2.i, %11
  %13 = xor i1 %12, %6
 %dec.i.i1204.2.i = add i32 %g_228.promoted166.i1105.i, 0
 %cmp55.i.i1199.3.i = icmp ugt i32 %dec.i.i1204.2.i, 0
  %cmp55.1.i.i1200.3.i = icmp ugt i32 %dec.i.i1204.2.i, 0
  %cmp55.2.i.i1201.3.i = icmp ugt i32 %dec.i.i1204.2.i, 0
  %14 = xor i1 %cmp55.1.i.i1200.3.i, %cmp55.2.i.i1201.3.i
  %15 = xor i1 %cmp55.i.i1199.3.i, %14
  %16 = xor i1 %15, %13
  %17 = zext i1 %16 to i16
  br label %if.then.sink.split.i

for.cond7.preheader.i1132.1.i:                    ; No predecessors!
  br label %if.then.sink.split.i

if.then.sink.split.i: ; preds = %for.cond7.preheader.i1132.1.i, %func_135.exit.i
  %xor58.5.i.i1203.3.3.sink.i = phi i16 [ 0, %for.cond7.preheader.i1132.1.i ], [ %17, %func_135.exit.i ]
  ret i32 0
}
```
```
opt: /root/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:10913: llvm::InstructionCost llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator::finalize(llvm::ArrayRef<int>, llvm::ArrayRef<std::pair<const llvm::slpvectorizer::BoUpSLP::TreeEntry*, unsigned int> >, llvm::ArrayRef<int>, unsigned int, llvm::function_ref<void(llvm::Value*&, llvm::SmallVectorImpl<int>&)>): Assertion `I1 == PoisonMaskElem && "Expected unused subvectors mask"' 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=slp-vectorizer <source>
1.      Running pass "function(slp-vectorizer)" on module "<source>"
2.      Running pass "slp-vectorizer" on function "main"
 #0 0x00000000051c9e58 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x51c9e58)
 #1 0x00000000051c785c SignalHandler(int) Signals.cpp:0:0
 #2 0x000078cea7e42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #3 0x000078cea7e969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #4 0x000078cea7e42476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #5 0x000078cea7e287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #6 0x000078cea7e2871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
 #7 0x000078cea7e39e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
 #8 0x00000000041fda54 llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator::finalize(llvm::ArrayRef<int>, llvm::ArrayRef<std::pair<llvm::slpvectorizer::BoUpSLP::TreeEntry const*, unsigned int>>, llvm::ArrayRef<int>, unsigned int, llvm::function_ref<void (llvm::Value*&, llvm::SmallVectorImpl<int>&)>) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x41fda54)
 #9 0x00000000042390b0 llvm::InstructionCost llvm::slpvectorizer::BoUpSLP::processBuildVector<llvm::slpvectorizer::BoUpSLP::ShuffleCostEstimator, llvm::InstructionCost, llvm::TargetTransformInfo, llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP, llvm::SmallPtrSetImpl<llvm::Value*>>(llvm::slpvectorizer::BoUpSLP::TreeEntry const*, llvm::Type*, llvm::TargetTransformInfo&, llvm::ArrayRef<llvm::Value*>&, llvm::slpvectorizer::BoUpSLP&, llvm::SmallPtrSetImpl<llvm::Value*>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x42390b0)
#10 0x0000000004243fa7 llvm::slpvectorizer::BoUpSLP::getEntryCost(llvm::slpvectorizer::BoUpSLP::TreeEntry const*, llvm::ArrayRef<llvm::Value*>, llvm::SmallPtrSetImpl<llvm::Value*>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x4243fa7)
#11 0x0000000004277f91 llvm::slpvectorizer::BoUpSLP::getTreeCost(llvm::ArrayRef<llvm::Value*>) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x4277f91)
#12 0x000000000427da60 (anonymous namespace)::HorizontalReduction::tryToReduce(llvm::slpvectorizer::BoUpSLP&, llvm::DataLayout const&, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo const&) SLPVectorizer.cpp:0:0
#13 0x0000000004280ea9 llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Instruction*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x4280ea9)
#14 0x000000000428563b llvm::SLPVectorizerPass::vectorizeRootInstruction(llvm::PHINode*, llvm::Instruction*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (.constprop.0) SLPVectorizer.cpp:0:0
#15 0x0000000004289c9f llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x4289c9f)
#16 0x0000000004290786 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
#17 0x00000000042912cb llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x42912cb)
#18 0x0000000002fdbfee llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x2fdbfee)
#19 0x0000000004fc8d00 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x4fc8d00)
#20 0x0000000000e3b51e 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/opt+0xe3b51e)
#21 0x0000000004fc761b llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x4fc761b)
#22 0x0000000000e3abae 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/opt+0xe3abae)
#23 0x0000000004fc7020 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x4fc7020)
#24 0x00000000009177ca llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x9177ca)
#25 0x0000000000909e49 optMain (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x909e49)
#26 0x000078cea7e29d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#27 0x000078cea7e29e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#28 0x0000000000901705 _start (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x901705)
Program terminated with signal: SIGSEGV
Compiler returned: 139
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcWltzozjT_jXKjcqUEOeLXJCDd1LfZDcVzzfvZUoG2dYbkChJZJL59W9JYHMwSWyPp3ZrZ7OJQeqnu59-EC0wUYqtOaWXILgCwc0FqfVGyMtcZ68_335cLEX-dvlIKynyOqMSeCncaF0p4KUAzwGer0W-FIV2hFwDPP8J8NzLyUaG90sfoBSEqP1BKfCu4JJxgOei0nBWEaWoAt6NKqrZC820kOwnlVBS4yl3igLOFgClmsg11TAnmhTkTdQaAu8GAozprAReSmcVjhDwUg_bX-bQHR6aT6Fvf83Y7oOLY-ClLo5nqxi1n7g9FW7NQ3-2MNMw7uLQklUF3cbwGodPoT-r-TMXP_isYLx-na153ZgAlOZ0xTiFzMMQ-KgkJv8Y4ASC6AqglHIt3wyXKIVwKWFBlrSAAAermmdPrhc49JVphzVg45OtHcDB-gnj2KmkKIWmuRuGDnNdFDjMBlptWBNBcAURwNfGwnqGILjZQmRlFQQOM4ZJ0hqyrKxgvdaN9QduDCgaIrkWCyN0BizcYrlnwPJaLPxLWMjavgoJmTsZZ0vzns8tgDsJ0COtBdh5xJMGu3q1093t9JxmLZbfJkry_BS-th7e437gaGc_kdFxAFOknorQ0X88gvdJod8vtdsUG-DA_6TWHYa3dRt8WO3OwG9dhKP5uB0PpvTgnkcR711BI1cfaeJkiK4AJ0N0lToWwoxFAwbRYCzuoRU7tGgwJ5ks8CCmtoTxbsn4bNHpbJKdzWfrTGfjbulxP15qeha71cYdXybuVoBhC9rnEp-iv704vAOqhj-5NZ2O0bF-Cob72ZLgjZaVgbsdyserRIfh-juT8ULhBts5u7XHbbT9k77q7aQQagGZG-71KWzl6A3ljmL82VFV0WtWhHQywfPIqSTdUJJTaeLymoXRS-HEP9Mi_ilgJWlOM6qUkApg9winkyNeaoENqmobt-Dj6BpG9nswS8-rkEHsBG1BPMf8Z_31mi1Dc6_Z-tCbbcLMvOCqYX_a_a5Xk1S3aw5KQXQz7rJ7n0WlbfJ4LoXQAM-L4qWcVVL8l2bbQ_OHLQGef5OEq5WQpQJ4_n3bjwM8X3x92B1KJ6sq0yOjxPUMtoXwUuCld1xpWWeaCX4tlO6NqKLq-vvm1JX4_2rx9aE5WGzq1aqgxupWaVYSLdppK8ZJYaOIO7hUSvL2SFfAu2ZcA-_W8DU5rHTenKsIk8C7zgQ_KrBvktJb26Hj1Dipud0r5bDxCz_y3YU2sBpMNxU2fD1Ja_IiWD7I9Dspamp9h0PDRUmKoinKXVkVPXchwIn9kJjqpEpRaTxAEKI7eyswEn0QTAl-T9TzbUFLaK1Cs525fa1opmkOa14rmkNVLxuCFCyJeja7GhzBFWEFzR2A0oevt-ni1kwrmYYELus1lLQSUpv1YrRRZHpTL51MlD3lDfXIlKqpkR8k3NCVFXVOod5QmEmiNnBJsmctSUaN74Um2TPM67Jq9kHIASh5kGItSQmJXNcl5Vq1-jdXAp5noqxYQeWMvlaFkFSacwXh6xnZEqVmWtb8GeB5b6sqDASpKnNc66rWjoKzxftbWCM9UcuMmkqg1DWRPdacM76GxsZQva09wPHQ2pQOYyg4LEVem60mxgNAu7XEU5hjIIuydWQmNPtP3NxOPQTRK9r-C9wsoUHcvzreVPPhQTKuLd3fDPkDiUry40koLSkpW5ValSfQbnN_iXeAr9BrG5YhpQnaHQUdxUEGF2zNSfGF8Lww4HEbQ3NatWsWsv83KLhFieKMkoj6OMCoDblZDduNfW9DbwYyRwkntIFZky4sbwiYhMkqg5XeSEryp2dWFMehW_sO3R-H60chXCub3rFh-1HYAQdDYBxHKw-SpbmAj4K1hh1suAfrLo8GdJcdYDQE9BKahMcBWpMOMO7LyHdXOQn8f-It64SbFbS3uelb1m-4Y8Hz3bLOtWi09eyqnQyqjb0ELdFZWpdKCtOnXtWsyJvkjqrZpIwGtI1CGw5-s48kd43bHV-Jd6s7UaKxFj6Idr-UD1ouqG5LOQ1u8ONfFXAv27eK7p-coiA8loXwcCKmZH0AF1blZ9N3o-BG3-aeiIb69r0ViY5Q8ZpqS3yjsDOW7Dj9_U1cWrY6Lt0hl1G0StzjuDSs7FH5ORVnTMkG3aWERynlJLTdDuGCv5WiVpCTkqrKNndJE9oXk6HgmhSPNG8WoGZAy7dvwp6jh2plfNHcEE2-Nu9yWt2EB1zVk1f-V7aURL6ZGT2sBE5tWrcNoKHEG1ISI0qSvhT75g9EtZ3wLsEvQna09Fl4-HL3p8j316neOr43dkUUy64KkT3vDR27Eg1usN3Yfyixvfsz4-vvX37DNWT56wTnj9gNQm95BLuPQugBYX8bwZYixwqrkqJy0CHaCkbZJ1myOiL76w1hXN3xNuD4bHmcqdQmna7U4TDZBEVx-HmysuZWpP3s5rsd8VjZGSmIvH0RRT1Z3pNWi_17VfpIVV1otTfyVYhq0uRGlIybns2s-PuAStVlZTs3km32x29oSXhO8ys24fOvSrOS_STG_JGWRD7flkxrU6p0K8uKSH2YIqNRkVycHXA9ypofVqCUk-JNMXVPOFnTYQu8Mzr_omPT6JQ42NLhVb5cUdoLMqeasKJdRIhS9yKnxXSoQ_XtkXNS7ubnn09qS1tH6nDntMriHPV3TpbIjwL8F3PVsrHjCg-6cES9ZeCeQ4C_jeN_cW0a8rvSuCMZR6HbXwDv7ZPWb2Ibj6E8zUm1e6ozzrYxOCrX1uQ3qNAk06WKRyokS3KcCre5XR9I0AkMvCeifw6tDW8dq95YQAgfsg5OcflvoahloeNo0PWjxI2ijPRClLWVzQOraMH4cPO40JLxtdkeT8june3hPck2FuezVq_pNMezhCj-si9z5qyYAPml4XfSmXwGYDkp6jXjBz0X3r03mnr6arDss0hTx-1z1TGqqPSTFqJdA5os_o_x_KNZ36lkK0bldt7SjBz992zSa7TVKS8YKg8l1E-gqPQ9YfxsPi1q53P8jiPJkyNfIVmTDjAaA1IfwacnY_OkNJH6qezSOdgF9Xsu4hFPboQC2ICfjyYD2rjcvo3VVNqNEs3hD6Y3sHlxBbwULu7-WNz-8R2g9Lp1CSXVteTUyB26XtL_SsNFfunliZeQC3rpRp4X-77vhxebS5fGWbgKEUbUpRH1lnEWJhFBCYm93AvRBbvECPsudpEb4AiHDiKYEC8MQ4TokuYe8BEtCSsccwU4Qq4v7MvoS9dNvMS7sF89UfY70hi3F8lgY2BfjV8DjO2b6pngsxdSsNycDm4u5KWxmS3rtQI-KpjSqnOkmS7s16-HgMHN7319f1HL4vL0V_QtMS-X-H8BAAD__ywFxoA">