[llvm] [DAG] Recognise AVGFLOOR (((A >> 1) + (B >> 1)) + (A & B & 1)) patterns (PR #169644)
Michał Górny via llvm-commits
llvm-commits at lists.llvm.org
Sat Dec 13 10:10:09 PST 2025
mgorny wrote:
This change is also causing crashes on 32-bit x86:
```
FAIL: LLVM :: CodeGen/X86/2009-03-23-MultiUseSched.ll (26976 of 62615)
******************** TEST 'LLVM :: CodeGen/X86/2009-03-23-MultiUseSched.ll' FAILED ********************
Exit Code: 2
Command Output (stdout):
--
# RUN: at line 3
/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/llc < /var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm/test/CodeGen/X86/2009-03-23-MultiUseSched.ll -mtriple=x86_64-linux -mcpu=corei7 -relocation-model=static | /var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/FileCheck /var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm/test/CodeGen/X86/2009-03-23-MultiUseSched.ll
# executed command: /var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/llc -mtriple=x86_64-linux -mcpu=corei7 -relocation-model=static
# .---command stderr------------
# | terminate called after throwing an instance of 'std::bad_alloc'
# | what(): std::bad_alloc
# | PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and instructions to reproduce the bug.
# | Stack dump:
# | 0. Program arguments: /var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/llc -mtriple=x86_64-linux -mcpu=corei7 -relocation-model=static
# | 1. Running pass 'Function Pass Manager' on module '<stdin>'.
# | 2. Running pass 'X86 DAG->DAG Instruction Selection' on function '@foo'
# | #0 0xfffffffff22c2780 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/../lib/libLLVM.so.22.0git804e768b+0xe4d780)
# | #1 0xfffffffff22c2cff PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
# | #2 0xfffffffff22bf358 llvm::sys::RunSignalHandlers() (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/../lib/libLLVM.so.22.0git804e768b+0xe4a358)
# | #3 0xfffffffff22bf4e6 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
# | #4 0xfffffffff7f4d5a0 (linux-gate.so.1+0x5a0)
# | #5 0xfffffffff7f4d579 (linux-gate.so.1+0x579)
# | #6 0xfffffffff1014b97 (/usr/lib/libc.so.6+0x94b97)
# | #7 0xfffffffff0fb9081 raise (/usr/lib/libc.so.6+0x39081)
# | #8 0xfffffffff0f9fdd9 abort (/usr/lib/libc.so.6+0x1fdd9)
# | #9 0xfffffffff1264fe2 (/usr/lib/gcc/x86_64-pc-linux-gnu/15/32/libstdc++.so.6+0x7dfe2)
# | #10 0xfffffffff12801ad (/usr/lib/gcc/x86_64-pc-linux-gnu/15/32/libstdc++.so.6+0x991ad)
# | #11 0xfffffffff12648e2 std::unexpected() (/usr/lib/gcc/x86_64-pc-linux-gnu/15/32/libstdc++.so.6+0x7d8e2)
# | #12 0xfffffffff12804ee (/usr/lib/gcc/x86_64-pc-linux-gnu/15/32/libstdc++.so.6+0x994ee)
# | #13 0xfffffffff195ff0d LLVMInstallFatalErrorHandler.cold ErrorHandling.cpp:0:0
# | #14 0xfffffffff221d212 llvm::SmallVectorBase<unsigned int>::grow_pod(void*, unsigned int, unsigned int) (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/../lib/libLLVM.so.22.0git804e768b+0xda8212)
# | #15 0xfffffffff2d9d107 llvm::SmallVectorTemplateBase<llvm::SDValue, true>::push_back(llvm::SDValue) (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/../lib/libLLVM.so.22.0git804e768b+0x1928107)
# | #16 0xfffffffff2dcda82 llvm::SDPatternMatch::ReassociatableOpc_match<llvm::SDPatternMatch::BinaryOpc_match<llvm::SDPatternMatch::Value_bind, llvm::SDPatternMatch::Ones_match, false, false>, llvm::SDPatternMatch::BinaryOpc_match<llvm::SDPatternMatch::Value_bind, llvm::SDPatternMatch::Ones_match, false, false>, llvm::SDPatternMatch::ReassociatableOpc_match<llvm::SDPatternMatch::DeferredValue_match, llvm::SDPatternMatch::DeferredValue_match, llvm::SDPatternMatch::Ones_match>>::collectLeaves(llvm::SDValue, llvm::SmallVector<llvm::SDValue, 6u>&) (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/../lib/libLLVM.so.22.0git804e768b+0x1958a82)
# | #17 0xfffffffff2dcd833 llvm::SDPatternMatch::ReassociatableOpc_match<llvm::SDPatternMatch::BinaryOpc_match<llvm::SDPatternMatch::Value_bind, llvm::SDPatternMatch::Ones_match, false, false>, llvm::SDPatternMatch::BinaryOpc_match<llvm::SDPatternMatch::Value_bind, llvm::SDPatternMatch::Ones_match, false, false>, llvm::SDPatternMatch::ReassociatableOpc_match<llvm::SDPatternMatch::DeferredValue_match, llvm::SDPatternMatch::DeferredValue_match, llvm::SDPatternMatch::Ones_match>>::collectLeaves(llvm::SDValue, llvm::SmallVector<llvm::SDValue, 6u>&) (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/../lib/libLLVM.so.22.0git804e768b+0x1958833)
# | #18 0xfffffffff2dcd833 llvm::SDPatternMatch::ReassociatableOpc_match<llvm::SDPatternMatch::BinaryOpc_match<llvm::SDPatternMatch::Value_bind, llvm::SDPatternMatch::Ones_match, false, false>, llvm::SDPatternMatch::BinaryOpc_match<llvm::SDPatternMatch::Value_bind, llvm::SDPatternMatch::Ones_match, false, false>, llvm::SDPatternMatch::ReassociatableOpc_match<llvm::SDPatternMatch::DeferredValue_match, llvm::SDPatternMatch::DeferredValue_match, llvm::SDPatternMatch::Ones_match>>::collectLeaves(llvm::SDValue, llvm::SmallVector<llvm::SDValue, 6u>&) (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/../lib/libLLVM.so.22.0git804e768b+0x1958833)
# | #19 0xfffffffff2dcd833 llvm::SDPatternMatch::ReassociatableOpc_match<llvm::SDPatternMatch::BinaryOpc_match<llvm::SDPatternMatch::Value_bind, llvm::SDPatternMatch::Ones_match, false, false>, llvm::SDPatternMatch::BinaryOpc_match<llvm::SDPatternMatch::Value_bind, llvm::SDPatternMatch::Ones_match, false, false>, llvm::SDPatternMatch::ReassociatableOpc_match<llvm::SDPatternMatch::DeferredValue_match, llvm::SDPatternMatch::DeferredValue_match, llvm::SDPatternMatch::Ones_match>>::collectLeaves(llvm::SDValue, llvm::SmallVector<llvm::SDValue, 6u>&) (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/../lib/libLLVM.so.22.0git804e768b+0x1958833)
# | #20 0xfffffffff2e58f9e bool llvm::SDPatternMatch::sd_context_match<llvm::SDPatternMatch::ReassociatableOpc_match<llvm::SDPatternMat
ch::BinaryOpc_match<llvm::SDPatternMatch::Value_bind, llvm::SDPatternMatch::Ones_match, false, false>, llvm::SDPatternMatch::BinaryOpc_
match<llvm::SDPatternMatch::Value_bind, llvm::SDPatternMatch::Ones_match, false, false>, llvm::SDPatternMatch::ReassociatableOpc_match<
llvm::SDPatternMatch::DeferredValue_match, llvm::SDPatternMatch::DeferredValue_match, llvm::SDPatternMatch::Ones_match>>&, llvm::SDPatt
ernMatch::BasicMatchContext>(llvm::SDNode*, llvm::SDPatternMatch::BasicMatchContext const&, llvm::SDPatternMatch::ReassociatableOpc_mat
ch<llvm::SDPatternMatch::BinaryOpc_match<llvm::SDPatternMatch::Value_bind, llvm::SDPatternMatch::Ones_match, false, false>, llvm::SDPat
ternMatch::BinaryOpc_match<llvm::SDPatternMatch::Value_bind, llvm::SDPatternMatch::Ones_match, false, false>, llvm::SDPatternMatch::Rea
ssociatableOpc_match<llvm::SDPatternMatch::DeferredValue_match, llvm::SDPatternMatch::DeferredValue_match, llvm::SDPatternMatch::Ones_match>>&) (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/../lib/libLLVM.so.22.0git804e768b+0x19e3f9e)
# | #21 0xfffffffff2e59ca6 (anonymous namespace)::DAGCombiner::visitADD(llvm::SDNode*) DAGCombiner.cpp:0:0
# | #22 0xfffffffff2e5b2d1 .L54765 DAGCombiner.cpp:0:0
# | #23 0xfffffffff2e5d4a3 (anonymous namespace)::DAGCombiner::combine(llvm::SDNode*) DAGCombiner.cpp:0:0
# | #24 0xfffffffff2e5f410 llvm::SelectionDAG::Combine(llvm::CombineLevel, llvm::BatchAAResults*, llvm::CodeGenOptLevel) (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/../lib/libLLVM.so.22.0git804e768b+0x19ea410)
# | #25 0xfffffffff30d2b5e llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/../lib/libLLVM.so.22.0git804e768b+0x1c5db5e)
# | #26 0xfffffffff30d739e llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/../lib/libLLVM.so.22.0git804e768b+0x1c6239e)
# | #27 0xfffffffff30d9157 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/../lib/libLLVM.so.22.0git804e768b+0x1c64157)
# | #28 0xfffffffff560b826 (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) X86ISelDAGToDAG.cpp:0:0
# | #29 0xfffffffff30c02ab llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/../lib/libLLVM.so.22.0git804e768b+0x1c4b2ab)
# | #30 0xfffffffff29124cb llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/../lib/libLLVM.so.22.0git804e768b+0x149d4cb)
# | #31 0xfffffffff24c4895 llvm::FPPassManager::runOnFunction(llvm::Function&) (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/../lib/libLLVM.so.22.0git804e768b+0x104f895)
# | #32 0xfffffffff24c4a86 llvm::FPPassManager::runOnModule(llvm::Module&) (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/../lib/libLLVM.so.22.0git804e768b+0x104fa86)
# | #33 0xfffffffff24c53ae llvm::legacy::PassManagerImpl::run(llvm::Module&) (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/../lib/libLLVM.so.22.0git804e768b+0x10503ae)
# | #34 0x565c27a4 main (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/llc+0x157a4)
# | #35 0xfffffffff0fa2043 (/usr/lib/libc.so.6+0x22043)
# | #36 0xfffffffff0fa2108 __libc_start_main (/usr/lib/libc.so.6+0x22108)
# | #37 0x565c33b7 _start (/var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/llc+0x163b7)
# `-----------------------------
# error: command failed with exit status: -6
# executed command: /var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/FileCheck /var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm/test/CodeGen/X86/2009-03-23-MultiUseSched.ll
# .---command stderr------------
# | FileCheck error: '<stdin>' is empty.
# | FileCheck command line: /var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm_build-abi_x86_32.x86/bin/FileCheck /var/tmp/portage/llvm-core/llvm-22.0.0.9999/work/llvm/test/CodeGen/X86/2009-03-23-MultiUseSched.ll
# `-----------------------------
# error: command failed with exit status: 2
--
********************
```
https://github.com/llvm/llvm-project/pull/169644
More information about the llvm-commits
mailing list