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

Reply via email to