| Issue |
174000
|
| Summary |
LLVM does not know how to split the result of this operator for SIMD code
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
CompeyDev
|
Unable to compile the following LLVM IR on v21.1.6 and other similar code which relies on heavy SIMD consumption. Generated by `rustc` (21cf7fb3f 2025-12-28), while compiling for a x86)64 UEFI target.
```ll
; ModuleID = 'mwe.bc'
source_filename = "7ywc7ctq996i8hgutsajrixp8"
target datalayout = "e-m:w-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-windows-msvc"
; Function Attrs: noredzone nounwind
define void @_RINvNtNtNtCswfB9pI7SAK_4core9core_arch3x863avx13__mm256_cmp_psKl4_ECsfV5l1QvOCcc_17fast_image_resize(ptr sret([32 x i8]) align 32 %0, ptr align 32 %1, ptr align 32 %2) unnamed_addr #0 {
%4 = load <8 x float>, ptr %1, align 32
%5 = load <8 x float>, ptr %2, align 32
%6 = call <8 x float> @llvm.x86.avx.cmp.ps.256(<8 x float> %4, <8 x float> %5, i8 4)
store <8 x float> %6, ptr %0, align 32
ret void
}
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
declare <8 x float> @llvm.x86.avx.cmp.ps.256(<8 x float>, <8 x float>, i8 immarg) unnamed_addr #1
attributes #0 = { noredzone nounwind "probe-stack"="_RNvCs4ea5sdm7yQ6_7___rustc17___rust_probestack" "target-cpu"="x86-64" "target-features"="-mmx,-aes,-avx,-avx10.1-512,-avx10.2-512,-avx2,-avx512bf16,-avx512bitalg,-avx512bw,-avx512cd,-avx512dq,-avx512f,-avx512fp16,-avx512ifma,-avx512vbmi,-avx512vbmi2,-avx512vl,-avx512vnni,-avx512vp2intersect,-avx512vpopcntdq,-avxifma,-avxneconvert,-avxvnni,-avxvnniint16,-avxvnniint8,-f16c,-fma,-gfni,-kl,-pclmul,-sha,-sha512,-sm3,-sm4,-sse,-sse2,-sse3,-sse4.1,-sse4.2,-sse4a,-ssse3,-vaes,-vpclmulqdq,-widekl,-xop,+soft-float,+avx,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+crc32,+ssse3" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(none) }
```
## Stack Trace
```
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: llc mwe.ll
1. Running pass 'Function Pass Manager' on module 'mwe.ll'.
2. Running pass 'X86 DAG->DAG Instruction Selection' on function '@_RINvNtNtNtCswfB9pI7SAK_4core9core_arch3x863avx13__mm256_cmp_psKl4_ECsfV5l1QvOCcc_17fast_image_resize'
#0 0x00007fe5b23081ed llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /usr/src/debug/llvm/llvm-21.1.6.src/lib/Support/Unix/Signals.inc:834:22
#1 0x00007fe5b23052c7 llvm::sys::RunSignalHandlers() /usr/src/debug/llvm/llvm-21.1.6.src/lib/Support/Signals.cpp:104:20
#2 0x00007fe5b23052c7 SignalHandler /usr/src/debug/llvm/llvm-21.1.6.src/lib/Support/Unix/Signals.inc:409:31
#3 0x00007fe5b123e4d0 (/usr/lib/libc.so.6+0x3e4d0)
#4 0x00007fe5b129890c __pthread_kill_implementation /usr/src/debug/glibc/glibc/nptl/pthread_kill.c:44:76
#5 0x00007fe5b123e3a0 raise /usr/src/debug/glibc/glibc/signal/../sysdeps/posix/raise.c:27:6
#6 0x00007fe5b122557a abort /usr/src/debug/glibc/glibc/stdlib/abort.c:85:3
#7 0x00007fe5b1f3f1be std::mutex::lock() /usr/include/c++/15.2.1/bits/std_mutex.h:119:22
#8 0x00007fe5b1f3f1be std::lock_guard<std::mutex>::lock_guard(std::mutex&) /usr/include/c++/15.2.1/bits/std_mutex.h:252:23
#9 0x00007fe5b1f3f1be llvm::install_bad_alloc_error_handler(void (*)(void*, char const*, bool), void*) /usr/src/debug/llvm/llvm-21.1.6.src/lib/Support/ErrorHandling.cpp:162:61
#10 0x00007fe5b21f837e (/usr/lib/libLLVM.so.21.1+0x7f837e)
#11 0x00007fe5b2f60960 llvm::DAGTypeLegalizer::SplitVectorResult(llvm::SDNode*, unsigned int) /usr/src/debug/llvm/llvm-21.1.6.src/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp:1342:22
#12 0x00007fe5b2ef77f7 llvm::DAGTypeLegalizer::run() /usr/src/debug/llvm/llvm-21.1.6.src/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp:286:14
#13 0x00007fe5b2ef828d llvm::SmallVectorTemplateCommon<llvm::SDNode*, void>::isSmall() const /usr/src/debug/llvm/llvm-21.1.6.src/include/llvm/ADT/SmallVector.h:144:39
#14 0x00007fe5b2ef828d llvm::SmallVectorImpl<llvm::SDNode*>::~SmallVectorImpl() /usr/src/debug/llvm/llvm-21.1.6.src/include/llvm/ADT/SmallVector.h:604:23
#15 0x00007fe5b2ef828d llvm::SmallVector<llvm::SDNode*, 128u>::~SmallVector() /usr/src/debug/llvm/llvm-21.1.6.src/include/llvm/ADT/SmallVector.h:1204:3
#16 0x00007fe5b2ef828d llvm::DAGTypeLegalizer::~DAGTypeLegalizer() /usr/src/debug/llvm/llvm-21.1.6.src/lib/CodeGen/SelectionDAG/LegalizeTypes.h:31:31
#17 0x00007fe5b2ef828d llvm::SelectionDAG::LegalizeTypes() /usr/src/debug/llvm/llvm-21.1.6.src/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp:1060:10
#18 0x00007fe5b30845d6 llvm::TimeRegion::~TimeRegion() /usr/src/debug/llvm/llvm-21.1.6.src/include/llvm/Support/Timer.h:162:9
#19 0x00007fe5b30845d6 llvm::NamedRegionTimer::~NamedRegionTimer() /usr/src/debug/llvm/llvm-21.1.6.src/include/llvm/Support/Timer.h:170:8
#20 0x00007fe5b30845d6 llvm::SelectionDAGISel::CodeGenAndEmitDAG() /usr/src/debug/llvm/llvm-21.1.6.src/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:970:3
#21 0x00007fe5b3087b9a llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) /usr/src/debug/llvm/llvm-21.1.6.src/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1891:33
#22 0x00007fe5b30893e4 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) /usr/src/debug/llvm/llvm-21.1.6.src/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:605:22
#23 0x00007fe5b30772ab llvm::OptLevelChanger::~OptLevelChanger() /usr/src/debug/llvm/llvm-21.1.6.src/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:267:7
#24 0x00007fe5b30772ab llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) /usr/src/debug/llvm/llvm-21.1.6.src/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:373:1
#25 0x00007fe5b30772ab llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) /usr/src/debug/llvm/llvm-21.1.6.src/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:345:6
#26 0x00007fe5b2910db5 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /usr/src/debug/llvm/llvm-21.1.6.src/lib/CodeGen/MachineFunctionPass.cpp:108:30
#27 0x00007fe5b2504f63 llvm::FPPassManager::runOnFunction(llvm::Function&) /usr/src/debug/llvm/llvm-21.1.6.src/lib/IR/LegacyPassManager.cpp:1398:40
#28 0x00007fe5b2505143 llvm::ilist_detail::node_base_prevnext<llvm::ilist_node_base<false, void>, false>::getNext() const /usr/src/debug/llvm/llvm-21.1.6.src/include/llvm/ADT/ilist_node_base.h:28:38
#29 0x00007fe5b2505143 llvm::ilist_node_impl<llvm::ilist_detail::node_options<llvm::Function, false, false, void, false, void>>::getNext() /usr/src/debug/llvm/llvm-21.1.6.src/include/llvm/ADT/ilist_node.h:119:66
#30 0x00007fe5b2505143 llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Function, false, false, void, false, void>, false, false>::operator++() /usr/src/debug/llvm/llvm-21.1.6.src/include/llvm/ADT/ilist_iterator.h:187:25
#31 0x00007fe5b2505143 llvm::FPPassManager::runOnModule(llvm::Module&) /usr/src/debug/llvm/llvm-21.1.6.src/lib/IR/LegacyPassManager.cpp:1443:22
#32 0x00007fe5b2504462 runOnModule /usr/src/debug/llvm/llvm-21.1.6.src/lib/IR/LegacyPassManager.cpp:1513:38
#33 0x00007fe5b2504462 llvm::legacy::PassManagerImpl::run(llvm::Module&) /usr/src/debug/llvm/llvm-21.1.6.src/lib/IR/LegacyPassManager.cpp:531:55
#34 0x0000555c292178f9 compileModule /usr/src/debug/llvm/llvm-21.1.6.src/tools/llc/llc.cpp:761:34
#35 0x0000555c2920c6e1 main /usr/src/debug/llvm/llvm-21.1.6.src/tools/llc/llc.cpp:404:5
#36 0x00007fe5b1227635 __libc_start_call_main /usr/src/debug/glibc/glibc/csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#37 0x00007fe5b12276e9 call_init /usr/src/debug/glibc/glibc/csu/../csu/libc-start.c:128:20
#38 0x00007fe5b12276e9 __libc_start_main /usr/src/debug/glibc/glibc/csu/../csu/libc-start.c:347:5
#39 0x0000555c2920dee5 _start (/usr/bin/llc+0x13ee5)
fish: Job 1, 'llc mwe.ll' terminated by signal SIGABRT (Abort)
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs