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

    <tr>
        <th>Summary</th>
        <td>
            missed-size-optimization: x86 use xchgb instead of rolw $0x8
        </td>
    </tr>

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

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

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

<pre>
    `-Os`

Sample C function:
```C
#include <stdint.h>

uint16_t u16_rol8(uint16_t x) {
        return (x << 8) | (x >> 8);
}
```

Generated assembly (7 bytes):
```ASM
u16_rol8:
        movl    %edi, %eax
        rolw    $8, %ax
        retq
```

Optimized assembly (5 bytes):
```ASM
u16_rol8:
        movl    %edi, %eax
        xchgb   %al, %ah
        retq
```

Additionally, this optimization should also be applied to 16-bit bswap, as it uses `rolw $0x8` to swap the bytes.
This optimization cannot be applied if the register does not have a high byte register (so only on `ax`, `bx`, `cx`, and `dx`)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0lM9v4yoQx_-a8WWUCOPfBx_StHmnpx767hWYic0TBq_BbdK_foWTtFFXWu1lpSgG5jtfPjNgC-91b4laKB6geEzEEgY3t71ztpuJJpoT6dS5hZJtnj2UDNgjsN3l_0WMkyHc43GxXdDOQnaNROH621_nPNO2M4sihGzvg9I2bAfInu7tFm1DWr4GXNLydXamBl5_rp2ANwjVwy2hmSkss0Xg9Sl6QrbH-qLZ3xafIHtaFyG75VWP3wDvAf4hS7MIpFB4T6M05-hUoTwH8qvN9_J2L_9e2W_InxLWjO7NAGuAF6Q08IhVkDh9VeDM-xrP62v0Pkjhx29Qn6egR_3xDbX4W6inbugl4spobrDDn8LulNLxeghjzjE5DNqju1QgYgD94BajUBjvUBKKaTKaFAaHabmROqD072KKucKjDrh48ggliy1E4Dk71VCyqI86DANdOrG9APz3y4adsNaF-730cU2bqdc-0IzKkceoGcQbocBB98Nq-iUBXnuHzpozOhtxxClWHttTMnk37m5jYVWcq8u8SVSbqSZrREJtWrGCsyJN62RoRZflvMh42VFVS1U1HVNpyTpZS07HUiS65YznLE1zlrMirbdpyrhK87KreEOVLCFnNApttsa8jVs394n2fqG2qllVJUZIMn596Tm39I5rEDiP34C5jTkbufQecma0D_7LJehgqB2196Q2Xn_Q5r6vkO3wVJfxfPByZ7T1gYRCd8S7w0qW2bRDCJOPt5AfgB96HYZFbjs3Aj_E7a6PzTS7_6kLwA8rpAd-WIv4GQAA__-rO2Ae">