<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/55997>55997</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AArch64] float -> bfloat16 conversion crashes backend when using SelectionDAG
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Benjins
</td>
</tr>
</table>
<pre>
Compiling the following C++ code with -O1 (O1 just to force it not to use GlobalIsel) crashes the backend (Godbolt link: https://godbolt.org/z/rMv7coqac )
```cpp
#include <arm_neon.h>
bfloat16_t do_stuff(float x) { return (bfloat16_t)x; }
```
Minimal IR Repro (Godbolt Link: https://godbolt.org/z/qP71fPsqr )
```llvm
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
target triple = "aarch64-none-none"
; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn uwtable
define dso_local noundef bfloat @do_stuff(float noundef %0) local_unnamed_addr #0 {
%2 = fptrunc float %0 to bfloat
ret bfloat %2
}
```
This crash only seems to happen when using SelectionDAG: using GlobalIsel does not crash, and correctly emits the `fcvt` instruction.
Error output:
```console
LLVM ERROR: Cannot select: 0x55cdc6c7f728: bf16 = fp_round 0x55cdc6c7f658, TargetConstant:i64<0>
0x55cdc6c7f658: f32,ch = CopyFromReg 0x55cdc6c09398, Register:f32 %0
0x55cdc6c7f5f0: f32 = Register %0
0x55cdc6c7f6c0: i64 = TargetConstant<0>
In function: do_stuff
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /opt/compiler-explorer/clang-trunk/bin/llc -o /app/output.s -x86-asm-syntax=intel -O1 <source>
1. Running pass 'Function Pass Manager' on module '<source>'.
2. Running pass 'AArch64 Instruction Selection' on function '@do_stuff'
#0 0x000055cdc161246f PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
#1 0x000055cdc160fd0c SignalHandler(int) Signals.cpp:0:0
#2 0x00007f53aa3ac3c0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x143c0)
#3 0x00007f53a9e7903b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4303b)
#4 0x00007f53a9e58859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
#5 0x000055cdc155625d llvm::report_fatal_error(llvm::Twine const&, bool) (/opt/compiler-explorer/clang-trunk/bin/llc+0x2d5625d)
#6 0x000055cdc1413fc6 llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/opt/compiler-explorer/clang-trunk/bin/llc+0x2c13fc6)
#7 0x000055cdc1416fb2 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/opt/compiler-explorer/clang-trunk/bin/llc+0x2c16fb2)
#8 0x000055cdbf3c1857 (anonymous namespace)::AArch64DAGToDAGISel::Select(llvm::SDNode*) AArch64ISelDAGToDAG.cpp:0:0
#9 0x000055cdc1412b24 llvm::SelectionDAGISel::DoInstructionSelection() (/opt/compiler-explorer/clang-trunk/bin/llc+0x2c12b24)
#10 0x000055cdc141a786 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/opt/compiler-explorer/clang-trunk/bin/llc+0x2c1a786)
#11 0x000055cdc141de0b llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/opt/compiler-explorer/clang-trunk/bin/llc+0x2c1de0b)
#12 0x000055cdc141ffff llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (.part.945) SelectionDAGISel.cpp:0:0
#13 0x000055cdc09efc98 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-trunk/bin/llc+0x21efc98)
#14 0x000055cdc0e4bbd9 llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-trunk/bin/llc+0x264bbd9)
#15 0x000055cdc0e4be71 llvm::FPPassManager::runOnModule(llvm::Module&) (/opt/compiler-explorer/clang-trunk/bin/llc+0x264be71)
#16 0x000055cdc0e4c917 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-trunk/bin/llc+0x264c917)
#17 0x000055cdbf1ce6c5 compileModule(char**, llvm::LLVMContext&) llc.cpp:0:0
#18 0x000055cdbf1106a6 main (/opt/compiler-explorer/clang-trunk/bin/llc+0x9106a6)
#19 0x00007f53a9e5a0b3 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x240b3)
#20 0x000055cdbf1c5b8a _start (/opt/compiler-explorer/clang-trunk/bin/llc+0x9c5b8a)
Compiler returned: 139
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9WFtzozgW_jXkRWUXCHN78IPjJD2p6kynktRUzZNLCGHTDRIticTZX7_nCGyDO72dnfSuy8agy3e-c5VErorXpedfef5qrZq2qiu5JXYnSKnqWr3g09qjl_AlXBWCvFR2R2ZfAuLRFK5fO2OJVTBac0EqS6Ryz50R5FOtclbfGlF7NCNcM7MTxmHnjH8TskCMT6rIVW0JyP3mhSuys7Y1cOPRG_hu-9650lt4-hf89N1zwtV3xmFy1vP2Yr__8rYdWmhYSV53wNcL10w3GymUnO-88LofkJe1YjaIN5YUamNsV5bAxTWSPbL1kkuihe20RJKn4dC398JL6L86Ez48uutdJauG1eT2gTyIVquxop_fqej3-yQo7813_Yaidf3c9E2W6a0AJZhlNXtVnQWFr2AGFbMGwMWsSuEPfyGdVUEMN-6CT_ECbuIFNFMcANeZDGnf9ohtlE6EWF21tTgIYEzzHYyUSgp3OQ4frmClm05yWylJVtZqVJY0EC9gkK0WxkCslFoI-NOCd9rgnXmVHP46CZFXgAdYgdAQdXU9uKN7sSyvRS-kEGUF3YVRm1pxsDhOhUbSe4x4C_8H_x6GeDTy0dVu4qaTkjWi2LCiQIuHPoZAL4TgUOr0LlurQScyoAMCBnsv7DAYeB7Fw7zBGv8xXp52lekThChZvxIjRGMQecfaVkjysoNLZzAZH0UtnE2vVp_QoH3rKdUgnoVxWejwPLomDCzJlQYjW8AWTWX7LAQSJX-28EcqaUAxhzsnY2bXWitNIK7azmKwniWckkYdfPH581935Prh4csD8loziSSMo4sN_j6KeMFjnpSJizcwUhAPVt1odMp4TBylyP3Jhd4a5FgmEcdF7do_ZjI5nwTAJUQxXfOdA1-r9vVGq-ZBbE9D_SzMHD60VsYKDdNgVh8TA-4EOSr9AdmBHqZNJoyJcDccyLrh51qM-N9KUg5ZgjOO0eo67z9frx6vielycBphJO-2EF6t0q7GnlUQKMxdPueqgQdXIPq_GaTbV_QBvamM6YSBGxcShwqJodDHHpZlqxkX8178o4UGUnRNe3S9D13ZPSYwawho1TVCWpfZAKtalMLdMiL0TOzbGlJbY1vN5HaGufMNnvJKOnKczLA03kCQ42wXZHNDZvs0njHTzKAYWAbl9qqSFiLbrTrh2qgO1pqjAQNk9ADpi3nQMigrHk2OheceG-6YZFvkkUB6kUYVHZYxmkzAaDJoTd8CXK1ctSO3p0Q5peIAfPCjgx4XnmSIEFdW_L0PHxcpQRzQRVySew0KOmM_ofUfq61k9R_goxpJp8-qKjy6wlrVd5k5rnThyne_I3YwxfbLwufkHAwk_RKIDkAQ9iFjIeMh98lmAzXbgj83Ggtbih6scriCtzawDsAC3u1nW9n1Ha3dYfWeGzWHKnvp74MFoByXMhQTjsVkIsn8MCeaVUa8A58jcuyQFyFMnCAvpshRmkYZYbl6F_MRMqUwcYIcTWwcRTGNCuKyDTIkXPXJuSlxOd4IrJ0g79T99IKrFVZNcEKM9SdXyu2Oelr_dQL1LAtHY8IznvBcBGHJ4xHP8SpyCw99a1-z_xa2755Qf7z6E7Z_Qxh-iC13ZCZskzO2cZnTX7LtW9fACjauDWbh23TXpJMGwl3AKrhj-mD-ac-QFh9UDHlPFEtHiuVlyIM0SlAIg13Na6M6WKlh12FayHqc56gPpQZ0fVJvKPxzrwwTccJh8tv5nZ2Zm-Z08UtzX6lR7RuVvvQ32A0JnHa5UMn8M4YsSd8RvmCKT0KuZHENyyXuj34LOZQ9IReckSuEn78zWld1fclMxS9h0_nNTFx5XLJO5eHD1JHZhDo9o17C55fUAf2LvGN8B8XrwHJC_Ye-A_d5y7SdZ4vILTln4D_GJjIMxwz9TJQ8S8lPReHyPiL5Jrsfaf1zkwaOz8SkiwlhscjzIhsRvrlHjocdyP-RauyYTKhG51RFEryD6p3bME09PjT9FprAYkIzPqPJsyAZ0azFlvHX_n5E-LZpT_H6PyOLXCZkk0mFD7iIeUQG4KPhcN1xRdotOidmeGSCU4EV-0PCg6i382K6kgSBH7OYNKySH9IoczgThbKzvRPz8xA2f7gxgv0s5PNmJPW9-6gFgIylUP_MbFGeMtLjf0whh3QUtR6mD-9yRIEnlSA8f59yUSzDAo6E7MJWthZLL7ocFlMvuhoO-zM4JJDDiyAs0s9CG1evhxdbh5daPzmsX3S6Xv7zI1sUZVlysVuWrIiKME-TXPCUpX5WZHA4TfPUL0XAeXBRs1zUBlUA7hfVkvqU-nDQCOIo9JP5gsd5xGiQsZTHRSrgoCLAofUcBePrpwu9dBzgrGmgs4Zzrjl1Qr7hhkkc8Flnd0ovL4X8Wklz4eguHdd_A_TiMJ8">