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

    <tr>
        <th>Summary</th>
        <td>
            AArch64 loads right shifted index generated redundant code
        </td>
    </tr>

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

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

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

<pre>
    Sample C++ code:

```c++
extern void* bar();
void* get(unsigned* tag, void** array) {
  unsigned class_id = tag[0] >> 12;
  // if (class_id > 0x40000)
  //   return bar();
 unsigned base = (0x7a8U + (0x9U << 16U)) >> 3;
  return array[base + class_id];
}
```

Generates asm:

```asm
        ldr     w9, [x0]
        mov     w8, #1960                       // =0x7a8
        movk    w8, #9, lsl #16
        lsr     x9, x9, #9
        and     x9, x9, #0x7ffff8
        add     x9, x9, x1
        ldr     x0, [x9, x8]
        ret
```

I think `and    x9, x9, #0x7ffff8` is redundant, and needs to be removed.

like the following:

```asm
        ldr     w8, [x0]
        mov     w9, #8437 // =0x20f5
        movk    w9, #1, lsl #16
        add     x8, x9, x8, lsr #12
        ldr     x0, [x1, x8, lsl #3]
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVNFuozoQ_ZrhZbSVsYHAAw9N01zd56s-Xxk8gLcOVLbTsvfrr2ygYbvdShtFRPE5M3PmnMTSOd2PRDXkR8hPibz6YbK10eN_35NmUj_qf-TlxRA-AD8CP2I7KQJxD-wEbHsWbHm3C2c5pdmTHfF10gr4PTbSAi-BVyBWwob05IGX1zEKiSde9sAfttJwIq2VP4BXCIe1GnGrwNZI5_7VCkGcYm1-ZJCfEMQjiEdM-ftIROBn4GfUHQIvd4WPyOaMMcaCwp-5iJb81Y6frHDT0EhHcT7wks0HWT5hcCt-q54QxAOIB0yLp1Ae9li0iZ20dcqyan5cOgbHV5WQn97ZcDh98H4fyF80kpWeHEp3-V1YAVrPK6MssOqtCq5DfpyDfe_gZXoNYBlBLtKqYPj5azUMxClasO_wvG8R5xhnYrvipsIFFXNEl2fkbrAc1a8wmw9d13W3WVJ9ZM3phz1ntu254OV-W0v-C2f_Rj_o8RmDf1_KKRhqh5bUdVRy9AGWo8KRSDn0EzaEli7TK6m7fX-jnwn9QNhNxkxveuz_IL7yq_g2hWUmDj8FxVmX_5LUxk4_T2o1udyZXC5MG5n8t46ne3JsK25it90SVQtViUomVKdFlRV5VRVFMtRVK7jgglLiopGF6rhoSeXUUidkJmSia864YFWaMZ7zrLhriq5IZamqSlGTNy1kjC5SmztjXi93k-0T7dyV6qIQaZkY2ZBx8S7kfKQ3jCBwHq5GW4eab821d5Axo513ty5ee0P1_b1thyJDM0nl0Op-8OgG3XlSqEdFM_brX1PdfhvxSk2u1tSD9y8uBB7j6bUfrs1dO12An8Og9ePbi52-U-uBn6M8B_wc5f8fAAD__wQSjkM">