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

    <tr>
        <th>Summary</th>
        <td>
            [RISCV] missed optimization: use sh or sw when can infer the offset from alignment
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    https://godbolt.org/z/YP9WP9rET

For the C code:
```
typedef struct {
    char a;
    char b;
    char c;
    int len;
    char e;
    int len2;
} __attribute__((packed)) str_t;

void foo(str_t *p __attribute__((aligned(4)))) {
    p->len = 0;
    p->len2 = 0;
}
```

The asm generated is:

```
foo:
        sb      zero, 3(a0)
        sb      zero, 4(a0)
        sb      zero, 5(a0)
        sb zero, 6(a0)
        sb      zero, 8(a0)
        sb      zero, 9(a0)
 sb      zero, 10(a0)
        sb      zero, 11(a0)
 ret
```

For 'len', the middle two 'sb' can be converted to one 'sh'; for 'len2', the four sb can be converted to one 'sw'.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMVE2P4zYM_TX0hZhAob_igw_OZA30NmgXLXoKZIuO1dpWIMkJdn59ISfbZDLTIkEAgXyPD080RemcPkzMJaRbSHeRnH1vbLmVxvVyepPTIWqM-lH23h8dxBVQDVQfjGrM4FfGHoDqd6D6z7fij7fCfvsOogJR1cai7xlfsTWKQ52oIBPXv6j8jyMr7tB5O7ceId-CqBAR215alBB_iJuHuL3FevI48PRA4E8EumQg3-F-L723upk97_dAG6DNUbZ_swIqgIrgae-vdFGdjFbYGQO0WQAEqo5facghNFIBbZKL0FXudrfjC8TfBp4Q4h2Km8WfeboHIN899AxE9b1nlG7EA09spWeF2l2b-5EbDC95vP5ccznf2RqgV4yDYxEs_jcneYKTfs35CWdPSGye4BT3nEdwLZ5QWK_vSZb95-6GoQXKwzhRHmrCBI9aqYHRn03AXAOUYysnbBhbM53Yhq_gDZqJF0IfauMtdv-K0Z1aZ2YbrP2fwhkoX0WqjFURFzLicp0nBaUiEVnUl20sskJJpbo8T5supTRmytKka9ftpshFpEsSlIpMZERpTNmqlTGliRKkUpE33EIieJR6WA3DaQxPONLOzVyuk5jWaTTIhge37AOiic-4oEAU1oMtQ9FLMx8cJGLQzrubjNd-WBbJr7_89vo7pDsctXOs0By9HvW79NpMEFc4O0bXo7HoznjueVr6oaeOL1vDdJ1jj501Iy7PauTJR7MdHteQ9v3crFozAtXBxvV4OVrzF7ceqF7MO6D6ertTSf8EAAD___UfY2k">