<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">