<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/147883>147883</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
"LLVM ERROR: Cannot select: ... X86ISD::VPERMV3" (with constant vector splat)
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
thurstond
</td>
</tr>
</table>
<pre>
## Test case
```
$ cat reduced.ll
target datalayout = "e-m:o-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 <32 x i16> @shuffle_vpermv3_v32i16(<32 x i16> %0) {
%2 = call <32 x i16> @llvm.x86.avx512.vpermi2var.hi.512(<32 x i16> %0, <32 x i16> splat (i16 1), <32 x i16> zeroinitializer)
ret <32 x i16> %2
}
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
declare <32 x i16> @llvm.x86.avx512.vpermi2var.hi.512(<32 x i16>, <32 x i16>, <32 x i16>) #0
attributes #0 = { nocallback nofree nosync nounwind willreturn memory(none) }
```
The test case passes `opt -passes=verify`.
## Repro command
With llc at head (1ae99f5894d70d11545f3a657665e5a3b8437d9a):
```
$ build/bin/llc < reduced.ll -mtriple=x86_64-unknown-unknown -mattr=+avx512vl > b.s
LLVM ERROR: Cannot select: t13: v32i16 = X86ISD::VPERMV3 t2, t16, undef:v32i16
t2: v32i16,ch = CopyFromReg t0, Register:v32i16 %0
t16: v32i16,ch = load<(load (s512) from constant-pool)> t0, t18, undef:i64
t18: i64 = X86ISD::Wrapper TargetConstantPool:i64<<32 x i16> splat (i16 1)> 0
In function: shuffle_vpermv3_v32i16
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: bin/llc -mtriple=x86_64-unknown-unknown -mattr=+avx512vl
1. Running pass 'Function Pass Manager' on module '<stdin>'.
2. Running pass 'X86 DAG->DAG Instruction Selection' on function '@shuffle_vpermv3_v32i16'
#0 0x000055cfe0d1a7a1 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /usr/local/google/home/thurston/llvm-project/llvm/lib/Support/Unix/Signals.inc:819:11
#1 0x000055cfe0d1ad2b PrintStackTraceSignalHandler(void*) /usr/local/google/home/thurston/llvm-project/llvm/lib/Support/Unix/Signals.inc:903:1
#2 0x000055cfe0d18a76 llvm::sys::RunSignalHandlers() /usr/local/google/home/thurston/llvm-project/llvm/lib/Support/Signals.cpp:104:5
#3 0x000055cfe0d1b4ad SignalHandler(int, siginfo_t*, void*) /usr/local/google/home/thurston/llvm-project/llvm/lib/Support/Unix/Signals.inc:418:7
#4 0x00007fdff8a1cdf0 (/lib/x86_64-linux-gnu/libc.so.6+0x3fdf0)
#5 0x00007fdff8a7195c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#6 0x00007fdff8a1ccc2 raise ./signal/../sysdeps/posix/raise.c:27:6
#7 0x00007fdff8a054ac abort ./stdlib/abort.c:81:3
#8 0x000055cfe0c37aed llvm::report_fatal_error(llvm::Twine const&, bool) /usr/local/google/home/thurston/llvm-project/llvm/lib/Support/ErrorHandling.cpp:137:5
#9 0x000055cfe0a317f8 /usr/local/google/home/thurston/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:4443:3
#10 0x000055cfe0a2e814 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) /usr/local/google/home/thurston/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:4344:9
#11 0x000055cfde544669 (anonymous namespace)::X86DAGToDAGISel::SelectCode(llvm::SDNode*) /usr/local/google/home/thurston/llvm-project/build/lib/Target/X86/X86GenDAGISel.inc:374205:1
#12 0x000055cfde5389a3 (anonymous namespace)::X86DAGToDAGISel::Select(llvm::SDNode*) /usr/local/google/home/thurston/llvm-project/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:6754:1
#13 0x000055cfe0a205bf llvm::SelectionDAGISel::DoInstructionSelection() /usr/local/google/home/thurston/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1343:5
#14 0x000055cfe0a1f69f llvm::SelectionDAGISel::CodeGenAndEmitDAG() /usr/local/google/home/thurston/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1112:3
#15 0x000055cfe0a1df03 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, bool&) /usr/local/google/home/thurston/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:867:1
#16 0x000055cfe0a1dad4 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) /usr/local/google/home/thurston/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1891:11
#17 0x000055cfe0a1aab1 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) /usr/local/google/home/thurston/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:604:3
#18 0x000055cfde524e82 (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) /usr/local/google/home/thurston/llvm-project/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:187:7
#19 0x000055cfe0a19831 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) /usr/local/google/home/thurston/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:372:3
#20 0x000055cfdf6a8d1b llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /usr/local/google/home/thurston/llvm-project/llvm/lib/CodeGen/MachineFunctionPass.cpp:108:8
#21 0x000055cfdfeea66a llvm::FPPassManager::runOnFunction(llvm::Function&) /usr/local/google/home/thurston/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1399:23
#22 0x000055cfdfeef042 llvm::FPPassManager::runOnModule(llvm::Module&) /usr/local/google/home/thurston/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1445:16
#23 0x000055cfdfeeaf1b (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /usr/local/google/home/thurston/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1514:23
#24 0x000055cfdfeeaa9a llvm::legacy::PassManagerImpl::run(llvm::Module&) /usr/local/google/home/thurston/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:532:16
#25 0x000055cfdfeef321 llvm::legacy::PassManager::run(llvm::Module&) /usr/local/google/home/thurston/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1641:3
#26 0x000055cfdc38c95a compileModule(char**, llvm::LLVMContext&) /usr/local/google/home/thurston/llvm-project/llvm/tools/llc/llc.cpp:755:9
#27 0x000055cfdc38aa31 main /usr/local/google/home/thurston/llvm-project/llvm/tools/llc/llc.cpp:400:13
#28 0x00007fdff8a06ca8 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#29 0x00007fdff8a06d65 call_init ./csu/../csu/libc-start.c:128:20
#30 0x00007fdff8a06d65 __libc_start_main ./csu/../csu/libc-start.c:347:5
#31 0x000055cfdc38a1e1 _start (bin/llc+0xe901e1)
Aborted (core dumped)
```
## Maybe relevant observation
Older versions of llc (prior to https://github.com/llvm/llvm-project/commit/9c6693f9012dbf59cf9ebabc9097ce3f25f05cb6 ?) don't support the constant vector splat syntax:
```
llc-17: error: llc-17: <stdin>:5:85: error: expected value token
%2 = call <32 x i16> @llvm.x86.avx512.vpermi2var.hi.512(<32 x i16> %0, <32 x i16> splat (i16 1), <32 x i16> zeroinitializer)
```
Perhaps nobody expects the Splat-ish instruction?
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUWltv2zgW_jXMC2FDJHV9yINix90CzU6QdDt9MyiSsrmVSIGknGR-_YKU7MiOu2k77WQGCCyJl8PznRsPeUKtlRslxCVIrkCyvKC922pz6ba9sU4rflFp_nQJMAGYwI_COsioFSAq_V8ajX9RCXAMGXXQCN4zwedNA0FUOmo2wkFOHW3ok-4dBGQJAcZi1gJS6lmHswiQkuDw4z_R8ad_S-PwM5OHF4RzQEqE81mdR-ObCk3pfnoaz-79MIyf-XBGdo3Y8_CYp-s0nvXqi9IPatZI1T_ONqofpoCo5KKWyg9fEAwfofTEryGII7vt67oR610nTLsj6x3BvtMzdTwUJxHABQTZFYhK6L9xWJ1RL58XdJtm184f83ROd48JwvNAX-IdNfOtnCcIf22JxSkx2zXUQYBziVKIAC7OjPlDGC2VdJI28g9h_CDPpBHuBWs4CSLJlqPiyRVc9Yo5qRUsnTMWkBIq7WFVlH2BStdGCKi0fVIMKt2rB6k4fJBNY4TrjYKtaLV5AjhXWolhaS5YQ805eX-_XF7CPddSQIBJNGCizhlZ9U7Y0DgYSXb151DBUWRTR4nKj1sB3d6VYEet9Yumke4cnA2fgCx3wsj6CaTRfBT64IN3ojMaMt22VPGh53fptrBpGKQObgXlXu-IiqKok7yIeRZxhJI4qQlNkyxNE5FQUuUxyXhBvejJOWeuetlwgFeVVACvPHVAFlP3nrWDOwGyPPGk8QlnrRcqIEuArwbN7bzVX8NqbkFUfvjw6QZe3939duetZ0GV0g5a0QjmfINDxD8G3wrq-Jyn7--Xnl1Sfrq9vrv5RKDDXrHOe98C9oqLGpBy9Meo9N0HGgAv2DYQWujuaWV0eyc20AX3uRMbaZ0wh8mDY3l_cCGmvKDRaMoBWQCc-zcvchsMsYC10S1kWllHlZt1WjdByNfjUg7lU159UPPLwNBBSijT-AXa3w3tOmHgxxDHFiPtW096oEAWrwYAcg09oPcK1qPr-tW-Esqi8vbDdXl_DW1ftdJBCqt-A43otHHQabh1rvNOD_AK4NVGum1fzZlug6ns9o9ZZ_R_vTrxSlrbCwvwClLFoVSs6bmAbisgM9RuoXcwZygT3trvnXc33rfdYJveBYpbozeGtpCaTd8K5ULMebbOHzNHEJXIE7_rlZJqE5wRApwdotutb7ihim58hMygVrDVvPe7CM4AWVjHpQrBJPOc43PEPucpXJbvZoBcL8t38L2yzvQD-ftg7l4XA-29agL1r280mTeZEKaixyiKoiRhtYg4ohlFMCggmI19ssPLrZHKBal-9DL2RnsYZOjDWltnBG0BDm4klRti46q3xovXh0CvZq03jQB4tdWtf-yThJfa3tuArABe3fedNxuAV_9R8tE3yI2ijZ1LxQApc-QjEEIjJHQKieMKnvA_EPgXVbzxWsl3WnKAy7-Q6SLywWnPMz7hOadZek4Nd706Yt36feuXML3nlnXehVDkE6dk5JaccFvFlMNTkQYbWEArN1LVeu2CeBfwr5d0HKLi3uDjkfes5nWdU8R4HcEgxZHa6PuTZM53sLnV8xTgq-iR1LyOxlwHYJIcE8xQkTC4XnduawTl6y-yaday7RrhQw4NrjkHeKU65yFPh80Dt17QWToST0-5ZQxDQ6UVgYgNQAFezcPXk-Wi8yGy0zYIIowMZH2oKfdUs2OqURJTBmnlI3Og4_ggitA0H1zMZ8Xj9PxI_YxkVPCJsQ4xfl37lH0tjNHmKFp8fPApcdjdxmhRDRvcL7CHa796MEmpNntTJtnElIsjLJSgrM5_GiMLzcU74UcdovSyfHfy-f5eNCNrcRyTUc4-jh3HZopFjuKJnE-JTFv9ygvdtp7Fiezvl__WXIye2KtwcOOQbanZK-S45yfH8e-WBwneUIzymAZ2LpI4TlPPW06VVk-t7i1UtBW2C_tTMSD-nKfL8t1H_RUZfU06fwrzPvEdQA8ZF8Crz3k6_L4TB5xDhCJZjKNk3A48UnyMlOQFJX8C6S9BeaTZlyA9D3t-RnWmWRJPQJIT846Sqn7VvJd6kvxMcp-fugt-r50iEvw2GYHFx8BQnRavAxvXLBW_bqULy70tJoTwJBYlJ5h4HZFvjEVX1Ep21Wj25cgOZSOtW0snDHXarB_WlfQZ-eJ0BBeOypGg0lysdecXOh46MYpwQjK98M-aNlY8Zx3PHc8zJ9wNR_zDnDB2aPtncj3sq-lbWlGeZhOPT0-NiPJv3dDKpnnGbI8M6XDSes4p3tBt8gLtDyMecnYCmdIKvQrZ9Oo3dUPZViqxR3cE-UXfm2JOw-FgHyny470LxyLHP7R3vbEUvmlLQ3k2ni089JNkEhU5-X_K_iA2lD39LcB-r8pJNtkc8DRR5XVKc44q-FXWb6m1E9Bn0f5ymGd4Ohx1_XExH6Ed5Zy1EDRN6QTa6tbP3N_uvA2o93cArwZbmjBzSE0K72N4ryp8gqeOYvwNeG7CjdWxQY5NfyGWOE6GCs2AhZzqpkbVa5Hm5m8NMEHxVFnxKUBaTI2vmcSPCbH3bfccQd8YURIqaQeNJafW5x3sVUB_FzAojdEk6k2zGc5IzoqEQqbbTjbiYE7-bB3OWuVxAvfhw6ebhVZOPP68jMVp3djhMnv4HfnOkuT5FI2zE7YpJQi2VKpfyEEchRrrXnL5yf1TymgO1-tGVmxtHTVuzWjTrANTc4BXzPYv77jGC7Rzk-Zbj3qSlODidEWeJqGGupZKutNFhldPeRYohyuwoWKMh-oWOVycH1E8wnCO_bOUSZw9nx6Prq-DfpBAcCDpg9uhXhHuIkURIYGGy8iy0saJUEhi2ohQ_RB86DupH46VwBv6VAloRCN2VDmoKyvMLlxRDsN-a7gwcCeM9UcXqOtQIwQ474zU5oeqOEy3rfQvBUvTgtRFhDCv6qRgdSEqWrEiKjImSI2TOkpYlUJAVt49eKhwOGiHy72h8DOWseBOMKfNWLKyT8rRx5c1yaZhM-QlDYdLSVLC56ZpIcbrgpR5cjRUPHaCefHuaNML6PQXof4pJfkT7d8Ks6WdhUpXmj-NyGyQ6L1fYibtFsrJ2ZSsLvgl4QUp6IW4RFmCEUZRSi62l0XNeO07KMMYoUQgHuOYMJ4xmkRFdiEvcYSTKENRFKMsJvOU8xrXLMmimGVxjUEciZbKZh4Epc3mIlT6LlGc5Tm5aGglGhv-uQRjJR5g6AUYg2R5YS6DeVX9xnpJS-vsMxknXSMuAcavlInn8_m5wjDA4djyIN32vKEBXFz0prn88UrmCHF3if8XAAD__2my248">