<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">