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

    <tr>
        <th>Summary</th>
        <td>
            [ARM][LV] -mcpu=neoverse-v1 Assertion `!areInvalidOperands(C, S1, S2) && "Invalid operands for select"' failed.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            vectorization,
            crash
      </td>
    </tr>

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

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

<pre>
    Possibly related to Issue #72720 and #70988...

LoopVectorize is asserting while trying to create a SelectInst on a SMAX reduction:

```
$ cat test.ll
target triple = "arm64-linux"

define i32 @foo() {
entry:
  %0 = load i32, ptr null
  %1 = and i32 %0, 15
  %2 = call i32 @llvm.umax.i32(i32 %1, i32 1)
  %umax = zext nneg i32 %2 to i64
  br label %loop

loop:
  %induc = phi i64 [ 0, %entry ], [ %induc.next, %loop ]
  %max = phi i32 [ 0, %entry ], [ %5, %loop ]
 %gep = getelementptr i32, ptr null, i64 %induc
  %3 = load ptr, ptr %gep
  %4 = load i32, ptr %3
  %5 = tail call i32 @llvm.smax.i32(i32 %4, i32 %max)
  %induc.next = add nuw nsw i64 %induc, 1
  %exitcond.not = icmp eq i64 %induc.next, %umax
  br i1 %exitcond.not, label %exit, label %loop, !llvm.loop !0

exit:
  %res = phi i32 [ %5, %loop ]
  ret i32 %res
}

declare i32 @llvm.smax.i32(i32, i32)
declare i32 @llvm.umax.i32(i32, i32)

!0 = distinct !{!0, !1}
!1 = !{!"llvm.loop.interleave.count", i32 2}

$ opt -passes=loop-vectorize -mcpu=neoverse-v1 -S test.ll 
opt: clang/llvm-project/llvm/include/llvm/IR/Instructions.h:1711: void llvm::SelectInst::init(llvm::Value*, llvm::Value*, llvm::Value*): Assertion `!areInvalidOperands(C, S1, S2) && "Invalid operands for select"' 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 -passes=loop-vectorize -mcpu=neoverse-v1 -S test.ll
 #0 0x0000000005318cf4 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) clang/llvm-project/llvm/lib/Support/Unix/Signals.inc:723:22
 #1 0x0000000005319129 PrintStackTraceSignalHandler(void*) clang/llvm-project/llvm/lib/Support/Unix/Signals.inc:798:1
 #2 0x0000000005316a1c llvm::sys::RunSignalHandlers() clang/llvm-project/llvm/lib/Support/Signals.cpp:105:20
 #3 0x00000000053186df SignalHandler(int) clang/llvm-project/llvm/lib/Support/Unix/Signals.inc:413:1
 #4 0x0000150ba31fac20 __restore_rt sigaction.c:0:0
 #5 0x0000150ba221137f raise (/lib64/libc.so.6+0x3737f)
 #6 0x0000150ba21fbdb5 abort (/lib64/libc.so.6+0x21db5)
 #7 0x0000150ba21fbc89 _nl_load_domain.cold.0 loadmsgcat.c:0:0
 #8 0x0000150ba2209a76 .annobin___GI___assert_fail.end assert.c:0:0
 #9 0x000000000290d65d llvm::SelectInst::init(llvm::Value*, llvm::Value*, llvm::Value*) clang/llvm-project/llvm/include/llvm/IR/Instructions.h:1711:5
#10 0x000000000290d5ec llvm::SelectInst::SelectInst(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*) clang/llvm-project/llvm/include/llvm/IR/Instructions.h:1699:12
#11 0x000000000290d713 llvm::SelectInst::Create(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*, llvm::Instruction*) clang/llvm-project/llvm/include/llvm/IR/Instructions.h:1728:73
#12 0x0000000004a6a0a7 llvm::IRBuilderBase::CreateSelect(llvm::Value*, llvm::Value*, llvm::Value*, llvm::Twine const&, llvm::Instruction*) clang/llvm-project/llvm/lib/IR/IRBuilder.cpp:1113:54
#13 0x0000000005a5281b llvm::VPInstruction::generateInstruction(llvm::VPTransformState&, unsigned int) clang/llvm-project/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp:294:53
#14 0x0000000005a533df llvm::VPInstruction::execute(llvm::VPTransformState&) clang/llvm-project/llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp:432:48
#15 0x0000000005a1cb1e llvm::VPBasicBlock::execute(llvm::VPTransformState*) clang/llvm-project/llvm/lib/Transforms/Vectorize/VPlan.cpp:494:31
#16 0x0000000005a1d829 llvm::VPRegionBlock::execute(llvm::VPTransformState*) clang/llvm-project/llvm/lib/Transforms/Vectorize/VPlan.cpp:643:31
#17 0x0000000005a1e765 llvm::VPlan::execute(llvm::VPTransformState*) clang/llvm-project/llvm/lib/Transforms/Vectorize/VPlan.cpp:778:57
#18 0x00000000058a8721 llvm::LoopVectorizationPlanner::executePlan(llvm::ElementCount, unsigned int, llvm::VPlan&, llvm::InnerLoopVectorizer&, llvm::DominatorTree*, bool, llvm::DenseMap<llvm::SCEV const*, llvm::Value*, llvm::DenseMapInfo<llvm::SCEV const*, void>, llvm::detail::DenseMapPair<llvm::SCEV const*, llvm::Value*>> const*) clang/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:7792:24
#19 0x00000000058b5968 llvm::LoopVectorizePass::processLoop(llvm::Loop*) clang/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:10281:22
#20 0x00000000058b6957 llvm::LoopVectorizePass::runImpl(llvm::Function&, llvm::ScalarEvolution&, llvm::LoopInfo&, llvm::TargetTransformInfo&, llvm::DominatorTree&, llvm::BlockFrequencyInfo*, llvm::TargetLibraryInfo*, llvm::DemandedBits&, llvm::AssumptionCache&, llvm::LoopAccessInfoManager&, llvm::OptimizationRemarkEmitter&, llvm::ProfileSummaryInfo*) clang/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:10476:27
#21 0x00000000058b6bfd llvm::LoopVectorizePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) clang/llvm-project/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:10515:70
#22 0x00000000055f1c5a llvm::detail::PassModel<llvm::Function, llvm::LoopVectorizePass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) clang/llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:90:3
#23 0x0000000004b30e1f llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) clang/llvm-project/llvm/include/llvm/IR/PassManager.h:547:7
#24 0x000000000230c7d0 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>&) clang/llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:90:0
#25 0x0000000004b30732 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) clang/llvm-project/llvm/lib/IR/PassManager.cpp:128:23
#26 0x000000000230c734 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) clang/llvm-project/llvm/include/llvm/IR/PassManagerInternal.h:90:0
#27 0x0000000004b30b01 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) clang/llvm-project/llvm/include/llvm/IR/PassManager.h:547:7
#28 0x0000000001b9e704 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) clang/llvm-project/llvm/tools/opt/NewPMDriver.cpp:527:10
#29 0x0000000001bc5e21 main clang/llvm-project/llvm/tools/opt/opt.cpp:739:27
#30 0x0000150ba21fd493 __libc_start_main (/lib64/libc.so.6+0x23493)
#31 0x0000000001b9bd8e _start (opt+0x1b9bd8e)
Aborted (core dumped)
```

@fhahn @ktkachov-arm @paulwalker-arm 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWllz47gR_jX0C8oqAuAhPvhBvhJXxlmXPZnKmwoEWzIyIMAFQB_761MARfGwxmPveHaTVKY8skk2Gl9__bFxiVkrtgrgJEpPo_T8iLXuXpuTmgvFpHw-KnX1fHKjrRWlfEYGJHNQIafRlbUtoIjQnOQkRkxV4SIulsvFYhHF51G86j4_ad18Ae60Eb8BEhYxa8E4obbo8V5IQM48-wunETfAHCCG7kACd1fKOqSVv75e_RMZqFruhFYRXY07iLJ499NdkgRx5pAD6xZSdjcdM1twyBnRSEARPUcRIczUWXIshWqfIkLGLivYCAVIUIKiJN5oHZFlRAoU5aedAShnnvc4EIpIGge3UrPKt4vIGWqcQartIQQjHIw8W8E3SWNviNORCQkmnEnZ9y_lQ71oa_a0CI6Xu6bYN_V_44gUIwfeMvj4DZ4cUgq2fWfEkyyypDcuDZKsBOmfSa2bMQXhehKgUFXLg-PmXng3KEpPUQggImlgBEXpebhOT_ctFgqe3M7IOw02g9cebPDpYX7HZ3rYVUTSLTTB0xYcSKhBOZ-AeS48Zx76Dt0ICR0S2DjTN-ocj8ySg3n27UdGaTByTMiXmbQvMpn0mez4mKZzILHTTlUh1T4iZR-ngXgdjZrBk3Bcq2qhdNdQ8LpB8Ouk0Tg3XjYjYQg89-Lt9nLxDyY3gl6CJxyi7PJDcDwWVWg1EZUB-yL9384yMuB6ogzYnev8fPrucskMvEL5ju09zYdatK-26CsN7l76SlgnFHc-Xl8ifNQdFXgARzDeFZ6dTUTInqmFUA6MBPYAC65b5XxB2omCzAL0BU43Dh03vpLaiJ57D8cP-xp7XPOmjei5Av0AxsLxA0bHd31BRJ0X3fhMIC6Z2kbk0iM5boz-F3C3u4zIpVBcthUMN65u_YeyznSl2C7uI7rCOcbe2YMWFQqWdBXR1VDFu2uhvGaWg8EXJluIyCoI6c13C9_VqhtEtEK-8BPMDFypByZF9UsDhqnKRmR55l3chTp5R0L9JllEMl_7d8ZI76zRRhtkA-BAfY42TEiodkPZzaeL1d0Fsm1ZC4cYKtstMtBo43xJvXeusR4muYzI5Va4-7ZccF0PvM3oFX70tBG57IaCjmXk7gFxw-w9Khn_6gzjsOv-zjH-FVVtPZTkeBHFxY3RW8NqxMy29QXPg_gRbeyLKY1R_BT3_1KKl3yTjLJhn233x40RygV4nz3eSXoNe1xr6wywOhB_hoQXdvEd0UlRRuTyrm08vRG5_IcST_6G2Com7UIoHtFVTmhEV_2o7RHjGeICkwLN4HU-_spUJcFEZOkF22nqQzAVS_8yDJDIDFLGMD9E4m2rJsjsbrrxPkw9GN54leA49QTFAxo6T2lWbdCckY_LUILplI1k1z9O45JRvGGcxGi9NmCdNrA2DlmxZaGsLLyDOPzfN0_HzQnBmOYbZJiwfhq67FBlSfebL6xeZBE5jZ9oTvPNMKJGhGYTR3hTVmWKWOnf5dccEVyV6cRRPnfElwVaK7n2k4N1pWsm1IJrWS3iMF-o7ZYzdyi25TS2uGB5hhZMKV0KtV6v_3K1Xq-7efPa16UFqGo3jz7krhhnmhRxlaV_RF3-0MEk7Qc7iuN5OCnwV8IZXf94UOO7nx_9ooDr4DmbPhuF8aFkZIUf7jAZ2MBzNnJMX2HjLKyp_kQm_giWcuIrb04HlialN2EZi1k-BnJ72gpZgTllFsZE3e2mAP-xwulqb8dDH0Rf8nEouWky0DCt-SwlS1yO4d6Muw-3tqDAMAcTXGM2bj4bpuxGm_rOBWWFgFoVNhKq9wzxe0d-JrTfIvB_30imboGLBvrhjBSJD22U4WQWGqXV5vXQ4Al4O38XDoXz8fATSvzncoCfTuFjXmKYwD9lVvBTqfnX96B_s4JeR9_DDqxTPMDOZrCrJSkmsG9hK7T6k3FnCZ3hzme4Ic_SCW7J3qWSj8Wb575-pfmAdznBu2TLnOAR3vGmGvMK984UmEkIIaZxGBfdtshZt8Ccv7RnL_h4WasUmMl-nnlhc65roZjT5rOBvhKWWsuZFSgL16yJ6Nlo6Dq7-NJXyTfV1d7Lldro1z2FiT69mDavwDEhp65umDDvBkUvInoxMvpBZUwY3iuk8BWEjGp7MZVImRbZ8hsSgRtmd2uNxmgO1n4K2zXLqfnPAo9jssSj5ZpfGsUz9FmR5t9Hb1p1VTdygvyyVbthaibFO84kMxcPWrYHn_s-gnTmDz6H3eJ9iAdtZjqfPQ3179LAry0o_tw5mE8KQiefRGmYOWxxDjVTFVSnwtkXPaysbevGx3XG-P1LBD64Ffep9r6vmWLbA2_rL40T9a6E3ELNzNeLWjh3wPLG6I2QcNfW9RjvT1FLkmdeLUM5JHiulnJTvUktb1PKSjH5bIXtaRoXgH0jXz5-fHJwOOIU-9V6Hg8RT_cO0g3mKftG7fIBX-sK5GHcL2QxZWqWZbBgHqDqGAH7-3jyP39aAg4vGgJJnfcr5cAoJsPaofBr52FaSSYz5qSkMeDxtHLk5g1s_2_wFXhKk9wrdCBqMv8mNOZ5FX-AQH8awf_X-X6PyKcvnes8p2QE9FpXrYTPugfl3a4q1jhtDofcNXhXwLsm76qrL7S5q6BhA4CM3uPshTxp8i559gGdvZGVj9LXwMq31PXTqf4xZeVzZZUxfsMLfojv_3aeDlfOydoOlwXk8Viapg26uhENSKGmC9E7Z4Ta3sLmkC6_MY-9Zvw--PneBLSbWc-ttJa_tK5p3aWQB5z80ONvhLMyhj37u-PUBE5kuxXqRTXXjVs7v8bs5rShv78JVb1m9QWM2AgwvV2_Rn3f7-8pxPfnZ4C68Tf_Do831-dGPOzrVkryMP8bxFFMxcFTIBjVTKh39aQb1y8caTGdS--P9vpjiyopKFqvpSj52jpm3Dp09-pZCE0KOpyGEzo9fcNlUVZLQJ077ymgOo2fdk_2TVelNg4qb8K1gXDECdXgefbVnu4ziTf37F6hKIm_uq-M3-uHY2Zqf92wVj4y-RVMuHNUndCqoAU7ghOcx5jiJI6zo_uT3AdfbuKCbyhZMgw4LcqswNkygTLOyiNxQmJCMaZxTDEl2SJNGCRJVpS4zGNOIEpiqJmQC8__QpvtUTjUPcnpskiOwtcibPhWFSEP442a7mA_IiSc9Pqr9PzInISklu3WRkkshXV28OuEk-ELWqvb6yg9j9LTT1-i9PzgUe4fdix-1Bp58vvPvQNL_w4AAP__WkOlrQ">