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

    <tr>
        <th>Summary</th>
        <td>
            Use a 32-bit mov instead of 64-bit mov for shorter encoding on x86
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:X86,
            missed-optimization
      </td>
    </tr>

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

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

<pre>
    Compile:

```
define i64 @foo3(i64 %x) {
  %t0 = lshr i64 %x, 8
  %t1 = and i64 %t0, 255
 ret i64 %t1
}
```

with:

```
$ clang -O2 -march=skylake 
```

I get:

```
48 89 f8 mov    %rdi,%rax
0f b6 c4                   movzbl %ah,%eax
```

We could use a 32-bit `mov` for its shorter encoding:

```
89 f8                      mov    %edi,%eax
0f b6 c4                   movzbl %ah,%eax
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysk0-PmzwQxj-NuYwSGRsbcuCwu1Gk9_SeqvY64AHcGBzZJt3dT19Bkt1VG-VUCxlsP_PnxyNjjLafiGqmnpnaZzinwYf6iO9zwiMONmDCrPHmrX7x48k6YvKJ8T3jt1nz67MuDXV2IrC6AFbwznvJRLWuhHplYgesfL4oYdlKHJjcg4tDgE_VC1RfNfmqwcncJIkvGqHUVRUofRzl17bK_d3-LvMvm4bHHEwU0Dqcetj8L2AzYmgHJvfx-ObwSPAg93_QU3qcvKig2kFXwejPACtkMJaJl-UDXy8i3kGjoS3g7zH683vjljAcLlF0i7rb0neC1s_OwBwJEKTYNDYB03z0Z6Y5dD6ATRHi4EOiADS13tipf0xxQbg7PrnoxkX_iCsztTQ7ucOM6lyXlcqLUslsqLkuNO24LCtRaGybJs-7QmiUVCmlWsxsLbiQXOY511wpueVSqLLlBimXnS47VnAa0bqtc-dx60Of2RhnqnUu5S5z2JCL6z0RosH2SJNh8ulHpZkQa7ditDGS2fhTsqN9x2T9tJypfRbqJeemmfvICu5sTPGzSrLJUf3tqzfLD7RTTIQGfAe6-NhdvPrTJ_ATvFY6m4Orh5ROcTFOHJg49DYNc7Nt_cjEYSl4fW1Owf-kNjFxWBkjE4cV83cAAAD__4mWF_I">