<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/126085>126085</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[VectorCombine] Assertion `I >= 0 && I < (NumOpElts * 2) && "Out-of-bounds shuffle mask element"' failed.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
crash-on-valid,
llvm:transforms
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
dtcxzyw
</td>
</tr>
</table>
<pre>
Reproducer:
```
; bin/opt -passes=vector-combine 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 @test(ptr readonly captures(none) dereferenceable(16) %0) {
%2 = load <16 x i8>, ptr %0, align 1
%.sroa.01.2.vec.insert = shufflevector <16 x i8> %2, <16 x i8> poison, <4 x i32> <i32 0, i32 poison, i32 poison, i32 poison>
%3 = extractelement <16 x i8> %2, i64 11
%.sroa.01.3.vec.insert = insertelement <4 x i8> %.sroa.01.2.vec.insert, i8 %3, i64 1
%4 = bitcast <4 x i8> %.sroa.01.3.vec.insert to i32
ret i32 %4
}
```
```
opt: /home/dtcxzyw/WorkSpace/Projects/compilers/llvm-project/llvm/lib/IR/Instructions.cpp:1890: bool isSingleSourceMaskImpl(llvm::ArrayRef<int>, int): Assertion `I >= 0 && I < (NumOpElts * 2) && "Out-of-bounds shuffle mask element"' 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=vector-combine reduced.ll -S
1. Running pass "function(vector-combine)" on module "reduced.ll"
2. Running pass "vector-combine" on function "test"
#0 0x00007f4379a17152 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMSupport.so.21.0git+0x217152)
#1 0x00007f4379a1403f llvm::sys::RunSignalHandlers() (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMSupport.so.21.0git+0x21403f)
#2 0x00007f4379a1417c SignalHandler(int) Signals.cpp:0:0
#3 0x00007f4379442520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007f43794969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x00007f43794969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#6 0x00007f43794969fc pthread_kill ./nptl/pthread_kill.c:89:10
#7 0x00007f4379442476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
#8 0x00007f43794287f3 abort ./stdlib/abort.c:81:7
#9 0x00007f437942871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x00007f4379439e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#11 0x00007f4370e71a16 isSingleSourceMaskImpl(llvm::ArrayRef<int>, int) Instructions.cpp:0:0
#12 0x00007f4370e7c3dc llvm::ShuffleVectorInst::isReverseMask(llvm::ArrayRef<int>, int) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.21.0git+0x27c3dc)
#13 0x00007f43788933f2 llvm::X86TTIImpl::getShuffleCost(llvm::TargetTransformInfo::ShuffleKind, llvm::VectorType*, llvm::ArrayRef<int>, llvm::TargetTransformInfo::TargetCostKind, int, llvm::VectorType*, llvm::ArrayRef<llvm::Value const*>, llvm::Instruction const*) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMX86CodeGen.so.21.0git+0x4933f2)
#14 0x00007f43716ddf0c llvm::TargetTransformInfo::getShuffleCost(llvm::TargetTransformInfo::ShuffleKind, llvm::VectorType*, llvm::ArrayRef<int>, llvm::TargetTransformInfo::TargetCostKind, int, llvm::VectorType*, llvm::ArrayRef<llvm::Value const*>, llvm::Instruction const*) const (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMAnalysis.so.21.0git+0x4ddf0c)
#15 0x00007f437224f6e7 (anonymous namespace)::VectorCombine::foldInsExtVectorToShuffle(llvm::Instruction&) VectorCombine.cpp:0:0
#16 0x00007f4372256116 (anonymous namespace)::VectorCombine::run()::'lambda'(llvm::Instruction&)::operator()(llvm::Instruction&) const VectorCombine.cpp:0:0
#17 0x00007f437225787f llvm::VectorCombinePass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMVectorize.so.21.0git+0x25787f)
#18 0x00007f4373f225c5 llvm::detail::PassModel<llvm::Function, llvm::VectorCombinePass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMPasses.so.21.0git+0x1225c5)
#19 0x00007f4370f10cad 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.21.0git+0x310cad)
#20 0x00007f43784dc235 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.21.0git+0xdc235)
#21 0x00007f4370f0ee75 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.21.0git+0x30ee75)
#22 0x00007f43784dcbf5 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.21.0git+0xdcbf5)
#23 0x00007f4370f0fb2a 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.21.0git+0x30fb2a)
#24 0x00007f4379ba3dc6 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.21.0git+0x2fdc6)
#25 0x00007f4379baf5c2 optMain (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMOptDriver.so.21.0git+0x3b5c2)
#26 0x00007f4379429d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#27 0x00007f4379429e40 call_init ./csu/../csu/libc-start.c:128:20
#28 0x00007f4379429e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#29 0x00006293bc5a5095 _start (bin/opt+0x1095)
Aborted (core dumped)
```
Triggered by https://github.com/llvm/llvm-project/pull/121216. cc @ParkHanbum @RKSimon
Reported by https://github.com/dtcxzyw/llvm-opt-benchmark/issues/2093
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWl9z4ygS_zTkhbILob9-yIMmiW-ndnKTilN7--ZCCNlcEKgAZeP99FeAHEu2k01ma3f27nYqYyMEv-7-ddP8MzGGbyRjlyD9BNLrC9LbrdKXtaXPv-5-uahUvbu8Z51WdU-ZBnEJUAkyNPyhEsSfYMUlwEvVWTjriDHMgPj6iVGr9IyqtuKSQc1c_3ouBJytACot0RtmYU0sEWSnegtBfA0BxmzWgrhksw7nCMRljP2He4ymj66UJf5jxl8KES5AXEa4mDUFGkrSV2X77lkyW7lmGB_0sJp3gu11eC6ydZbMevko1S9yJrjsn2cb2YcuAJU1a5xRPMYQJMgyYwEuOquhZqRWUuwgJZ3tNTMAF1JJBvAC1kyzhmkmKSOVYAAXUebqAU6R_84_AVRC94y9JkKRGoL4KsrgM-QFiG8AvoJOTOhyBYngGwmjfbe50YrMUTTH8ydG51wapgOxZts3jWDBKVNML8-BTWs7xY2SQ33iqh15N-7Jme3Fu8Kh3atP8c1ewdgrw56tJtQywVom7Sva8CyB0all8bFloTjCSsZQZxnx8IXX50XSXlDiQStuKTFvwE3UsMqT4xA0syEqcJq4UMmvj4fLqKw6C-ISArzcqpYBvBwGHcDLfyn9uOoIdbV3Wv2bUWsAXlLVdlww7cpCPLWzLrwbHt0XrwBefr53H9JY3VPLlTRz2nVuEBQLNyhgpZSA3Ky43Ai2Ur2m7JaYx89tJwAuPFRcgrgstSa7e9Y4p0s7BKAr4YWDKY2znysJQYY-Q_c-voYIApwBnEFXcwUBLv7Zt1-7G2ENBLiEOAS9bwIw_trbmWpmleplbfaBCltiHuHgVTfscA4bwgWr5wCVd19uytUNNH3VcgsJrPoN1KxTwRdbazvj9MdLgJcbbrd9NaeqHZE0pY4b07uRuoRE1pBLKvqaQbtlkGpitrAi9NFFLHOyV5bQR1j3bRdyIZpD_-9Oq40mLSR60zuljef544kxGvDueym53EDXz9HU9NK7EuBiiuB8gTFUEraq7l0Sw_gAGlIWfgX0GMnD7CW5BiG1-dgGOEYQPSOEUN4kcb4gUR6lGB6ixexMKNxpLq0n6kH7GB6FlCa_rJWxmpHWx8A-nlycfONI-PLlp9u9V6ueixrgZWB-Pn8ZEoJXrt2q71yczI2a42iONtwC_Ak9Y2-LozJYGh1ZmqC4OWfpfS9XfCOJ-IHIOqhT_AWMceoejMHHxkQ5hRO1AS4GL4Tqfb5A_n9AiScoSYJTjAY7g1LDrDmaLd0L6rTLvF6-y0GtZAq4yBYNhet1Z7duFl0_ciHWvO1CDiA-Ih0DsrMC4OW42ZyCuEzcEiDPBvD0PeDSMi2JeBM294uHPQnZOdhxnzexisUYKz8mNMkzuDHeAR4mFPeeNztTs86FSKcMfwZ4qQk3zAPj3K1rBtxiiouLvIkhqVx29Di2Dv7yVUEvt7TKh-6Lk-5RBddSrN1yZF2rlvDgCC69la66NRtKAlYU5U4Z52Q3jqYpI4kXbJF9LGp8lxA1DnAyMhHLIxJlv3Mqg2dmyn3kO5H4SCSNazpKBqswZf3kc6mDCtXc3LMnpo1X592q_MGJ4zSHXCnNThKIN_HA-WToF8Uijptx3v-5yB4ePnvG_fOG2YGTK-VXxoemD365_aCJNI3S7WfZqAmJP3JZOzYOPQKtD7uOAVxOX53l8R2ywgun216cJ__jUkftiegZpMp5H5cnqowC7NDoe3j75yK7UjX7B5PHPk-8Vw8-n2TnKKvrBtH3kPu389_rfF_-80OglETsDDcnAeBdfAiAyQyKcdJkLHfaEqnkrlW9gZK0zAQdF2PmroblpK9qlKg_S3PzbAda1eDtSWiMOPKrwgWcQJ1JytlUvTSLouwb1NO9DEu28AhwLkhb1QTg_G0FQ7XqmCZW6QHjbZOCw3_LsPzIsLzIm5PgHLrfEWPGdhyaLV-2C9lRBA_uvyWSbJieBPJLJxfC2XdJUME8_uvpnOSJOITnZJUTNxinNB2ZWTNL-DAfOZZuVc3EeWPPjP0xvd_Envv7X3LLnd-9Hvsk8qwffDJZOqImQpTUIxu9H96y72-qX1mQxZ7KF6LxZFVdJDV1G57fH_x_mIP-duybay_vv4N3p1ucBjGWj7176495HtTeJOe1siadm4bOEhY6fIiuoctfbBR4Jg484eNRUDUfGwV7Yq7eye430PdaEP83-uStAK6akWPiowBuKkzekWbOueP_j-Xzke8oPBA8PTqrSFzTbGSf7n3Y3vGOCX-uO6JkZTWXG7eFORP2J0yF3dItoVuPU557-4VXmuid22KFU5fjVkqJr73tervk4gzI73r9ijln92meE9FvuDydkw7tja2HncvLlHH1pHgNJzQ6rE_OqUzv9wOnM53q7NoqNeSgYMXpJnfa6iemecOZ3rer3JsPf_9ZJ9BfO3ut-RPTJ8v1pqaHUzucHgVsk1IMVWdvCZffW9W4Sunh4AMfHfHiRb1AcL0WvKJrY4m2a0qEWL8cg1LTnx7RDifA5zrNtyAu0-FKOojMj0WyBEHfgUtuj6WEooOeeehw7OrvvfGwicTHZ8AecWLEOf3PIse52-umA_B-iZ_hRVzRlKRokcIA6fz4cuEV9gdoMcwKZaW0ZX4MUaWZvz9j-wXt-HoUlQ-abzZMsxpWu4_f5XW9cMRHOMJRNoeUQpCgO6IffyCy6lv3dP_jirdKQoDKe39p-JuiDjHppanOziom6bYl-nF8f4jRIg5GXNSXcb2IF-SCXUZ5XBRplsb4YnvJaJ6kecJilkdpjeImIkUV501B0qiIcnbBLzHCKcIoi9IER3hOsqyKCV0kaZFUNVqABLGWcDF3usyV3lx4-ZcRzlCRXghSMWH8rzkw9veXMyVnT0Tw2t-jXgGMh9xj96djxr1Jry_05TCSNgYkSHBjzUGK5Vb4X4lMT1HS6-9zDXzRa3H57Ve9A1tPl_g_AQAA__8COKV9">