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

    <tr>
        <th>Summary</th>
        <td>
            [regression] trunk emits more `mov` than llvm-18 at -Oz
        </td>
    </tr>

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

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

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

<pre>
    Found this regression at -Oz

```
long patatino() {
    long x = 0;
    for (int i = 0; i < 2; ++i) {
 if (x % 2 == 0) {
                x += 2;
            } else {
                x += 1;
            }
            if ((i % 13 == 0 && x % 17 == 0) || (i % 19 == 0 && x % 23 == 0)) {
                x += 7;
            }
    }
    return x;
}
```

LLVM-18 emits:

```
Disassembly of section .text:

0000000000000000 <_Z8patatinov>:
   0:   6a 02                   push   $0x2
   2:   41 59                   pop    %r9
   4:   31 c9                   xor %ecx,%ecx
   6:   6a 11                   push   $0x11
   8:   5e pop    %rsi
   9:   6a 17                   push $0x17
   b:   5f                      pop    %rdi
   c:   45 89 c8 mov    %r9d,%r8d
   f:   41 83 e8 01             sub $0x1,%r8d
  13:   72 37                   jb     4c <_Z8patatinov+0x4c>
  15:   48 83 e1 fe             and $0xfffffffffffffffe,%rcx
  19:   48 83 c1 02             add $0x2,%rcx
  1d:   48 89 c8                mov    %rcx,%rax
  20:   48 99                   cqto   
  22:   48 f7 fe                idiv %rsi
  25:   41 83 f9 02             cmp    $0x2,%r9d
  29:   75 05 jne    30 <_Z8patatinov+0x30>
  2b:   48 85 d2 test   %rdx,%rdx
  2e:   74 13                   je     43 <_Z8patatinov+0x43>
  30:   48 89 c8                mov    %rcx,%rax
 33:   48 99                   cqto   
  35:   48 f7 ff                idiv %rdi
  38:   41 83 f9 02             cmp    $0x2,%r9d
  3c:   75 09 jne    47 <_Z8patatinov+0x47>
  3e:   48 85 d2 test   %rdx,%rdx
  41:   75 04                   jne    47 <_Z8patatinov+0x47>
  43:   48 83 c1 07             add    $0x7,%rcx
 47:   45 89 c1                mov    %r8d,%r9d
  4a:   eb c3 jmp    f <_Z8patatinov+0xf>
  4c:   48 89 c8                mov %rcx,%rax
  4f:   c3                      ret 
[davidino@devbig015.eag2 ~/reducer]$ size /tmp/old 
   text    data bss     dec     hex filename
    144       0       0     144      90 /tmp/old
```

and trunk emits:

```
Disassembly of section .text:

0000000000000000 <_Z8patatinov>:
   0:   6a 02 push   $0x2
   2:   41 5a                   pop    %r10
   4:   31 c9                   xor    %ecx,%ecx
   6:   6a 11                   push $0x11
   8:   5f                      pop    %rdi
   9:   6a 17 push   $0x17
   b:   41 58                   pop    %r8
 d:   45 89 d1                mov    %r10d,%r9d
  10:   41 83 e9 01 sub    $0x1,%r9d
  14:   72 3d                   jb     53 <_Z8patatinov+0x53>
  16:   48 83 e1 fe             and $0xfffffffffffffffe,%rcx
  1a:   48 8d 71 02             lea 0x2(%rcx),%rsi
  1e:   48 89 f0                mov    %rsi,%rax
  21: 48 99                   cqto   
  23:   48 f7 ff                idiv %rdi
  26:   41 83 fa 02             cmp    $0x2,%r10d
  2a:   75 05 jne    31 <_Z8patatinov+0x31>
  2c:   48 85 d2 test   %rdx,%rdx
  2f:   74 13                   je     44 <_Z8patatinov+0x44>
  31:   48 89 f0                mov    %rsi,%rax
 34:   48 99                   cqto   
  36:   49 f7 f8                idiv %r8
  39:   41 83 fa 02             cmp    $0x2,%r10d
  3d:   75 0c jne    4b <_Z8patatinov+0x4b>
  3f:   48 85 d2 test   %rdx,%rdx
  42:   75 07                   jne    4b <_Z8patatinov+0x4b>
  44:   48 83 c1 09             add    $0x9,%rcx
 48:   48 89 ce                mov    %rcx,%rsi
  4b:   45 89 ca mov    %r9d,%r10d
  4e:   48 89 f1                mov    %rsi,%rcx
 51:   eb bd                   jmp    10 <_Z8patatinov+0x10>
  53:   48 89 c8                mov    %rcx,%rax
  56:   c3                      ret 
[davidino@devbig015.eag2 ~/tools/bin]$ size /tmp/new 
   text    data bss     dec     hex filename
    151       0       0     151      97 /tmp/new
```

Needs to be bisected, but there are two problems:

`pop %r8` is 2-bytes instead of 1 for `pop %rdi` -- maybe a different regalloc decision.

trunk has to do more moves:

```
  48:   48 89 ce                mov    %rcx,%rsi
 4b:   45 89 ca                mov    %r9d,%r10d
  4e:   48 89 f1 mov    %rsi,%rcx
```

vs

```
  47:   45 89 c1 mov    %r8d,%r9d
```

cc: @RKSimon for x86





</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWElv67oV_jX05iABJ00LL27ietPbFmiBLropKJKymcpSKtK-zl283_5AzVOc-OUunhBYjsnvzIfnk4S15lBovUXBEwp2G3F2x7LaKinNJi3V23ZfngsF7mgsVPpQaWtNWYBw8PCPnwjvEP7Wfoa4_av_zcviAK_CCWeKEtEY0QRQ9NQsAgDUG66A2A4wYqOFrKwA0dgUDky_XH99Buq_IvqE6JOZSjSZB10B0QCohzXIudbxda0lsV0tdbkFRTvQudWfEEDeE7D8sbHT-1ebSlhvKyAaIhpC4wOJZk48o-gZBlzyDo6yMe5z_kcfmz_5p9LuXBVw7WH96qwIms_v3__9twcSgz4ZZxH7dqNqdsYKa_Upzd-gzMBq6Xy1PTp9dTMknl2-Pv77n7gruQtif-kRAL6I_C0UgOk8EADwerZH7ybl-Ep7EG1AnECQrIHK1zo2NKiSHsMbDCMg1zDXuroDLa-IPrdfOmjY20jIBzYS0qPiBhXosT3W9OvJIDV6T2ojM-oxaSszWwFMHVeDItlGK4A4ARnDqbz04VGNt1Ws-u1ZH9yYgY4BT32257Q1awElrIFGFNiaSy9pfeNyURP0CV-59KXRiQpaK-LaCgKZnogShWqsyKaXbo0askeSsSRJ5nUmlOrKawFVA7SO3OwaBbIrm0r0aIp7dLJWcfL_rvTobjvtt2fR3F1_QClzmZUQDcapypK5a_LUlsPIu6TPFm0DEwWAA3gpao1s2a8-NwyPckPTISwBKApOW9eVXRcHNcRBt3q4P1VXqqJxlbP1qmAjzQx_ISGM3ZUPFkzysei4Ph9Dp7H4K_lgcshH0uWDR-tRicZR0Xflg5NBD1_Lx-c1czbvrWnb-97qHI7m7eUljc6lxck6SmasFtHiokHrFCSDlyay2arJ2dhi-XEFvdPPvD0Y5VoRN9O3LR4UPClxMcozLI6VvqTmgEnwqMWBwm-I7iutzlJXKNghysGanxoQ3bvTK6L7Mld9DYKfr162Ek5Aam2tSGlZ34_6CpnJdSFOeiABhHdJxZN7_3uCJ8puEAR_yLrqXPzvT0QRPiQEYiU1o7lI8D2MoAH9YVLwHiW4a3xPeMKEayx4gfd_UdJTwXGLUePmU7eaj-Bl9xE8IQmJJwmeGPSmLRF84AZqxcSWGwTrUyAYTwES_jJuIAZJCqIFN8i1gPqojrszIWllDEOY6PGJkuEbkbRmSRLqw_izFIHdPZJoOBlJC5a9NpJ8wju4WOMIZJ0jkDFHkPdxhOxzHIGvzyQ-nobkC_lg_D6O0EU3qROyaL0-IXGPSL6UD6aGfMh-UqfrUUnHUcnu4wh00LPK5D-vmfM5R5gGdswRkgVHiCfjekGK1wjf0Jo8nTAMsfrkM4oun7byrUOxL53e1ID0hCRdPeCazJJ1gk3GBDtgX3nuCMJfxlNcWeYW0X1qilWuUugfX-MqQRfjGVfpfk-iibIbXOXvWisLroRUQ2o8-9A-w5CeHbijrjSISoP7UcJrVaa5Pq3QGT8mm24NMRgL9CF9c9qCKazTQnlaQ5rXYMNeZfzmhwc4ibdUgwBlskxXunBQ6YPI81L6IBhryuJxrK8hVkdRG61KOJWV9pnVH_As-FpTLHriffCnWuRWT6wm6mJvOzd_Krj1GLCqQNajB3H8z7_-y5zKos7YNQ4nahefG7VlKmGJ2OgtiWiMMUtIsDluFU8x1VLiOAzjTKowjeJAyCQmidJJojZmSzHlBGOOCQ5I8JhGPKScY4mTBMckQRzrkzD5Y55fTo9lddgYa896SwjBMdnkItW5rd_zUuo7ql5FlKJgt6m2HvSQng8WcZwb6-wgxhmX1y-IhxfAKNiNKXtTVSjEp_Li69QdRQG1RBK374o35yrfHp17reuO7hHdH4w7ntNHWZ4Q3fvd7e3htSpftHSI7msb_dHQOnHZ0t8DAAD__zQhZAw">