<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/113986>113986</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[InstCombine] Assertion `!areInvalidOperands(C, S1, S2) && "Invalid operands for select"' failed.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
llvm:instcombine,
crash-on-valid
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
dtcxzyw
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
dtcxzyw
</td>
</tr>
</table>
<pre>
Reproducer:
```
; bin/opt -passes=instcombine 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-pc-linux-gnu"
define <32 x float> @process(<8 x i1> %0) {
%3 = select <8 x i1> %0, <8 x float> zeroinitializer, <8 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>
%4 = shufflevector <8 x float> %3, <8 x float> zeroinitializer, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
%5 = shufflevector <16 x float> %4, <16 x float> zeroinitializer, <32 x i32> <i32 0, i32 8, i32 16, i32 24, i32 1, i32 9, i32 17, i32 25, i32 2, i32 10, i32 18, i32 26, i32 3, i32 11, i32 19, i32 27, i32 4, i32 12, i32 20, i32 28, i32 5, i32 13, i32 21, i32 29, i32 6, i32 14, i32 22, i32 30, i32 7, i32 15, i32 23, i32 31>
ret <32 x float> %5
}
```
```
opt: /home/dtcxzyw/WorkSpace/Projects/compilers/llvm-project/llvm/include/llvm/IR/Instructions.h:1614: 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: bin/opt -passes=instcombine reduced.ll
1. Running pass "function(instcombine<max-iterations=1;verify-fixpoint>)" on module "reduced.ll"
2. Running pass "instcombine<max-iterations=1;verify-fixpoint>" on function "process"
#0 0x00007ffff7e15b02 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMSupport.so.20.0git+0x215b02)
#1 0x00007ffff7e129af llvm::sys::RunSignalHandlers() (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMSupport.so.20.0git+0x2129af)
#2 0x00007ffff7e12af5 SignalHandler(int) Signals.cpp:0:0
#3 0x00007ffff7842520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007ffff78969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x00007ffff78969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#6 0x00007ffff78969fc pthread_kill ./nptl/pthread_kill.c:89:10
#7 0x00007ffff7842476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
#8 0x00007ffff78287f3 abort ./stdlib/abort.c:81:7
#9 0x00007ffff782871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x00007ffff7839e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#11 0x00007ffff1272963 llvm::InstCombinerImpl::FoldOpIntoSelect(llvm::Instruction&, llvm::SelectInst*, bool) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMInstCombine.so.20.0git+0x60963)
#12 0x00007ffff13a09d1 llvm::InstCombinerImpl::visitShuffleVectorInst(llvm::ShuffleVectorInst&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMInstCombine.so.20.0git+0x18e9d1)
#13 0x00007ffff1275da8 llvm::InstCombinerImpl::run() (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMInstCombine.so.20.0git+0x63da8)
#14 0x00007ffff1276f09 combineInstructionsOverFunction(llvm::Function&, llvm::InstructionWorklist&, llvm::AAResults*, llvm::AssumptionCache&, llvm::TargetLibraryInfo&, llvm::TargetTransformInfo&, llvm::DominatorTree&, llvm::OptimizationRemarkEmitter&, llvm::BlockFrequencyInfo*, llvm::BranchProbabilityInfo*, llvm::ProfileSummaryInfo*, llvm::InstCombineOptions const&) InstructionCombining.cpp:0:0
#15 0x00007ffff1277dfb llvm::InstCombinePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMInstCombine.so.20.0git+0x65dfb)
#16 0x00007ffff30d9955 llvm::detail::PassModel<llvm::Function, llvm::InstCombinePass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMPasses.so.20.0git+0xd9955)
#17 0x00007ffff01678bd llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.20.0git+0x3678bd)
#18 0x00007ffff68d9e65 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMX86CodeGen.so.20.0git+0xd9e65)
#19 0x00007ffff01659f6 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.20.0git+0x3659f6)
#20 0x00007ffff68da825 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMX86CodeGen.so.20.0git+0xda825)
#21 0x00007ffff016657a llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.20.0git+0x36657a)
#22 0x00007ffff7f95051 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) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMOptDriver.so.20.0git+0x2d051)
#23 0x00007ffff7fa073f optMain (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMOptDriver.so.20.0git+0x3873f)
#24 0x00007ffff7829d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#25 0x00007ffff7829e40 call_init ./csu/../csu/libc-start.c:128:20
#26 0x00007ffff7829e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#27 0x0000555555555095 _start (bin/opt+0x1095)
Aborted (core dumped)
```
It is caused by https://github.com/llvm/llvm-project/pull/113746. We cannot do this fold if the output and input operands don't have the exact same type. It was reported by llvm-opt-benchmark pre-commit test https://github.com/dtcxzyw/llvm-opt-benchmark/pull/1543. I am sorry I didn't notice about this. Fortunately this issue was captured by a post-commit test https://github.com/dtcxzyw/llvm-opt-benchmark/issues/1560.
cc @MatzeB @RKSimon @goldsteinn
I will post a fix later.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWl9z2yr6_jTKDWOPBNa_i1w4Tv37ZU4zycSdnr3zIIFsNgi0gFK7n34HJOuPrbRJ92y3Z_dkUhVjeHif5315QRCsNdsJSq-98MaDkJj88PX4xYPQC2-vcG32Ul23lVeZJMfrJ1opSeqcKg8tgeffev7Si_z2t_mIbkDGhAfXsjJgVmGtqfbQLRPa5LLMmKBAUYtB5pyD2abpZrDaUQMINpjjo6wN8NAt8CCks9JDSzqrYOx7aImge9iPwfijLUUL95ixrhDAxEPLACazIvHbknBV0al7tJhtbDMIR6YYxSpOT2YckmgbLWZVPuNM1IfZTtRdh-ZJaGG5eWiFIDiAgktsPPQBeAu_UjKnWnvWllUCDoAF7hsY-h5MgRffNBDAViE3pKac5laEi_arU2U3wleqJBPMMMzZV6qmmnho5cogmPvuh3rwxndof4p69GGg0KJRaF8XBacvNDdSXRKGIXq7VkFkRbbR4KRiCAJniy0EpwI8FdCpsDgVwlMhOhXiUyE5FdIOsIfusIMOPOjQgw4-CMcChNMCOBZDBRZDet-RwAXtKxJ0HIKOH1xc6NMT7MjD8EK8AfsOFkYX0g6k6XBhfCF8rxvscGFy4ZZeVNi7M71wWq847J3tX7g06Fl1uCgYuEhRM5EHYBi2-SK-nU6d44-yMi7LwvVeltSD6y4_r3-X6nlT4dzWPir5d5ob7cF1LsuKcapsmfOXclY137UfPbhmIuc1oX3F3ZN9CG1UnRsmhZ7vXXIMbAIFL5IR4FqipYeWG5eUbOvms40iDyZ9g8-Y19SDS6vK22tTO9RSa6qsBcAKAAOs6J14wZyRh4oqLIhNnysLsXEu3ECXOm3oRDZBt42BbFuDQqo2i9pEDWNQYMYpmTfiPn78sNx8ALrOSmYABlm9A4pWUhlgJNgbU2lrJlx7cL1jZl9n81yWvW5n8jKta2plB1gQ0KoMzJ6CXGG9BxnOn43COW2H3xicPwNSl5UdxVX5c-B-HpXcKVwCrHZ1SYWxdrxjRW3AghbsqRaCiR2wnaxKRS2cmz2YDLp7aFXiw4wZqrALAg_dBh66eaGKFcdZwQ6VZMJGsXUWhEAKUEpS2-URwsHYpxURvjL8D47pBjyZbnG6BbUdD3gQ-cA_2BUjLoqiiGkQZj4chJs-6qbwqJgwTv9Pys2gQfwq_GUrtVEUl16blIRp4iz5wXn48ePn-1O8ZDXjxIPrxpvzua1nWfO07TZ1ZSNwruUc-nN_Z2fXjX-AjouVviMbnJGFKS6myD7VYsN2AvP_x4I0FiW_AB9r7ogPPOeDixCMLHcR63zRVOt5XtnJ47t_HRAaASULGEK_ZduY1m7kBrs4-0VubYycda7LyLjFGDON0iIH221l9opisn1mnG9ZWXFqp6sLZmClEJXhHlwPm81zDy0XNrXGUY8fvgVfGKoE5t9Ejt3GdqBGNIU87PZNuCQ9g4vPxV3EEdhp5w-H1BRPsaCPmtDKBk0lNTt4cK0w09Rhw9juvHvoZAwNk7hAAGc2HzsoQxr3uarGOrv_j3uE9AIhyMBW8C2XmGyJLDFr_MKEo2urS73LcQMXBLE1qXW7nWLjhJKglKbR-0LJdelCyWKO5m0AY5hGaDBv7dK6avKjuisr3tSuJScP1Z0wctOuZ8m4S7t2tylrcr1uVt9MSv4Tpv9lJhgQO88GkZ9GaCTSKBkECPspCb4r0gvTzGyaLfFntyVueA-kmvg2-tXUCBKakmAkBzqLmZDg5LtyqFr8nFT_Pl8jgpMRucUZuajwU9BuEYbb0ocXqtb95qWn31eeBf-gt-XKWevvYZvl8onqmlvmZ7vTpdZ1WdnOK5zv6UXPT-6Q4CPLFFbHO1HIV1p8UljoQqpyss2tLJnARqpPil6O8VAZVrKvbkV5oiVWzx9KZoxdC89a3nCZP68V_UdNRd6ac0boRmGR7x-VzHDGODPTrR6VLBinm7osO17LS11b9z44gTTIZT-ZBrI3rZjYXS7V1vXhmetjUmTT4zxirYdh_QbvLwXmR830PRZ4R5WHVhOd7N7yl8sAUUiKbDRHRqs48kmahuGAKqEGs3baW6XuJaF8mvBrjnQC_5B-9ve_yTGP7u3q3CdO8pFPRlshP4jiJBu-KTs_fIvhX2J__Hy_kuoi_JGTcqT1aG8YJSSl0R8R__82H_3l24-f7_-WRCtJ6P9RcTmZaDSeTOnZZArTIhowvXdHDZ_kiZV13JLgykg1rVnT4V2KtV1-tblglRhKBf2zuYAT-L65cNJm9UaBf0DB10L5z-iWb4SxlX7km-AsjKMwxm_IN1Me-d8Tejr-rYQjjccHRUUa-uHw3VDVLngfWUU5E-PDvY1RTOyeaDEV_K9s3-9xvnc4y-9s_92b10UrKflDbararBmfAPmXvn6FzlIpfLS1Q-86TXi9Y-Jyferba0Oauu6UGK3cDcBIRot1Y_3avoekU6uerMzWSNlmoobFb0yQb7X6TBUrGFWnds1hxXv__1lnmw-VuVXshaqL003ih6MXeDg-kyywH6MCyMrcYyb-09aiJEbFyNqz006YktQH2y1nWb7VBiuzzTHn2-44Ldf15YFfe6Q41cldMIXtFXw3ang-Kl34wPVhgpnzgZqiRZ859OYEz131w_4NE0ZToCMqUywmwVGcWrN77NMLQHj68dMQNKjWp92FTXOq46f9UrHMpDLUzapcKupugehgx3t2KeiedwYwDXJca0pAdnz_BVVVc-uQIEDxIpqD3ynIsRDSACKB2TMNCskJYIW7s5JuvrZXWbbUXaoRuxGNDdjjl-Z6ix5wboDGJQXmWNE5uDPgC9btXVpjrDNFVmaWUZHvS6yeQaXoLJdlyQwwVJtv8ennxCXOgFi4QHNwB3AJtFTqCO4AYaQxVkjDcgpwJmvjyM7BWipTC2woPzb03QWeszzHlalVYzkGldTmD7K0uyMMwsifD72b58Bb-PfYfKU3tvT024aVUtjiTnKiDWVCgFE8gC-Mc2cdwKBgB8CxoWqE2jyvyDUiKUrxFb0OYuQHEUQLdLW_LooUxVFQkJjkeZGQxI8JzpIAF7QgeFFcsWvow0Xgw9T3Ueqj-QIjGMcRJX6YhKEfeQuflpjxuaU7l2p35SheBwFKk-iK44xy3f5tUZv0hxeA7o7dg9DdkM6kmLkL3Pavj9R1m9d22lv4nGmj-2EMM9z90dLgCMMLb3_eHfJVrfj1j18StwK9XMN_BgAA__8N8Uvy">