<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/100846>100846</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[RISCV] build_vector crash with Zvfbfmin without Zbfmin
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:RISC-V
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
topperc
</td>
</tr>
</table>
<pre>
This test crashes with -mattr=+zvfbfmin
```
define <4 x bfloat> @foo() {
ret <4 x bfloat> <bfloat 1.0, bfloat 2.0, bfloat 3.0, bfloat 4.0>
}
```
```
SoftPromoteHalfOperand Op #0: t5: v4bf16 = BUILD_VECTOR ConstantFP:bf16<APFloat(16256)>, ConstantFP:bf16<APFloat(16384)>, ConstantFP:bf16<APFloat(16448)>, ConstantFP:bf16<APFloat(16512)>
LLVM ERROR: Do not know how to soft promote this operator's operand!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: ./bin/llc test.ll -mattr=+zvfbfmin -mtriple=riscv64
1. Running pass 'Function Pass Manager' on module 'test.ll'.
2. Running pass 'RISC-V DAG->DAG Pattern Instruction Selection' on function '@foo'
#0 0x0000558ca69f7dd8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (./bin/llc+0x34b5dd8)
#1 0x0000558ca69f592e llvm::sys::RunSignalHandlers() (./bin/llc+0x34b392e)
#2 0x0000558ca69f84ad SignalHandler(int) Signals.cpp:0:0
#3 0x00007ff113171cf0 __restore_rt (/lib64/libpthread.so.0+0x12cf0)
#4 0x00007ff111bf1acf raise (/lib64/libc.so.6+0x4eacf)
#5 0x00007ff111bc4ea5 abort (/lib64/libc.so.6+0x21ea5)
#6 0x0000558ca696da13 llvm::report_fatal_error(llvm::Twine const&, bool) (./bin/llc+0x342ba13)
#7 0x0000558ca696d846 (./bin/llc+0x342b846)
#8 0x0000558ca68ecf3e (./bin/llc+0x33aaf3e)
#9 0x0000558ca687cc81 llvm::DAGTypeLegalizer::run() (./bin/llc+0x333ac81)
#10 0x0000558ca6881e07 llvm::SelectionDAG::LegalizeTypes() (./bin/llc+0x333fe07)
#11 0x0000558ca67ff676 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (./bin/llc+0x32bd676)
#12 0x0000558ca67fe08a llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (./bin/llc+0x32bc08a)
#13 0x0000558ca67fb661 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (./bin/llc+0x32b9661)
#14 0x0000558ca67f9006 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (./bin/llc+0x32b7006)
#15 0x0000558ca5bac9ef llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (./bin/llc+0x266a9ef)
#16 0x0000558ca60e6b89 llvm::FPPassManager::runOnFunction(llvm::Function&) (./bin/llc+0x2ba4b89)
#17 0x0000558ca60eebb2 llvm::FPPassManager::runOnModule(llvm::Module&) (./bin/llc+0x2bacbb2)
#18 0x0000558ca60e7416 llvm::legacy::PassManagerImpl::run(llvm::Module&) (./bin/llc+0x2ba5416)
#19 0x0000558ca3f97751 compileModule(char**, llvm::LLVMContext&) llc.cpp:0:0
#20 0x0000558ca3f94ddd main (./bin/llc+0xa52ddd)
#21 0x00007ff111bddd85 __libc_start_main (/lib64/libc.so.6+0x3ad85)
#22 0x0000558ca3f90f7e _start (./bin/llc+0xa4ef7e)
Aborted
```
Probably need to patch this code from #97874 in `lowerBUILD_VECTOR` to handle bf16 too.
```
// If we don't have scalar f16, we need to bitcast to an i16 vector.
if (VT.getVectorElementType() == MVT::f16 &&
!Subtarget.hasStdExtZfhmin())
return lowerBUILD_VECTORvXf16(Op, DAG)
```
CC: @asb @jacquesguan @wangpc-pp
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0WF1v6yoW_TXkZasRBn_lIQ9pPs6tdKpGbaca3ZcIw3biWwc8gPtxf_0IO-mJc9qcM6OZKk0ChrUWsGCzI5yrthpxSpJrkixGovU7Y6feNA1aOSqMep8-7ioHHp0HaYXboYPXyu_gai-8t4QvCLv--6Usyn2lCV0QOju8p_Tw6ooKy0ojED6P4Q2KsjbCE74EEtPSGMJywiZAsmvomwNY9J-05vO-ANGYEjY_PAI2KPFBKR7TrmuvKlt8Ku_TygdT-rU1e-PxD1GXdw1aoRXcNUAYp4TPwCfh_SUuyigFwhdw_Y-b74vN03L-eHcPc6OdF9qv1oTPQhPC57P1qhsMy6OUJSlhE8KXQe2vGvM8_v3GcZz_fuMkYofGJ1Px_fvTLSzv7-_uwwgXBrTx8KzNK-zMK3gDzpQemn52wAePmDA_3ljCskNBK8KiHm_9fTl7WIJri33lQUDRbsFiY6wPYDvvG0f4jLAVYatt5XdtMZZmT9iqrl-OH1eNNX-h9IStKudadIStIKxIpWXdqiADe5NCIeSzt0Li-LCUXshnUO2-CSxdFR1D97e2ZmvFHoTdtnvUPuiAMWGrotIdsezcP67rTz0PV3tvq6ZGwhe2cvIljXv86IB_32pd6S00wjkgLFu1WvrKaFiHiluhxRbDnIHRsDeqrTG0OlASlh1GwL6Au795mF89wWL27Yrw5WL2DdbCe7QabrTztu25HrDG7tuBqDyKICw7bsHssPWCuYG-UUppkuRSpJMyUyqHbiX4jPCZe3f9l7WttO_m9jFMNmH5j0ZWvG6M8xbFnrA0GLHSvtvlLB9ML2HX9I3HRaJU59oPFdGZimTC8DMV961-qLZa1H8IrWq07nicfEHEJwwHROyMKI-FggEkYflBfV_txrIJVqLd_wcQPwBlZRlFPMoiWVLYbCw6byxurIdO2qquijTuPxu_syjU2Jlwal3Tt4jJkg7kxaeoUVFGQpZgReXwZzgZgNIOKEYhywFQMgSSMYoERGE-03UCxCIUyQAoHU5YqkTET1am39ibUnhRb9DacCacOOPxNYQCGY6lgzMKY-oLK8YKEfGBgOxcQB6nX_fO43TQOx_0zlGWHL_ozYUo-dAtk2HvTMo8Ohn8Yvbt8b3B77gVdfU32sOUtPqiKzkXMo8-eIL7h5swzyOk2QnPx5ZezL71NUfKQH95D3BeIs0GbMPNlpVlmqVfsN08YN3Xzo3Cb6hnWi33lQ9CLrGyQqVZOmBlZ6xIc_FL1r52VtfXwlXyujby2Q0M9nHE_vDY15okzcVAEz_TVKRp9EtNttV3-lbIXaXxSD_Q9NOzi6ImaTo0Q3wmakLppeUJVpDv_xdpGaXDNUxOpSWFkBMs4Uv0EPVOdH0q6HeUsDQVEywHSobHEsW0yCcnSlbrQH6MuP8LDYWIi3wy0JCdacCiYL-h4baL_MNlOVRd5JdFwQb8-Rl_FkenRqlPjHGi5Gbf1KcH1X-oIomjoScGZyQvJ1mWRCDNvqlq_Biq3AlL2Kx7zU80hrvn3GiPb8e9W9fy54AbAjc944mVUrAXlf5cqkiYUupUKYuGMVEplSew2YQIuHFeWL85wn0ZH7lQeTIAZWeyaJkh9HBfCIuxzH6EmVmIyagupCprawpR1O-gEVW4QjfCy11_EZdGIZTW7LtoleVZDGEEKa3NK9rTFIWktLt-d5cc6LIYb8z4Qk4E_RUdbkp4RVDdhdLDTrwgOClqYSEkGGwenh6lFZWXwnUXfaGhilJ4QemNHX8ke1UZpuXpcbxF_9Q9W9YYLuMhlB1jCl-EDOv26bF3SZdyBXukHzDhj7DooS28sFv0451wD14t3_yf5S7kpx1SB_bRw6JvrYafpubln91A8rsmjKYLbZML6zGfh7SBxFS4Inz8JeS_WnTbVuhQfBV628irpoGRmnI14RMxwmmUMUbjOErYaDfNsyxSkzyiTOUJz5MM81LRUmSsiPMsEaNqyiiLacYyGvEkYeO4jPI85myClCcJIokp7kVVj8NWGhu7HXVp0jSiNI_TUS0KrF2X6rNwcjyjVuH23CUQhDGSLEZ22iVaRbt1JKZ15bz7geYrX3c_FYQuTyRZQNFWtdr0q3nIvLofB_48JkehZFoPf3bFUWvr6X-f6x3G8TJl_w4AAP__0enOww">