<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/65068>65068</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [RISCV] Vector binary ops of splats aren't scalarized on fixed vectors
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:RISC-V,
            llvm:codegen,
            missed-optimization,
            llvm:SelectionDAG
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          lukel97
      </td>
    </tr>
</table>

<pre>
    The functions below multiply a vector with a splatted scalar, computed from an add:

```llvm
define <4 x i64> @f_v4i64(<4 x i64> %x, i64 %y) {
 %1 = insertelement <4 x i64> poison, i64 %y, i32 0
  %2 = shufflevector <4 x i64> %1, <4 x i64> poison, <4 x i32> zeroinitializer
  %3 = add <4 x i64> %2, <i64 3, i64 3, i64 3, i64 3>
  %4 = mul <4 x i64> %x, %3
  ret <4 x i64> %4
}

define <vscale x 4 x i64> @f_nxv4i64(<vscale x 4 x i64> %x, i64 %y) {
  %1 = insertelement <vscale x 4 x i64> poison, i64 %y, i32 0
  %2 = shufflevector <vscale x 4 x i64> %1, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
  %3 = add <vscale x 4 x i64> %2, shufflevector(<vscale x 4 x i64> insertelement(<vscale x 4 x i64> poison, i64 3, i32 0), <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer)
  %4 = mul <vscale x 4 x i64> %x, %3
  ret <vscale x 4 x i64> %4
}
```

When compiled with `llc -o - -mattr=+v`, the splatted add is scalarized for the scalable version:

```asm
f_nxv4i64:
        addi    a0, a0, 3
        vsetvli a1, zero, e64, m4, ta, ma
        vmul.vx v8, v8, a0
        ret
```

But the fixed version doesn't:

```asm
f_v4i64:
        vsetivli        zero, 4, e64, m2, ta, ma
        vmv.v.x v10, a0
        vadd.vi v10, v10, 3
        vmul.vv v8, v8, v10
        ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVs1u4zYQfhrqMrBBkZIVHXRI7HXRa7dIjwUlji12KdEgKa2Tpy9I2bFjR0aLFghEZmY4P983HFo4p_Y9YkXyF5JvEjH41thKDz9Ql0VSG_lW_d4i7Ia-8cr0DmrU5id0g_bqoN9AwIiNNxZ-Kt-CAHfQwnuU4BqhhSVsDY3pDkMQ7azpQPQgpCT8mdANoefvik5_Wo_dJJK4Uz0C4esMjqBWGeHfgGR09-eYhf_Y042K5ccQTa2ysH8jrARSvEzOgiQFwjegeofWo8YOe3_j_WCUM_1nJ2tQnAE9uQlCFv24dtjtNJ6Kv0slDSfnvJ_lnAX5O1qjeuWV0Ood7VUkHiMJKe_9s5OfkCg_Z_zVhn-7cphFh92g7x1G7ELMs7nFW3iCgxNdxeaavQtVY2Ad4Qi3nPXHK9a-tHpI3wP-vnL2n4icye7M6ON4dwb_iuOZ0JHsT3nO4_gJn3mzzwjxCzys_D_rZOVc9z3qgS_acMb8rh_Pc-S6Pf9osY9DSGmU05yKk6aBhYEFLDrhvSV8Q9jLGI6yNfgWL5MskKPcaaCp9zDIjJ1MgqjWCCNap0w_N9WEOw21y0W4WJZCShWWGHn68g_l6NCPOupjBwaEw4rhMq2hi18v4l5cTnWDXo7HsHsKqukrPmApLfoHiL0MPta3U0eU5-JAGnQ9YYX_B2XeFRnqUFMh5xKy6zrYTB3jclzGOlJ6U8IopFyO6qI7LfwGhfEGhWA2D0MiKy5LXooEq3RVcp4WtGRJWzFWMCoEZyKtRZ5hTmWB6QqppFRSXiSqYpRx-sTKlOcpZ0sqnwpZ51ld11kh04ZkFDuh9DI8cktj94lybsBqldPVU6JFjdrFd5ixWjQ_sA-v5G-_fl8vXgkL-BDG4vvInxsjcY_9h7hTzqFcmINXnXoX4aW-PfIdNcYnfPP8S9Dlm8RWQbeoh70jGdXKeXfJzSuv48-CkMEryTfwOo3IWvXCvoE5ODC76ZY4EBZja1zfEtN_NFA46JLB6qr1_uBCY7AtYdu98u1QLxvTEbaNiU7L4mDNX9h4wrYRI0fYNsL0dwAAAP__AoVxNg">