<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/100848>100848</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[RISCV] Suboptimal build_vector lowering for bf16
</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 case lowers build_vector through memory with -mattr=+zvfbfmin,+zfbfmin
```
define <4 x bfloat> @foo(bfloat %a, bfloat %b, bfloat %c, bfloat %d) {
%1 = insertelement <4 x bfloat> poison, bfloat %a, i32 0
%2 = insertelement <4 x bfloat> %1, bfloat %b, i32 1
%3 = insertelement <4 x bfloat> %2, bfloat %c, i32 2
%4 = insertelement <4 x bfloat> %3, bfloat %d, i32 3
ret <4 x bfloat> %4
}
```
```
foo: # @foo
.cfi_startproc
# %bb.0:
addi sp, sp, -16
.cfi_def_cfa_offset 16
fsh fa3, 14(sp)
fsh fa2, 12(sp)
fsh fa1, 10(sp)
fsh fa0, 8(sp)
addi a0, sp, 8
vsetivli zero, 4, e16, m2, ta, ma
vle16.v v8, (a0)
addi sp, sp, 16
ret
```
We need to enable custom lowering for BUILD_VECTOR and probably cast the build_vector to the equivalent i16 build_vector.
If we have Zvfh, we can use vfslide1down.vf instructions. Not sure if we should bitcast it to an f16 vector or add isel patterns for bf16 slide with Zvfh+Zvfbfmin.
CC: @jacquesguan @wangpc-pp @preames
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVUGP4ygT_TXkUoqFseMkBx86yURq6dO30sxsrzSXCEwRM4uNB7CzPb9-he2eTrozq0YWqODx6lGFC-69PreIJVntyOqw4H2orSuD7Tp01UJY-Vx-rbWHgD5AxT2CsRd0HkSvjTwNWAXrINTO9ucaGmyse4aLDjUsGx6CI9mBsN3PQQnV6JawfbRmgx4IfZj7gs7faEpUukUg2T6Hf0AoY3kg2ScgOVXWEraZpoCwFSdsD6-muDWrW1MStgWy3sFrmxxCXE2BZAfQrUcX0GCDbXgvobPa2_aWdtSgMwYU7rcrJ-wjTqKYO-eKLtJrsuyDZOxOVCIZuybLP0iWvYvpRJb9InN4f2c-I8j6cDftdydjwrMHICx7Sf_sZWpJpfTJB-5C52w1M0QsWwmRUJI93OK5lDqOvou6p36ZFndIJapTpfjJKuUxwFuM8vU08jEgaU7YJtJtZ9jr-hj9lL1Zf0czZjylv4cpTiNkcx_xcrAJNB1scwsZPAY9GP1i_0RnIyyPHaZFHJpRbRivdMPf7DeYFskAwyauEraJvn4j4zq-v0LnMPxH4v9CaBElBAvYcmEQqt4H20wlR7dnUNbB7s_H_x1OT5_2X__4DLyV0DkruDDPsTwFCDW-qU12nMMfvR64iZdap8UNJLkW8ajgglDzAeHboOoo_4JQ8RZ6jzAob7TEVNpLmwwq_i3B9VXQtvUJ_N8G8L1D0COJr21vJAgdRmU6RC28BZUWMIuzLgYMtEcDHQ8BXevHU4oIGn1N1XTSsvs2F9Ibyfv9-IPk9DuvfvTozz1vo3nh7bmrll0Xjc4hb9DDQpaZ3GZbvsAyXTNG83yzyhZ1KXJeVKmgK1rRNV_LLOVsS4uCF0JJtVULXTLKcrpma5rm6yxLRI6cbwsu5XZNGa5ITrHh2iTGDE1i3Xmhve-xTCnd5JuF4QKNH18axgSv_sZWkuzh8-OX_fKJMBbfH1fGvUvRnz3JqdE--Fe2oIMZX6q45YmsDvClF7YLuuHmNuc3FyaGctE7U9YhdD4WBHYk7HjWoe5FUtmGsGP0MQ_LztnvWAXCjqN8T9hxPsFQsn8DAAD__9P0D1k">