Skip to content

dag combiner for multiple archs crashes out with Assertion failed: (NumBits >= MIN_INT_BITS && "bitwidth too small") #160611

@regehr

Description

@regehr

This appears to be a different bug than a few other open issues that happen to trigger this same assertion.

this valid IR:

define i32 @f() {
  %1 = fptosi half 0xH7E00 to i32
  %2 = call i32 @llvm.smin.i32(i32 0, i32 %1)
  %3 = call i32 @llvm.smax.i32(i32 %2, i32 0)
  ret i32 %3
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #0

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smax.i32(i32, i32) #0

attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

causes llc for aarch64, riscv64, and x86-64 to assert out:

~$ llc -march=x86-64 crash.ll
Assertion failed: (NumBits >= MIN_INT_BITS && "bitwidth too small"), function get, file Type.cpp, line 320.
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: llc -march=x86-64 crash.ll
1.	Running pass 'Function Pass Manager' on module 'crash.ll'.
2.	Running pass 'X86 DAG->DAG Instruction Selection' on function '@f'
 #0 0x000000010af02cd8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/Users/regehr/llvm-project/for-alive/lib/libLLVMSupport.dylib+0x15ecd8)
 #1 0x000000010af00328 llvm::sys::RunSignalHandlers() (/Users/regehr/llvm-project/for-alive/lib/libLLVMSupport.dylib+0x15c328)
 #2 0x000000010af037d0 SignalHandler(int, __siginfo*, void*) (/Users/regehr/llvm-project/for-alive/lib/libLLVMSupport.dylib+0x15f7d0)
 #3 0x0000000185b716a4 (/usr/lib/system/libsystem_platform.dylib+0x1804ad6a4)
 #4 0x0000000185b3788c (/usr/lib/system/libsystem_pthread.dylib+0x18047388c)
 #5 0x0000000185a40a3c (/usr/lib/system/libsystem_c.dylib+0x18037ca3c)
 #6 0x0000000185a3fc70 (/usr/lib/system/libsystem_c.dylib+0x18037bc70)
 #7 0x000000010deacea0 llvm::FunctionType::FunctionType(llvm::Type*, llvm::ArrayRef<llvm::Type*>, bool) (.cold.2) (/Users/regehr/llvm-project/for-alive/lib/libLLVMCore.dylib+0x278ea0)
 #8 0x000000010de55f90 llvm::IntegerType::get(llvm::LLVMContext&, unsigned int) (/Users/regehr/llvm-project/for-alive/lib/libLLVMCore.dylib+0x221f90)
 #9 0x000000010d53d4e4 llvm::EVT::getExtendedIntegerVT(llvm::LLVMContext&, unsigned int) (/Users/regehr/llvm-project/for-alive/lib/libLLVMCodeGen.dylib+0x5794e4)
#10 0x000000010be3b6a8 PerformMinMaxFpToSatCombine(llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::ISD::CondCode, llvm::SelectionDAG&) (/Users/regehr/llvm-project/for-alive/lib/libLLVMSelectionDAG.dylib+0x7b6a8)
#11 0x000000010bdd7ff8 (anonymous namespace)::DAGCombiner::visitIMINMAX(llvm::SDNode*) (/Users/regehr/llvm-project/for-alive/lib/libLLVMSelectionDAG.dylib+0x17ff8)
#12 0x000000010bdc918c (anonymous namespace)::DAGCombiner::combine(llvm::SDNode*) (/Users/regehr/llvm-project/for-alive/lib/libLLVMSelectionDAG.dylib+0x918c)
#13 0x000000010bdc54ac llvm::SelectionDAG::Combine(llvm::CombineLevel, llvm::BatchAAResults*, llvm::CodeGenOptLevel) (/Users/regehr/llvm-project/for-alive/lib/libLLVMSelectionDAG.dylib+0x54ac)
#14 0x000000010c07a098 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/Users/regehr/llvm-project/for-alive/lib/libLLVMSelectionDAG.dylib+0x2ba098)
#15 0x000000010c078e50 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/Users/regehr/llvm-project/for-alive/lib/libLLVMSelectionDAG.dylib+0x2b8e50)
#16 0x000000010c075e30 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/Users/regehr/llvm-project/for-alive/lib/libLLVMSelectionDAG.dylib+0x2b5e30)
#17 0x000000010c0741b0 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (/Users/regehr/llvm-project/for-alive/lib/libLLVMSelectionDAG.dylib+0x2b41b0)
#18 0x000000010d225a00 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/Users/regehr/llvm-project/for-alive/lib/libLLVMCodeGen.dylib+0x261a00)
#19 0x000000010ddedc48 llvm::FPPassManager::runOnFunction(llvm::Function&) (/Users/regehr/llvm-project/for-alive/lib/libLLVMCore.dylib+0x1b9c48)
#20 0x000000010ddf54f4 llvm::FPPassManager::runOnModule(llvm::Module&) (/Users/regehr/llvm-project/for-alive/lib/libLLVMCore.dylib+0x1c14f4)
#21 0x000000010ddee57c llvm::legacy::PassManagerImpl::run(llvm::Module&) (/Users/regehr/llvm-project/for-alive/lib/libLLVMCore.dylib+0x1ba57c)
#22 0x0000000102980b98 compileModule(char**, llvm::LLVMContext&) (/Users/regehr/llvm-project/for-alive/bin/llc+0x10001cb98)
#23 0x000000010297ec0c main (/Users/regehr/llvm-project/for-alive/bin/llc+0x10001ac0c)
#24 0x0000000185796b98
zsh: abort      llc -march=x86-64 crash.ll
~$ 

cc @MitchBriles

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions