Skip to content

LLVM is generating terrible code #3025

Closed
@eholk

Description

@eholk

It probably has something to do with us not generating a memmove call instead. Here's an example from the parser.

parse::parser::parser::meth4586::parse_bottom_expr::_6ed32f9348e8142f::_03+0x1b10
+0x125c leaq                           +1289059(%rip), %rdi
+0x1263 movq                           $4, %rsi
+0x1268 callq                          0x10cef068c
+0x126d movq                           %rax, %rbx
+0x1270 leaq                           -4368(%rbp), %rdi
+0x1277 movq                           %r12, %rsi
+0x127a movq                           $1, %rdx
+0x127f callq                          parse::parser::parser::meth4417::look_ahead::_4f6f66ed9b7429d8::_03+0x10
+0x1284 movzxl                         -4359(%rbp), %eax
+0x128b movl                           %eax, -12100(%rbp)
+0x1291 movl                           -4360(%rbp), %eax
+0x1297 movl                           %eax, -12112(%rbp)
+0x129d movq                           -4368(%rbp), %rax
+0x12a4 movq                           %rax, -12120(%rbp)
+0x12ab movzxl                         -4358(%rbp), %eax
+0x12b2 movl                           %eax, -12124(%rbp)
+0x12b8 movzxl                         -4357(%rbp), %eax
+0x12bf movl                           %eax, -12128(%rbp)
+0x12c5 movl                           -4356(%rbp), %eax
+0x12cb movl                           %eax, -12132(%rbp)
+0x12d1 movzxl                         -4355(%rbp), %eax
+0x12d8 movl                           %eax, -12136(%rbp)
+0x12de movzxl                         -4354(%rbp), %eax
+0x12e5 movl                           %eax, -12140(%rbp)
+0x12eb movzxl                         -4353(%rbp), %eax
+0x12f2 movl                           %eax, -12144(%rbp)
+0x12f8 movl                           -4352(%rbp), %eax
+0x12fe movl                           %eax, -12148(%rbp)
+0x1304 movzxl                         -4351(%rbp), %eax
+0x130b movl                           %eax, -12152(%rbp)
+0x1311 movzxl                         -4350(%rbp), %eax
+0x1318 movl                           %eax, -12156(%rbp)
+0x131e movzxl                         -4349(%rbp), %eax
+0x1325 movl                           %eax, -12160(%rbp)
+0x132b movl                           -4348(%rbp), %eax
+0x1331 movl                           %eax, -12164(%rbp)
+0x1337 movzxl                         -4347(%rbp), %eax
+0x133e movl                           %eax, -12168(%rbp)
+0x1344 movzxl                         -4346(%rbp), %eax
+0x134b movl                           %eax, -12172(%rbp)
+0x1351 movzxl                         -4345(%rbp), %eax
+0x1358 movl                           %eax, -12176(%rbp)
+0x135e movl                           -4344(%rbp), %eax
+0x1364 movl                           %eax, -12180(%rbp)
+0x136a movzxl                         -4343(%rbp), %eax
+0x1371 movl                           %eax, -12184(%rbp)
+0x1377 movzxl                         -4342(%rbp), %eax
+0x137e movl                           %eax, -12188(%rbp)
+0x1384 movzxl                         -4341(%rbp), %eax
+0x138b movl                           %eax, -12192(%rbp)
+0x1391 movl                           -4340(%rbp), %eax
+0x1397 movl                           %eax, -12196(%rbp)
+0x139d movzxl                         -4339(%rbp), %eax
+0x13a4 movl                           %eax, -12200(%rbp)
+0x13aa movzxl                         -4338(%rbp), %eax
+0x13b1 movl                           %eax, -12204(%rbp)
+0x13b7 movzxl                         -4337(%rbp), %eax
+0x13be movl                           %eax, -12208(%rbp)
+0x13c4 movl                           -4336(%rbp), %eax
+0x13ca movl                           %eax, -12212(%rbp)
+0x13d0 movzxl                         -4335(%rbp), %eax
+0x13d7 movl                           %eax, -12216(%rbp)
+0x13dd movzxl                         -4334(%rbp), %eax
+0x13e4 movl                           %eax, -12220(%rbp)
+0x13ea movzxl                         -4333(%rbp), %eax
+0x13f1 movl                           %eax, -12224(%rbp)
+0x13f7 movl                           -4332(%rbp), %eax
+0x13fd movl                           %eax, -12228(%rbp)
+0x1403 movzxl                         -4331(%rbp), %eax
+0x140a movl                           %eax, -12232(%rbp)
+0x1410 movzxl                         -4330(%rbp), %eax
+0x1417 movl                           %eax, -12236(%rbp)
+0x141d movzxl                         -4329(%rbp), %eax
+0x1424 movl                           %eax, -12240(%rbp)
+0x142a movl                           -4328(%rbp), %eax
+0x1430 movl                           %eax, -12244(%rbp)
+0x1436 movzxl                         -4327(%rbp), %eax
+0x143d movl                           %eax, -12248(%rbp)
+0x1443 movzxl                         -4326(%rbp), %eax
+0x144a movl                           %eax, -12252(%rbp)
+0x1450 movzxl                         -4325(%rbp), %eax
+0x1457 movl                           %eax, -12256(%rbp)
+0x145d movl                           -4324(%rbp), %eax
+0x1463 movl                           %eax, -12264(%rbp)
+0x1469 movzxl                         -4323(%rbp), %eax
+0x1470 movl                           %eax, -12268(%rbp)
+0x1476 movzxl                         -4322(%rbp), %eax
+0x147d movl                           %eax, -12272(%rbp)
+0x1483 movzxl                         -4321(%rbp), %eax
+0x148a movl                           %eax, -12276(%rbp)
+0x1490 movl                           -4320(%rbp), %eax
+0x1496 movl                           %eax, -12280(%rbp)
+0x149c movzxl                         -4319(%rbp), %eax
+0x14a3 movl                           %eax, -12284(%rbp)
+0x14a9 movzxl                         -4318(%rbp), %eax
+0x14b0 movl                           %eax, -12288(%rbp)
+0x14b6 movzxl                         -4317(%rbp), %eax
+0x14bd movl                           %eax, -12292(%rbp)
+0x14c3 movl                           -4316(%rbp), %eax
+0x14c9 movl                           %eax, -12296(%rbp)
+0x14cf movzxl                         -4315(%rbp), %eax
+0x14d6 movl                           %eax, -12300(%rbp)
+0x14dc movzxl                         -4314(%rbp), %eax
+0x14e3 movl                           %eax, -12304(%rbp)
+0x14e9 movzxl                         -4313(%rbp), %eax
+0x14f0 movl                           %eax, -12308(%rbp)
+0x14f6 movl                           -4312(%rbp), %eax
+0x14fc movl                           %eax, -12312(%rbp)
+0x1502 movzxl                         -4311(%rbp), %eax
+0x1509 movl                           %eax, -12316(%rbp)
+0x150f movzxl                         -4310(%rbp), %eax
+0x1516 movl                           %eax, -12320(%rbp)
+0x151c movzxl                         -4309(%rbp), %eax
+0x1523 movl                           %eax, -12324(%rbp)
+0x1529 movl                           -4308(%rbp), %eax
+0x152f movl                           %eax, -12328(%rbp)
+0x1535 movzxl                         -4307(%rbp), %eax
+0x153c movl                           %eax, -12332(%rbp)
+0x1542 movzxl                         -4306(%rbp), %eax
+0x1549 movl                           %eax, -12336(%rbp)
+0x154f movzxl                         -4305(%rbp), %eax
+0x1556 movl                           %eax, -12340(%rbp)
+0x155c movl                           -4304(%rbp), %eax
+0x1562 movl                           %eax, -12344(%rbp)
+0x1568 movzxl                         -4303(%rbp), %eax
+0x156f movl                           %eax, -12348(%rbp)
+0x1575 movzxl                         -4302(%rbp), %eax
+0x157c movl                           %eax, -12352(%rbp)
+0x1582 movzxl                         -4301(%rbp), %eax
+0x1589 movl                           %eax, -12356(%rbp)
+0x158f movl                           -4300(%rbp), %eax
+0x1595 movl                           %eax, -12360(%rbp)
+0x159b movzxl                         -4299(%rbp), %eax
+0x15a2 movl                           %eax, -12364(%rbp)
+0x15a8 movzxl                         -4298(%rbp), %eax
+0x15af movl                           %eax, -12368(%rbp)
+0x15b5 movzxl                         -4297(%rbp), %eax
+0x15bc movl                           %eax, -12372(%rbp)
+0x15c2 movzxl                         -4295(%rbp), %eax
+0x15c9 movl                           %eax, -12376(%rbp)
+0x15cf movzxl                         -4294(%rbp), %eax
+0x15d6 movl                           %eax, -12380(%rbp)
+0x15dc movzxl                         -4293(%rbp), %eax
+0x15e3 movl                           %eax, -12384(%rbp)
+0x15e9 movzxl                         -4291(%rbp), %eax
+0x15f0 movl                           %eax, -12388(%rbp)
+0x15f6 movzxl                         -4290(%rbp), %eax
+0x15fd movl                           %eax, -12392(%rbp)
+0x1603 movzxl                         -4289(%rbp), %eax
+0x160a movl                           %eax, -12396(%rbp)
+0x1610 movl                           -4288(%rbp), %eax
+0x1616 movl                           %eax, -12400(%rbp)
+0x161c movzxl                         -4287(%rbp), %eax
+0x1623 movl                           %eax, -12404(%rbp)
+0x1629 movzxl                         -4286(%rbp), %eax
+0x1630 movl                           %eax, -12408(%rbp)
+0x1636 movzxl                         -4285(%rbp), %eax
+0x163d movl                           %eax, -12412(%rbp)
+0x1643 movl                           -4284(%rbp), %eax
+0x1649 movl                           %eax, -12416(%rbp)
+0x164f movq                           %rbx, -12096(%rbp)
+0x1656 movzxl                         -4283(%rbp), %r14d
+0x165e movzxl                         -4282(%rbp), %r15d
+0x1666 movzxl                         -4281(%rbp), %r10d
+0x166e movl                           -4280(%rbp), %r9d
+0x1675 movzxl                         -4279(%rbp), %r8d
+0x167d movzxl                         -4278(%rbp), %ecx
+0x1684 movzxl                         -4277(%rbp), %r11d
+0x168c movl                           -4276(%rbp), %esi
+0x1692 movzxl                         -4275(%rbp), %edi
+0x1699 movzxl                         -4274(%rbp), %ebx
+0x16a0 movq                           %r12, %rdx
+0x16a3 movzxl                         -4273(%rbp), %r12d
+0x16ab movl                           -4296(%rbp), %eax
+0x16b1 movl                           -4292(%rbp), %r13d
+0x16b8 movl                           %r13d, +528(%rsp)
+0x16c0 movl                           %eax, +496(%rsp)
+0x16c7 movl                           %r12d, +680(%rsp)
+0x16cf movq                           %rdx, %r12
+0x16d2 movl                           %ebx, +672(%rsp)
+0x16d9 movl                           %edi, +664(%rsp)
+0x16e0 movl                           %esi, +656(%rsp)
+0x16e7 movl                           %r11d, +648(%rsp)
+0x16ef movl                           %ecx, +640(%rsp)
+0x16f6 movl                           %r8d, +632(%rsp)
+0x16fe movl                           %r9d, +624(%rsp)
+0x1706 movl                           %r10d, +616(%rsp)
+0x170e movl                           %r15d, +608(%rsp)
+0x1716 movl                           %r14d, +600(%rsp)
+0x171e movq                           -12096(%rbp), %r14
+0x1725 movl                           -12416(%rbp), %eax
+0x172b movl                           %eax, +592(%rsp)
+0x1732 movl                           -12412(%rbp), %eax
+0x1738 movl                           %eax, +584(%rsp)
+0x173f movl                           -12408(%rbp), %eax
+0x1745 movl                           %eax, +576(%rsp)
+0x174c movl                           -12404(%rbp), %eax
+0x1752 movl                           %eax, +568(%rsp)
+0x1759 movl                           -12400(%rbp), %eax
+0x175f movl                           %eax, +560(%rsp)
+0x1766 movl                           -12396(%rbp), %eax
+0x176c movl                           %eax, +552(%rsp)
+0x1773 movl                           -12392(%rbp), %eax
+0x1779 movl                           %eax, +544(%rsp)
+0x1780 movl                           -12388(%rbp), %eax
+0x1786 movl                           %eax, +536(%rsp)
+0x178d movl                           -12384(%rbp), %eax
+0x1793 movl                           %eax, +520(%rsp)
+0x179a movl                           -12380(%rbp), %eax
+0x17a0 movl                           %eax, +512(%rsp)
+0x17a7 movl                           -12376(%rbp), %eax
+0x17ad movl                           %eax, +504(%rsp)
+0x17b4 movl                           -12372(%rbp), %eax
+0x17ba movl                           %eax, +488(%rsp)
+0x17c1 movl                           -12368(%rbp), %eax
+0x17c7 movl                           %eax, +480(%rsp)
+0x17ce movl                           -12364(%rbp), %eax
+0x17d4 movl                           %eax, +472(%rsp)
+0x17db movl                           -12360(%rbp), %eax
+0x17e1 movl                           %eax, +464(%rsp)
+0x17e8 movl                           -12356(%rbp), %eax
+0x17ee movl                           %eax, +456(%rsp)
+0x17f5 movl                           -12352(%rbp), %eax
+0x17fb movl                           %eax, +448(%rsp)
+0x1802 movl                           -12348(%rbp), %eax
+0x1808 movl                           %eax, +440(%rsp)
+0x180f movl                           -12344(%rbp), %eax
+0x1815 movl                           %eax, +432(%rsp)
+0x181c movl                           -12340(%rbp), %eax
+0x1822 movl                           %eax, +424(%rsp)
+0x1829 movl                           -12336(%rbp), %eax
+0x182f movl                           %eax, +416(%rsp)
+0x1836 movl                           -12332(%rbp), %eax
+0x183c movl                           %eax, +408(%rsp)
+0x1843 movl                           -12328(%rbp), %eax
+0x1849 movl                           %eax, +400(%rsp)
+0x1850 movl                           -12324(%rbp), %eax
+0x1856 movl                           %eax, +392(%rsp)
+0x185d movl                           -12320(%rbp), %eax
+0x1863 movl                           %eax, +384(%rsp)
+0x186a movl                           -12316(%rbp), %eax
+0x1870 movl                           %eax, +376(%rsp)
+0x1877 movl                           -12312(%rbp), %eax
+0x187d movl                           %eax, +368(%rsp)
+0x1884 movl                           -12308(%rbp), %eax
+0x188a movl                           %eax, +360(%rsp)
+0x1891 movl                           -12304(%rbp), %eax
+0x1897 movl                           %eax, +352(%rsp)
+0x189e movl                           -12300(%rbp), %eax
+0x18a4 movl                           %eax, +344(%rsp)
+0x18ab movl                           -12296(%rbp), %eax
+0x18b1 movl                           %eax, +336(%rsp)
+0x18b8 movl                           -12292(%rbp), %eax
+0x18be movl                           %eax, +328(%rsp)
+0x18c5 movl                           -12288(%rbp), %eax
+0x18cb movl                           %eax, +320(%rsp)
+0x18d2 movl                           -12284(%rbp), %eax
+0x18d8 movl                           %eax, +312(%rsp)
+0x18df movl                           -12280(%rbp), %eax
+0x18e5 movl                           %eax, +304(%rsp)
+0x18ec movl                           -12276(%rbp), %eax
+0x18f2 movl                           %eax, +296(%rsp)
+0x18f9 movl                           -12272(%rbp), %eax
+0x18ff movl                           %eax, +288(%rsp)
+0x1906 movl                           -12268(%rbp), %eax
+0x190c movl                           %eax, +280(%rsp)
+0x1913 movl                           -12264(%rbp), %eax
+0x1919 movl                           %eax, +272(%rsp)
+0x1920 movl                           -12256(%rbp), %eax
+0x1926 movl                           %eax, +264(%rsp)
+0x192d movl                           -12252(%rbp), %eax
+0x1933 movl                           %eax, +256(%rsp)
+0x193a movl                           -12248(%rbp), %eax
+0x1940 movl                           %eax, +248(%rsp)
+0x1947 movl                           -12244(%rbp), %eax
+0x194d movl                           %eax, +240(%rsp)
+0x1954 movl                           -12240(%rbp), %eax
+0x195a movl                           %eax, +232(%rsp)
+0x1961 movl                           -12236(%rbp), %eax
+0x1967 movl                           %eax, +224(%rsp)
+0x196e movl                           -12232(%rbp), %eax
+0x1974 movl                           %eax, +216(%rsp)
+0x197b movl                           -12228(%rbp), %eax
+0x1981 movl                           %eax, +208(%rsp)
+0x1988 movl                           -12224(%rbp), %eax
+0x198e movl                           %eax, +200(%rsp)
+0x1995 movl                           -12220(%rbp), %eax
+0x199b movl                           %eax, +192(%rsp)
+0x19a2 movl                           -12216(%rbp), %eax
+0x19a8 movl                           %eax, +184(%rsp)
+0x19af movl                           -12212(%rbp), %eax
+0x19b5 movl                           %eax, +176(%rsp)
+0x19bc movl                           -12208(%rbp), %eax
+0x19c2 movl                           %eax, +168(%rsp)
+0x19c9 movl                           -12204(%rbp), %eax
+0x19cf movl                           %eax, +160(%rsp)
+0x19d6 movl                           -12200(%rbp), %eax
+0x19dc movl                           %eax, +152(%rsp)
+0x19e3 movl                           -12196(%rbp), %eax
+0x19e9 movl                           %eax, +144(%rsp)
+0x19f0 movl                           -12192(%rbp), %eax
+0x19f6 movl                           %eax, +136(%rsp)
+0x19fd movl                           -12188(%rbp), %eax
+0x1a03 movl                           %eax, +128(%rsp)
+0x1a0a movl                           -12184(%rbp), %eax
+0x1a10 movl                           %eax, +120(%rsp)
+0x1a14 movl                           -12180(%rbp), %eax
+0x1a1a movl                           %eax, +112(%rsp)
+0x1a1e movl                           -12176(%rbp), %eax
+0x1a24 movl                           %eax, +104(%rsp)
+0x1a28 movl                           -12172(%rbp), %eax
+0x1a2e movl                           %eax, +96(%rsp)
+0x1a32 movl                           -12168(%rbp), %eax
+0x1a38 movl                           %eax, +88(%rsp)
+0x1a3c movl                           -12164(%rbp), %eax
+0x1a42 movl                           %eax, +80(%rsp)
+0x1a46 movl                           -12160(%rbp), %eax
+0x1a4c movl                           %eax, +72(%rsp)
+0x1a50 movl                           -12156(%rbp), %eax
+0x1a56 movl                           %eax, +64(%rsp)
+0x1a5a movl                           -12152(%rbp), %eax
+0x1a60 movl                           %eax, +56(%rsp)
+0x1a64 movl                           -12148(%rbp), %eax
+0x1a6a movl                           %eax, +48(%rsp)
+0x1a6e movl                           -12144(%rbp), %eax
+0x1a74 movl                           %eax, +40(%rsp)
+0x1a78 movl                           -12140(%rbp), %eax
+0x1a7e movl                           %eax, +32(%rsp)
+0x1a82 movl                           -12136(%rbp), %eax
+0x1a88 movl                           %eax, +24(%rsp)
+0x1a8c movl                           -12132(%rbp), %eax
+0x1a92 movl                           %eax, +16(%rsp)
+0x1a96 movl                           -12128(%rbp), %eax
+0x1a9c movl                           %eax, +8(%rsp)
+0x1aa0 movl                           -12124(%rbp), %eax

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-codegenArea: Code generationI-slowIssue: Problems and improvements with respect to performance of generated code.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions