[llvm] CodeGen: Add ISD::AssertNoFPClass (PR #135946)

John Brawn via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 29 04:07:43 PDT 2025


john-brawn-arm wrote:

It looks like there's a different failure with the following:
```
target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
target triple = "thumbv7em-unknown-none-eabi"

define dso_local noundef nofpclass(nan inf) half @fn(half noundef returned nofpclass(nan inf) %x) {
entry:
  ret half %x
}
```
`llc -debug` gives
```
Legalizing node: t6: f16 = AssertNoFPClass t4, TargetConstant:i32<519>
Analyzing result type: f16
Soft promote half result 0: t6: f16 = AssertNoFPClass t4, TargetConstant:i32<519>
SoftPromoteHalfResult #0: t6: f16 = AssertNoFPClass t4, TargetConstant:i32<519>

LLVM ERROR: Do not know how to soft promote this operator's result!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /data_nvme1n1/johbra01/llvm-project/build/bin/llc tmp.ll -o - -debug
1.      Running pass 'Function Pass Manager' on module 'tmp.ll'.
2.      Running pass 'ARM Instruction Selection' on function '@fn'
 #0 0x0000598f54474272 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /data_nvme1n1/johbra01/llvm-project/llvm/lib/Support/Unix/Signals.inc:808:3
 #1 0x0000598f54471c0f llvm::sys::RunSignalHandlers() /data_nvme1n1/johbra01/llvm-project/llvm/lib/Support/Signals.cpp:105:20
 #2 0x0000598f54471fa9 SignalHandler(int, siginfo_t*, void*) /data_nvme1n1/johbra01/llvm-project/llvm/lib/Support/Unix/Signals.inc:418:13
 #3 0x000078b0eb845330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
 #4 0x000078b0eb89eb2c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x000078b0eb89eb2c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #6 0x000078b0eb89eb2c pthread_kill ./nptl/pthread_kill.c:89:10
 #7 0x000078b0eb84527e raise ./signal/../sysdeps/posix/raise.c:27:6
 #8 0x000078b0eb8288ff abort ./stdlib/abort.c:81:7
 #9 0x0000598f510b8142 llvm::json::operator==(llvm::json::Array const&, llvm::json::Array const&) /data_nvme1n1/johbra01/llvm-project/llvm/include/llvm/Support/JSON.h:580:58
#10 0x0000598f510b8142 llvm::json::operator==(llvm::json::Value const&, llvm::json::Value const&) (.cold) /data_nvme1n1/johbra01/llvm-project/llvm/lib/Support/JSON.cpp:206:28
#11 0x0000598f543ce185 (/data_nvme1n1/johbra01/llvm-project/build/bin/llc+0x3e3b185)
#12 0x0000598f54342420 llvm::DAGTypeLegalizer::SoftPromoteHalfResult(llvm::SDNode*, unsigned int) /data_nvme1n1/johbra01/llvm-project/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp:32
86:58
#13 0x0000598f542c4fc0 llvm::DAGTypeLegalizer::run() /data_nvme1n1/johbra01/llvm-project/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp:266:14
#14 0x0000598f542c6511 llvm::SmallVectorTemplateCommon<llvm::SDNode*, void>::isSmall() const /data_nvme1n1/johbra01/llvm-project/llvm/include/llvm/ADT/SmallVector.h:143:39
#15 0x0000598f542c6511 llvm::SmallVectorImpl<llvm::SDNode*>::~SmallVectorImpl() /data_nvme1n1/johbra01/llvm-project/llvm/include/llvm/ADT/SmallVector.h:603:23
#16 0x0000598f542c6511 llvm::SmallVector<llvm::SDNode*, 128u>::~SmallVector() /data_nvme1n1/johbra01/llvm-project/llvm/include/llvm/ADT/SmallVector.h:1203:3
#17 0x0000598f542c6511 llvm::DAGTypeLegalizer::~DAGTypeLegalizer() /data_nvme1n1/johbra01/llvm-project/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h:31:31
#18 0x0000598f542c6511 llvm::SelectionDAG::LegalizeTypes() /data_nvme1n1/johbra01/llvm-project/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp:1060:10
#19 0x0000598f54237157 llvm::TimeRegion::~TimeRegion() /data_nvme1n1/johbra01/llvm-project/llvm/include/llvm/Support/Timer.h:160:9
#20 0x0000598f54237157 llvm::NamedRegionTimer::~NamedRegionTimer() /data_nvme1n1/johbra01/llvm-project/llvm/include/llvm/Support/Timer.h:168:8
#21 0x0000598f54237157 llvm::SelectionDAGISel::CodeGenAndEmitDAG() /data_nvme1n1/johbra01/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:980:3
#22 0x0000598f5423bac5 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) /data_nvme1n1/johbra01/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1906:33
#23 0x0000598f5423d17a llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) /data_nvme1n1/johbra01/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:615:22
#24 0x0000598f51d92da8 (anonymous namespace)::ARMDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) /data_nvme1n1/johbra01/llvm-project/llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp:70:3
#25 0x0000598f54232c27 llvm::OptLevelChanger::~OptLevelChanger() /data_nvme1n1/johbra01/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:268:11
#26 0x0000598f54232c27 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) /data_nvme1n1/johbra01/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:375:
1
#27 0x0000598f54232c27 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) /data_nvme1n1/johbra01/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:346:
6
#28 0x0000598f53494a8a llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) /data_nvme1n1/johbra01/llvm-project/llvm/lib/CodeGen/MachineFunctionPass.cpp:108:30
#29 0x0000598f53a5f984 llvm::FPPassManager::runOnFunction(llvm::Function&) /data_nvme1n1/johbra01/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1416:7
#30 0x0000598f53a5fba1 llvm::ilist_detail::node_base_prevnext<llvm::ilist_node_base<true, void>, true>::getNext() const /data_nvme1n1/johbra01/llvm-project/llvm/include/llvm/ADT/ilist_node_
base.h:42:38
#31 0x0000598f53a5fba1 llvm::ilist_node_impl<llvm::ilist_detail::node_options<llvm::Function, true, false, void, false, void>>::getNext() /data_nvme1n1/johbra01/llvm-project/llvm/include/ll
vm/ADT/ilist_node.h:119:66
#32 0x0000598f53a5fba1 llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Function, true, false, void, false, void>, false, false>::operator++() /data_nvme1n1/johbra01/llvm-project
/llvm/include/llvm/ADT/ilist_iterator.h:187:25
#33 0x0000598f53a5fba1 llvm::FPPassManager::runOnModule(llvm::Module&) /data_nvme1n1/johbra01/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1451:22
#34 0x0000598f53a603ed runOnModule /data_nvme1n1/johbra01/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1528:7
#35 0x0000598f53a603ed llvm::legacy::PassManagerImpl::run(llvm::Module&) /data_nvme1n1/johbra01/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:539:55
#36 0x0000598f51203e66 compileModule(char**, llvm::LLVMContext&) /data_nvme1n1/johbra01/llvm-project/llvm/tools/llc/llc.cpp:755:34
#37 0x0000598f510bee77 main /data_nvme1n1/johbra01/llvm-project/llvm/tools/llc/llc.cpp:400:35
#38 0x000078b0eb82a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#39 0x000078b0eb82a28b call_init ./csu/../csu/libc-start.c:128:20
#40 0x000078b0eb82a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#41 0x0000598f511f92e5 _start (/data_nvme1n1/johbra01/llvm-project/build/bin/llc+0xc662e5)
```

https://github.com/llvm/llvm-project/pull/135946


More information about the llvm-commits mailing list