llvm / llvm/llvm-project

Unnecessary injection of `vpermt2q`+`vpermt2q`+`vpbroadcastq`

Open
#199,591 3 comments 1 reaction 1 assignee Claimed by @RKSimon View on GitHub
backend:X86 missed-optimization
Dominant language
LLVM
Stars
40.5k
Forks
18.7k
PR merge metrics
PR metrics pending

Description

Zig code: ([Zig Godbolt](https://zig.godbo.lt/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXAGx8BBAKoBnTAAUAHpwAMvAFYTStJg1AAvPMFJL6yAngGVG6AMKpaAVxYMQAJlIOAMngMmABy7gBGmMQSAKykAA6oCoS2DM5uHt7xickCAUGhLBFRXLGWmNYpQgRMxARp7p4%2BZRUCVTUEeSHhkTEW1bX1GU39HYFdhT0lAJQWqK7EyOwcmKoJtQDUVAybqKgQCgsA%2BiDrAKTRAEIAVOcAImgMCgTrrpIALKTrB8iHScbsLz%2BmE%2BWCexzOlxu0Vurw%2B61QVCoSgIJwAAgA1cpEYgQAAcn1hUym6wAbqg8OgzgB2C6nDQAQXWTNJNS%2BCzOAGZbmyfucLhoAHQC76/PD/O6nDm0hnMlnEdag56S7mKw6S6WM5kk1kkrhozHWEh4gnvYnKnl8wUC3F3AU3KV0zVM76c7nfPm4oUSh0yrU6rz6rFG/EvU2ul4MLA0ILodWOx2ygDuCDomHW%2BwWAvo20l2HNuLNNITsq1XnD7suVpt0Ltcd9JYVmCelqF1dudvLCFo6H2BHQwrwLH7bGIwEwQhTVAIEF1nxJPnWXBmpK4nwRSMwBCmdadJd14fnO4bzvZ5orF09Au9GuPjae4cVHq90KPzNOVNu8Y/8YZW3WYRqDMfhOPkoXuAR71hT4RSBE5XCBEEmwIcFQLuKD4URZFA0NHEQ0JYkyQpakbz9eUXTPI4W2FI4gWvYsmW1eVFQfJC1R9XdGJXbDsWNUM3jNLkLUrVtbXtEiT2QcsFifK8X3Y2VOPnbjgxNfjw1cSNMGjTBY3Y%2Bj1mTVN02%2BLNGE5PNBILYj9NlVEwmIQxkAQAAJQJpwFDTaDwABrTBaAAT23eTj3nKTkCotta2ChtH2E61RM7bsIBHMdfknZCuBnVdSS8ZdZwwjct1fBt93NQ9opLcjBPPS86PrEtmPNWKL2fT8KvfT8GQ6n96Qee8nkpc1UUHNZp1OLwvAG8bcp3PrnjCVw6BsHNBOGlhRogaaFqWwJpqCjU4lcMJ1jm9YABV6QAJQAcWwM7Dmc%2BkhEOel0QADUOaIuC8AAxcNttoZaBX6McCAFZBDoFGonNdc0BVUXFJEOd51kMSkAaB0xgEOADkF8yN1jAMA4aeJgxy8Q4EaRlG0a%2BPsBTOmpQfhxGBSoTAmAIeZx03ZymAUCAMcCYGmc3cHIfZznuYUT4oZJVQvq8Kh9p6v8FC7HsmGU3DVOXMJtd4wlPmQA28NNYkMSDHW%2BMLcT1mITd5m2J5iFcaxrPq2UVgISJtj/VFptoWgSRYNn1doaaIEtnDDdNT5o54s3%2BPjg1E91i3U5Um3iupdsA4moOQ7DrtI6YT4wmNlWuu/Lrf22FLMDSvAp0OTLdVN3W5wDdYE6z/Ce8z63CQ93dm/TYbUlQdabDYCBiRIQmwAum67oep6Xvez7vp%2B4kHa54hnfppIhwFBuJ2b6d8vnT4lxzvendRhQWHTabtS84AGAAR3WAASbLxuiHyJgdxPgAL5GEEBZwvCAMuHvCUE0bLMhArAzcdwoFeGVCSaa6YAC0uYB5W1jvxGYiCmTIIuMA6E6CsETXTLqZc4C0Gv2wTOGanskHrCvEWD8Vd6QdQ4DMWgnBoi8E8BwLQpBUCcAAFpmC%2BHMBYaZxoch4KQFE4iBEzG8iAN4ABOAUui9FUjeFSaIXhdGSGiJILwq4hEcDeLwFgEgNAaFIGIiRUiOC8AUCAVx6itAzDgLAJAaB1qpjIBQCAoS4jhJAMYAgrsGDeT4EtSIPjBaaF4GEQINR/KcFUdk5gxB/IAHkwjaCxPk3goS2CCBKQwAKmTSBYAWsARwYhaA%2BO4LwLALBDDAHEBo5peAHYVBJE2JpKxyiuB9lU8ggg/JNK8vZXJzgsBNISYOOZ4ziBhESJgW4mA%2BlGC8kYTJMwqAGGAAodEeBMCJhKXERgcz%2BCCBEGIdgUgZCCEUCodQQzdA%2BAMGcrG%2Bg8BhB8ZAGYqA4g2AgpwHBJT1iXT8hzJQP1%2BbPBwSDTc6wqbIzeDg05rhVDrBwSwCGrhlTGAYDs6IZL%2BAsEIDgqgDk2A4ISG5SIvBUA7OIBSCZUKLCopaJ4CADhBieFXP4MYBQih6ASEkOFk90hSqyEqlInQ5WTGFVYZVbQBguAaHoZo%2BqRhau6MUPo7RJUmvNbKy1EgZgKAUYsJ1%2BhhGiKaZ49YWN1gJI0t5dMuBCAL2UUuXg/jNGkAQBzLAUQ56kG0dEQUGgU3QK8CYjQHI3gcnxHYhxpAnFcBcW471nBvG%2BLUecwRnAvCOOca49xPKK3Vo0USUgOykh2DeEAA))

```zig
export fn foo(src_: [*]const u64, src_size: usize, dest_: [*]u64, offset: @Vector(8, u64)) void {
var src = src_[0..src_size];
var dest = dest_;
var v1: @Vector(8, u64) = src[0..8].*;
src = src[8..];
var v2: @Vector(8, u64) = undefined;

while (src.len >= 8) {
v2 = src[0..8].*;
dest[0..8].* = shld(std.simd.mergeShift(v1, v2, 1), v1, offset);
v1 = v2;
src = src[8..];
dest = dest[8..];
}
}
```

([Optimized LLVM Godbolt](https://llvm.godbo.lt/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1C1aANxakl9ZATwDKjdAGFUtAK4sGexwBk8DTAA5DwAjTGIQACYANgAOUgAHVAVCOwYXd089JJTbAT8A4JYwiJj4q0wbNKECJmICDI8vLktMazyGGrqCAqDQ8Ki4y1r6xqyWhRGe/z7igbKASktUN2Jkdg4AAX5UAGoAUgBmABFdsTwmBV3TVDx0XYgEgjJdvGjpXaeXo6dY3dVXu8jtglp9nrtNphVKwEvQAHQ7fYaACCSORWBoAVegnCzFo11u90h0JYsMwCNQqEe4IYAgYbhMu2ImCY6AEtAAnmdaHhgAxdn9RE9VpgFBBaQEFgdIgBWDSkQGSaUylpg4i7CX0xkAd2IhEw7K55z5At2QoIIrFEswUv2ssiCp%2BfwBb0kwOVhylbgYzDY6AA%2Bqz0OrjfyuAcAOwAITR2EExA5IDRu2VcIUxFQTDhEbhGhlEYOJzO6HuruVqoAtLFk8qlUdTnhkKTdm5gARFan05ns7n8wqIzWQuq8OG7TKPgYwvixwAVBCMOEJZnz1nhBWTtrK7C0JRotFzhdLzArrARGtjmWF060TP3J3/RXAhVfZXy7m8/nVlEpsfRK/F0t3nLBUKy4aJz1lAt612HcEGHIDfwVQ4IJlP5oKDDU3G1DUFGwssxwjBUuBQ1RniYfV1XQhhALrWV4l2Adv2VABOf9DBo5VogVGVwKYsdaCbBI4RYDA4VpdtoMbZtMAARw7MdmO43jkRTIdXlHWUBNJYTRPE9cmCnZUDwYRcM1oOEb1QBIoUIfTDNnecTKXVxTOPFlTz3FFjNMlyjxPAZB3VDdp1lbznNoTzkTCsykz4zT0zhPBTCkVjoISBA8HkmUo2VUjiHIgg1yMxyfPMvz3PCA4ZWOR1suVHdiES0wxKhAguDlR1QpK8KquOFCGqaqRDn/dLMvwuq3wcw8zNc/zKOq2qcv4hKkpa0ipA%2BKanLM3r%2BpW5LDjrItRqynL6K20rZoq%2Baaqqpb4sa1aAnWw4ZU6mVotcXa4plXtolQ0qRoywtfgfV13X2Oqx0iB1iumr7IduyH7plN64e23zl2u76VPLDR/wUBB8Xwh7BsOpCUIUdZTGATAEikKCi1pwr6DYQQXzweiX2hhUSZVDRKep2n6ckNCmcwFnMDZggOa58ExypzAabphneaAisgR%2BrhRyLQniYQ0mkq4cndmQn7FeVkXIn/Zm2ilxgZfBTnn3l2U3z57WULTDMsw0SQNFzOE0ASDkb1ZQHoLDmiXco2ULeFqRYdDAUUK4a3oL1%2BTDYOj4zdxhWhZV/2bYlu3pdlmPXzV2iVUiQWlYTyQddOW3WYdiu1WVeOi/doCv3z2Vjf/KOQaVF0gUObBK4Lhui9VZP%2B5/QejtOTO%2BYGo2TbzpeZW7%2BnDjFlvS7b9mnbl2OOqzlU3XNwv99S8XJfLs/p7ju/jfost/dTy9I9vEHrbjzdJPV%2Bu936HEUu%2BE0i9yx/gzkTK%2BG8c4U1vrPfecDH5l3bi/TuY5e41zAvXS2xtGZHyftg4c58u7gK4h2HiXsuxZliJIHMAdg6h1vBHIsI9XSgL3iQhUC9U6kOxEoeoWDBAg2dI%2BSenxbgKAENXTsPtcz%2B0DuwqOpUlECy1ofXYhM3BUCoPQUwlQiCUUOE4MeMjsDlkOI6Sx1jwayKSHgBRDAHGgxdIcOusifh4B8bsd2gTVQBOtrDMJpteaBNce46J1tYmKNeDE%2BRSTImJIYMCVOD9V4IEMcYpWZiSBSLBhPWxY4uCERKUAiGg9zqWOkWEiGljInBOtp/QJkDIlcDabsbW8S5FuLSSkoZHjkkJNSZkyeKFIj43gfkkxRSLFOEATY8saMfirOcbYjJnjGk%2BOaU4VpAzQkjLieMwZ5z0mTIGbsi5dzrmjKyT9SIzd9F5KMYsmwxT7w1L8YPSBvy1nQ0mg0sGBy/EtMCb0054SBn2IuR8SJHTrZdLOQIZ5A8ZQw3/P4MR5DJFAu2cqV5Sixze27Mw1hQcrIcPDuFJRjEsWRGGvMz5hTvnLMaWU1MeZ/qxC0dU4Fg8qlEoheUqF1tYW7AiYEhFkSkWBLRpE2hkSqnIsxTvSIK9di1DoGaMQ04wV/NsZsEw5gER6zhKYWIroIBEp5dDBFDrgHlNlH9AGDKhXErHJ6GskwSCYG9Y6%2B0HxuZvzQVIeiQifpILWm1V6bESyIP2sbD4MDlqPWas9NqkgdUYXXqmyQCKNY3yxXGnN7U5lFgLQbGUSCUogWIj9cKiVCqNUEmJVAEkixSQSLsWSKas3xqrQqHRuM1IjmVK2iiQdtJ6RggZTcF1W2WWsqoQgFlKTrtsou%2ByXV4YRRRPubqM0102QIFuqyF7YrMt/rrNwIQr6qkzU1Edr0ZkYNOCwBkQ632VrzU2ohjd71kIkY7ShoD8EkuUjvfhkgv27FbvbU%2BkHcH2jJfaWDuw1LBXRpdc9G6CCRU%2BuZQjhBb07wpVmVh0QuBwm9BY04J1xoo2oz2PMoqD3bTcquG6i0SUbO4wR7dF6r07oktVL2CQGDRADoxoGmVuZQzdu9aKvHTy9QEzPYhkghMfVPS5cjl7jM4yo3mZiDGGBMc%2BMDZTKNYYrqxnxrTd1qGRoQ2pwzZHRNEfExeszvKeIAwU2lYGLqIYqdRl56aGnKqI20/aRzwnV2%2Bc3aZxGMyRF9pbLQdsfNaH0KYpOjS2Kql4bHNuJQdll0pec6eaIecT2xbmo1yjOGgpLpCgZxgJHHLtdfUlRTp0gkxZ4611lC03ODeza1MbgXyWMI43R4brHlHdmpVxnr/IEvTfdUt2j9HGNjaunxxrC33V8tQsNiLfios9P08ZVzyMgv8qs98OrcXiDncy6g4hsoS4Eog68Kh5KLPvcw/W/alNvQAGsgw2eQ8/ND4bfoybkxDv9SUYcMHhyWYg7U3lI4oSDvhcOEdKM1li9jfsA5sNpSPP%2BrJFRk9xwjwngieTQJx3j4M7V06YJPsD526G0eyfk9ZyHSCefs5lKywXKHheg7juT/H/PGV1xeXoxnjjSmutZ7zgncvOcfhTubVXfPxyA/Ax3VHi5xeY8LVmmXavUbW6F7b12u8LdG6RUBHpZatU5Jgv/TZeunyi4UD79qaMY1Yqj2z13iHieodJ6L%2B3GPjtY9MC7y3IiU9K4N7L1V/vZkMJUVS9RDPQ/cP/rwyP0e%2BxQM/ChQ41aGwMHxeB4NrrLlpLrTTtR9OQ5R20a3t5Bj2WmM5aPcP/zsX1KsXPnZNzvXipBsci50rZXW3leisZjyrn79uZMzVHoBe5IWRy8xPfaly9BV44VcuX3GvGYczfyKBloqlTC6VDzj/3Kn7TI/SHDy6X5T5LIALL4kqAqWJbI8p3Jiq%2BISpHLQonIn6jIYFH4TKYGAG4GH7DI4HuJn6%2Bo6qT4FLT4363Zupy6Oav4%2BqyigF7LgrIEb5oFb4DI75RKIoDIoq7Df595TLYCt6gaiLhBA637z4mx8zsaV7D50roCMqt6IbkFfJUH0Ehq/RXaL7cq96%2BoP77KsH%2BIhKcHwoDKKrWzKqBKqqBLqqBLVjAFYqHAiJ6r4iiCMjUEQjmosCWpEzWq2rvD2oaF6GMG0KeFg7BY6HQG%2BoLD%2BrmJBrhGMFVKo78Kygm7c7m6J6W56IF6e4XwZ4S4vBO5NS55G7B65E4IpGN6fyl4Zr7YqK05V4j6cJvI8LvBF6u6QJx5wbR5ybu6K55Gpjo6FFS7Q6ZGG5gRE7HwDGVFe4J4TFyZKLGzYa%2Bra415L4modF850bpEt7jHs7RAX5IbTHI5p527DGO51rS77Fq4/YK6nEi5VFZEE6HFLFxCt7B464rLL5bEvEIrdFdy9E6oVEo5e4FGXE1zXHx69GiEglnFzFAlLHMLl6UosJNEKFwitF17tEN7PFgSx5c57FYrFySSd7iHd6eEPID5LaNHyGaKhJATjo7xNwEwfIUGQE/BOKaEHyeJcm96IH0Hr7GHWwwqmEXJ75EGEGCFYFSkZIkGyiSBHGqHX4/LBF37%2BzMEmq1gv6P5NKQqoEim8Ff4nK/4ykH4AEEFCEoTFqslX6UGqnfFam%2BqwGOlrICm6lCmSqjYcF4HYHSm%2Bmymr6WlmnynjhkFslqEOm6Hql0G6maHFqalv76kf4mEXJcESm7AWECjGkBlWk/R6a4pkniJC6SE0GAZXyyFol0ktFKH5kqERkqlcrRGMEbJqnz4alr5GFenb5mE8EXJWHWw2HWx2HtKhksL/iuEGoeFtmmreG%2BHmQ2p2qJHjhhEzkeitlxkhFy6xF/YJwxD9EPHK5gKRppEdhU4pgBrMilm1jJFzHvwxC7Fm7Ql4nRDJ4nEk6PFgkXFZ7FHY43HbH57vmp6fkXzzEHEl5KhcDMSa7U40lD40rNHhxHFtFhoIkvlVIAkKy9E5FAWF7p7fmS7Z6lFgTlG4WDFYUvk1FKizJMm1hrHM6ck/G4kLFdGElPk9F4kRjt7HFA7kXuoEVFFXFjHPkTERhTG8WzGgXR5cVKIsowXMmfHrHwH67MXs5iWPl1He6cVHFwkgVDEO4/lCXO7/kE4RhgE8U26SWAnaWyWiwolMJVkIUYnIXYmoVSWcX/FsWaVyiFld4lmUlBnUkNHwUaKcIRKMkoQqi2kQEz6MVOkKmL58nujumGHv7sHdJimRIZn/6Snmm5UhmOE7zYrRXsmxVrkXgGHNmow6mpXJnpX2E5ndKmm5lmkFXCE/Ry4lWRnLLKXqkum9UuKr5IFpWGk%2BnBktUTXjVTX76hlW5sqlXqGbl37YqJkMGozOqCldkGnekZVpm9kKpGkXICFymFXKhu6kl%2BWK7XkXh%2B41yVnUqhVIW1lYo8RdWNnXUKkbnRnz6XzDV1VSqZVyrmEDIDm7BDkMS8GzUuHkRuGGrXlmpmA%2BFUBWqLmBHLk8SrXxlfVVV%2Bq7kqyRCAUSWgmgX3nKq1FxGBofWoy3kk0nkYVeXEURjAlkVWXkoCWjHGUiVqWwks3E3WWiW3UypFawXBV05OWaLmUoW/GVIEmm6aVgVq4RhvlE3wn5Hs1EUmWVKE2WV80UWiUQUyrnlnX0V3i66bGqWK301y2M04Uq16Vs0GWEW/k56a0RikV21HkK184RhUUyrMQrGygyiKUMVwFMVPGiWsXW2a2xDcW6VHngmGWQnCUcUTGxDiU62q383s4x1KKHBpz2VwhyHi2cKS2uXS1p0aUoR9EXXkn%2BVrlUl3VwVi2PXoBwjyoRU/QrbzXdWz7xWoyJXQEpUsEjU7WpmRLpmtWTUWkzWnW/hKkNn2lNl92LFU07Gdkj29J8ECE9InJ/5BnT25Whl3HgELUOkDU0FB2eLn3%2Bl/UoEpkA1T35WP3%2BnTWH2z2ygIS6wL0cnlUf2xnfU0GNarWenbWil7XinA0XJb1tVV2iF4q11XXLk4kyFLZF0t1t3PU7yvlvWL1U3Rar2VXeJbW7Xj37WBJZmg3g0jkpzv08TQ36ruFGpLWyII0WrI1%2BGo2SBBHMOAOrk8NnXY19243x73m20Z320Rr/Zk2QXQUU1XlIM03ub/bRoM3R06W82Z0O2Z5O1GUlHR3mVx3l3hVKg%2BK0WLai3omaI6pS0W186xCeVR1c1q7MIHkfnx3q3O3EWxA80e3l2C0%2BKaVxDDzrFJUgK2ME7eOV3R3K3iPuOO2CVJ2c0p3Z3a0e6s0q54mxAG2HByZV3B2m2unbLl1W0ZFON2NiNpO638XxMc16NlMRPu2xPl2%2B3OEB2/SoOOXoPWNl3hNcCxCR2lM7xcW%2BUIPSzXkN3ra%2BwhXV7hyC1mOQQT7f1lUbFP5DC91ulDWbUb3oHgNZWT2v0v0z3tVYoRjz12k/38MESENP7qXr3/Wj3tKNUhLNUHM5WCGhlmU4MXPX2/j9WD2bMenEP1UP2vP71P2gv4FHMoRM1fPLMAPKinOY1blmXANAujUkOBIT19mf5HUwM/QRhwNFkSHLlM2Q73WWOcKC1MpDP1nnNwtVX/RIt34yV3N31j2YtkPWwUMDJUOQ20MRj0Ow3Tn8OsNI0o0BFcMkt8Pwu/iCNP7CNwb3mNOVOaOSN7nSNC3YaXkJG/35iKM6Z7kDNEnJNq7MSx0aMSNi7aMJP1TJ1Z2mvp0quWte0E5mu53Ik/SD7N0zOt2iE2Ph3s7MTzyqP1NQXqO%2BP4U1Ma2hvMQGMWue3R7QW52yP4sm3rNFO9OxtRMxvM0RvnFRueOa3MQ%2BNNOZuC2KmB4Iv5NQHm0Bumuy2DP2t87%2B2uPAVxPWu1N/kxupMzFVNaUTH%2B1KJ5rzPtMV6dM%2Btwh%2Bs9N1vNslPGvKgx0jPFmIP12BWN0WPVnhwasjtp2wuLWhM0E%2B28n/O4G31sHovstwoQPP1vO3tAHHM7yxBnMxWLUyt0TXNrUV2svnsPPZm4tb4vMH2HNv0PsLvmXKm4Nh591u1X0nvnJnvCm/t72QvgtAd3sofvO0MuPd3vXLlPtMvz72OovbNjUcvXsHVQNPMgcoTeNLvEu6vMJksdMPUTsavUsLu0svtRlVUEsEc0E53fuIc9nkfkMg08sDLUMOGgdjixCCtTlMPwuivzn%2BFLkMfSs8dytrUKtKMJxt6tt4UpGk251l5MTatU2yd8LgJviYUZMDsVO9uqtWsjHRsmvNvKsOfOuJu%2B15qaVesUvhyIb%2BtoUDtGvsVNvEA0X6d8VOcQm2tJPhezKOsecJvPE0VDvC2PtptxU2K/GJfZuucRcaDhulv5sdsucJcaBxt5vBcI6zLGOZmxCaX9PBMh2FNlK5eVf5cVe5sldfkFu6NdsFezIltOspeG6zKC1yiVvmOokseIWt2BfTs1f47DddcKTcXwPLtjMBX4FBXdi0nF0Bdj4/RBt7sOkHsLsD1alD1EMkcYtXt7M3tgvAeYfSeyjQVndL1P5utU1BvEf3Ob1Ud9KAeoeg%2BvcoSxufc1tP79OwfXcAu1VssXsgtofPfod%2Bno8Yq0PMThl0uvtVVJu/cbWAt3eXsyqcuZmHWRLHX3sQ%2BEuXXbe6s49MdjtzcYkG3scKScen1fefuaeaE/cIfdmA276QORKUMSd8tvdB1yeMPw1znsMLkSvcNvtB3qd92RNU3acGsqx51RfpPHlSPuuVtmfLnMT6tqu6/BuONDcaAxOjegIJ06OJN1O289uHkdcG21wF0HfoMiJBfuXjcaBzthd621caD2ce%2BRtleFv1OzLudR8zuFe%2B3YojvMRZdm05fhPx9re2e1c9L699tO82szalGvJJeJ/LfBivLQaozyUsTVtQdZ9J/l%2B5/9v5/FcO/R/Oex9DdDzQSGPZ9pxKI8S%2BfMf%2Bet3%2B9LeB/58OONsVIaAbdEsUmru7frv7fTPzfZjHdYo9KLN4/ncE9XcbOntbMA87OkMidg%2BY95Xg9axFdQ/Lk9IfuaF7//dI%2B/vQMAe737Oo9PK0M9JwOSzRaj83e5/N4ep/Enuf1I7X80ecAjDjf1DIB5H%2BurHpP/SqqAD3%2BP7MBpf0e4UccW1PPFrvzzB0cV%2BlzQeH7BZ6zcJ%2B2/DsJzwoHc8e6ZvfnluWf5YChOIvbgvgKVTicLkknJAcHwnIw15O8vRGsp04Yq8MBdvPjixBYF35telvfeJ32S6WcTyGrHznIx1bkD%2BYFvQ3rpyTghsqMB2QOCIlrTr8aMuYNeqWj2jDoc0SaDiDNm4j517%2BeiHLK2Hyx7cLBAcKpOxxKx4x6IFWbjDVm6xVZMAkUUIe1mZDtgbgdwPcBGD6jHoUQWAZAAYHkZrklOivFTmjRnJ8c%2BOtoFlM2mRAcAlgtATgDKF4BeAOAWgUgKgE4A%2BAfAAANQACyuwAAJIAAlfRCsDWAJEChvAAgJoGKFLBYcIAOXKom8Zp1ogBLM1iwkUilCOAkgCoYMJqGcBeACgEAPKAGFVDihpAOALACQBoBSQdANcBQAgCHCEgxwiICYBsDEA4cfAOgO2nWEQAQgywkIP4DqCJhuAvAN4cwATAAB5EINoDMScAeApAQ4dLD%2BEMBOQywrACEFbBOBDU6wr4aQCwAsBDAwAcQNsJRF4BmQVQUxEiOqFQhKgbgQqCCN4D%2BAWYywnkEOA%2BEuAsAyw54HgBYBkjSApiYgCEGSCYBjgUsdETyCMCDClgxiJgMAAUANC8AmAbUH8OsiVDQR/AQQCIDEDsApAMgQQIoBUDqAsRugFoAYH5HeF9AeAEIOsMgBLArIHQJERWD%2BHDQKwLAZAAkDcD1gAAXgwDZHlCahbIvUFgCNEQAlgFQKoPYAgCOAxgzQUgL4BmBFASg2QZIKkAEBBjIxuQNIL0HDEDAJgdsP0Z0CmCxiUx7QaoFMETH9AIgEwDMa4CaB6BJg3QPMXMALE%2Bjuh6wCQCULKFLCsRtQjgDBAEgPBngcOKUBAFwCEAfkBQhYP0IFHDCQACGOEMWykB9MfE/sYtqSnmGLDSAzItgZUOqHNi1hGw0gFsK0ALB6xHASII2JXGrCNxQ41keEBSD2BJAQAA%3D%3D)) ([Unoptimized LLVM dump here](https://gist.githubusercontent.com/Validark/4ba19ada35e6b595ff3592a4e9253810/raw/04a7bea422cb6c127ca524420dfadaa5146234e8/llvm_unoptimized_dump.llvm))

Emit:

```asm
.LCPI0_0:
.quad 8 # 0x8
.quad 0 # 0x0
.quad 1 # 0x1
.quad 2 # 0x2
.quad 3 # 0x3
.zero 8
.zero 8
.zero 8
.LCPI0_1:
.quad 0 # 0x0
.quad 1 # 0x1
.quad 2 # 0x2
.quad 3 # 0x3
.quad 4 # 0x4
.quad 8 # 0x8
.quad 9 # 0x9
.zero 8
example.foo: # @example.foo
lea rax, [rsi - 8]
cmp rax, 8
jb .LBB0_8
vmovdqu64 zmm3, zmmword ptr [rdi]
lea rcx, [rsi - 16]
mov r8d, ecx
not r8d
test r8b, 56
je .LBB0_5
vmovdqa64 zmm1, zmmword ptr [rip + .LCPI0_0] # zmm1 = [8,0,1,2,3,u,u,u]
vmovdqa64 zmm2, zmmword ptr [rip + .LCPI0_1] # zmm2 = [0,1,2,3,4,8,9,u]
mov eax, ecx
shr eax, 3
mov r10b, -128
mov r9d, 8
xor r8d, r8d
inc eax
kmovd k1, r10d
and eax, 7
.LBB0_3: # %Then.prol
vmovq xmm4, qword ptr [rdi + 8*r9] # xmm4 = mem[0],zero
vmovdqu xmm6, xmmword ptr [rdi + 8*r9 + 40]
add r8, -64
valignq zmm5, zmm4, zmm3, 1 # zmm5 = zmm3[1,2,3,4,5,6,7],zmm4[0]
vpshldvq zmm5, zmm3, zmm0
vmovdqu ymm3, ymmword ptr [rdi + 8*r9 + 8]
vpermt2q zmm3, zmm1, zmm4
vpermt2q zmm3, zmm2, zmm6
vpbroadcastq zmm3 {k1}, qword ptr [rdi + 8*r9 + 56]
vmovdqu64 zmmword ptr [rdx + 8*r9 - 64], zmm5
add r9, 8
dec rax
jne .LBB0_3
sub rsi, r9
sub rdi, r8
sub rdx, r8
mov rax, rsi
.LBB0_5: # %Then.prol.loopexit
cmp rcx, 56
jb .LBB0_8
vmovdqa64 zmm1, zmmword ptr [rip + .LCPI0_0] # zmm1 = [8,0,1,2,3,u,u,u]
vmovdqa64 zmm2, zmmword ptr [rip + .LCPI0_1] # zmm2 = [0,1,2,3,4,8,9,u]
mov sil, -128
mov ecx, 448
kmovd k1, esi
.LBB0_7: # %Then
vmovdqu ymm4, ymmword ptr [rdi + rcx - 376]
vmovq xmm6, qword ptr [rdi + rcx - 384] # xmm6 = mem[0],zero
vmovdqu xmm5, xmmword ptr [rdi + rcx - 344]
add rax, -64
vpermt2q zmm4, zmm1, zmm6
valignq zmm6, zmm6, zmm3, 1 # zmm6 = zmm3[1,2,3,4,5,6,7],zmm6[0]
vpshldvq zmm6, zmm3, zmm0
vpermt2q zmm4, zmm2, zmm5
vpbroadcastq zmm4 {k1}, qword ptr [rdi + rcx - 328]
vmovdqu64 zmmword ptr [rdx + rcx - 448], zmm6
vmovq xmm6, qword ptr [rdi + rcx - 320] # xmm6 = mem[0],zero
vmovdqu ymm3, ymmword ptr [rdi + rcx - 312]
vmovdqu xmm5, xmmword ptr [rdi + rcx - 280]
vpermt2q zmm3, zmm1, zmm6
valignq zmm7, zmm6, zmm4, 1 # zmm7 = zmm4[1,2,3,4,5,6,7],zmm6[0]
vpshldvq zmm7, zmm4, zmm0
vpermt2q zmm3, zmm2, zmm5
vpbroadcastq zmm3 {k1}, qword ptr [rdi + rcx - 264]
vmovdqu64 zmmword ptr [rdx + rcx - 384], zmm7
vmovdqu ymm4, ymmword ptr [rdi + rcx - 248]
vmovq xmm6, qword ptr [rdi + rcx - 256] # xmm6 = mem[0],zero
vmovdqu xmm5, xmmword ptr [rdi + rcx - 216]
vpermt2q zmm4, zmm1, zmm6
valignq zmm6, zmm6, zmm3, 1 # zmm6 = zmm3[1,2,3,4,5,6,7],zmm6[0]
vpshldvq zmm6, zmm3, zmm0
vpermt2q zmm4, zmm2, zmm5
vpbroadcastq zmm4 {k1}, qword ptr [rdi + rcx - 200]
vmovdqu64 zmmword ptr [rdx + rcx - 320], zmm6
vmovq xmm6, qword ptr [rdi + rcx - 192] # xmm6 = mem[0],zero
vmovdqu ymm3, ymmword ptr [rdi + rcx - 184]
vmovdqu xmm5, xmmword ptr [rdi + rcx - 152]
vpermt2q zmm3, zmm1, zmm6
valignq zmm7, zmm6, zmm4, 1 # zmm7 = zmm4[1,2,3,4,5,6,7],zmm6[0]
vpshldvq zmm7, zmm4, zmm0
vpermt2q zmm3, zmm2, zmm5
vpbroadcastq zmm3 {k1}, qword ptr [rdi + rcx - 136]
vmovdqu64 zmmword ptr [rdx + rcx - 256], zmm7
vmovdqu ymm4, ymmword ptr [rdi + rcx - 120]
vmovq xmm6, qword ptr [rdi + rcx - 128] # xmm6 = mem[0],zero
vmovdqu xmm5, xmmword ptr [rdi + rcx - 88]
vpermt2q zmm4, zmm1, zmm6
valignq zmm6, zmm6, zmm3, 1 # zmm6 = zmm3[1,2,3,4,5,6,7],zmm6[0]
vpshldvq zmm6, zmm3, zmm0
vpermt2q zmm4, zmm2, zmm5
vpbroadcastq zmm4 {k1}, qword ptr [rdi + rcx - 72]
vmovdqu64 zmmword ptr [rdx + rcx - 192], zmm6
vmovq xmm6, qword ptr [rdi + rcx - 64] # xmm6 = mem[0],zero
vmovdqu ymm3, ymmword ptr [rdi + rcx - 56]
vmovdqu xmm5, xmmword ptr [rdi + rcx - 24]
vpermt2q zmm3, zmm1, zmm6
valignq zmm7, zmm6, zmm4, 1 # zmm7 = zmm4[1,2,3,4,5,6,7],zmm6[0]
vpshldvq zmm7, zmm4, zmm0
vpermt2q zmm3, zmm2, zmm5
vpbroadcastq zmm3 {k1}, qword ptr [rdi + rcx - 8]
vmovdqu64 zmmword ptr [rdx + rcx - 128], zmm7
vmovdqu ymm4, ymmword ptr [rdi + rcx + 8]
vmovq xmm6, qword ptr [rdi + rcx] # xmm6 = mem[0],zero
vmovdqu xmm5, xmmword ptr [rdi + rcx + 40]
vpermt2q zmm4, zmm1, zmm6
valignq zmm6, zmm6, zmm3, 1 # zmm6 = zmm3[1,2,3,4,5,6,7],zmm6[0]
vpshldvq zmm6, zmm3, zmm0
vpermt2q zmm4, zmm2, zmm5
vpbroadcastq zmm4 {k1}, qword ptr [rdi + rcx + 56]
vmovdqu64 zmmword ptr [rdx + rcx - 64], zmm6
vmovdqu ymm3, ymmword ptr [rdi + rcx + 72]
vmovq xmm6, qword ptr [rdi + rcx + 64] # xmm6 = mem[0],zero
vmovdqu xmm5, xmmword ptr [rdi + rcx + 104]
vpermt2q zmm3, zmm1, zmm6
vpermt2q zmm3, zmm2, zmm5
valignq zmm5, zmm6, zmm4, 1 # zmm5 = zmm4[1,2,3,4,5,6,7],zmm6[0]
vpshldvq zmm5, zmm4, zmm0
vpbroadcastq zmm3 {k1}, qword ptr [rdi + rcx + 120]
vmovdqu64 zmmword ptr [rdx + rcx], zmm5
add rcx, 512
cmp rax, 7
ja .LBB0_7
.LBB0_8: # %Else
vzeroupper
ret
foo = example.foo
```

With inline assembly, I get: ([Zig Godbolt](https://zig.godbo.lt/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXAGx8BBAKoBnTAAUAHpwAMvAFYTStJg1AAvPMFJL6yAngGVG6AMKpaAVxYMQAJgDspBwAyeAyYAHLuAEaYxN4ALKQADqgKhLYMzm4e3n5JKTYCQSHhLFExXvGWmNZpQgRMxAQZ7p6%2BFphW%2BQy19QSFYZHRcRZ1DU1ZrQojvcH9JYPlAJQWqK7EyOwcVAwA1PyoEAprAPog2wCkAKwAQgBUlwAiaAyT266S8duHyEcpxuyvv0wpG2WEmJ3O1zuF3ubw%2BqCoVCUBFOAAEAGpVIjECAADmBsIWC22ADdUHh0OcfFczhoAILbBkk%2BqfNbnADM9xZ30uVw0ADo%2BV8fng/g8zmzqXTGUziCDMC9xZzQQQjuLJfTGcTmcSuKiMdYSLj8e8iYquTz%2BXycQ8%2BXcJTSNQyvuzOV8eTiBWL7VLNdqvHrMYa8a8TS7XgwsDQQug1Q6HdKAO4IOiYbYHNZ8%2Bg7cXYM0401U%2BPSzVeMNu66W63Q22xn3FuWTC0Cqv3W1lhC0dAHAjoQV4Fi9tjEYCYITJqgECA64HErzArhLElcYHwxGYAgLWuO4s6sOzrf1p2ss3lq4evle9WHhsEMPK92e6EHxlnHz3ONvuN0zCqJINXY7BE9Tpt8pw8lCjwCC8sLAkKgKnK4gLAsq4LgQ8MHbKuSIBga2LBgSRKkuSlJXr6srOiexxNoKxyApeRYMlqsrKne8oqs%2BjHarq2zooGeHGrEpocuaFbNjadqkUeyBlmsD4Xk%2B3rbkxJL%2Bjx%2BpYkaIaCWGrgRpgUaYDGikMdsSYpmmXyZow7K5sJ%2BYkSZ0qzjJyDUS2NaKde96iVa4ntp2EBDiOPzjiqXBTsuKmLtOmEIkim6eYeu5mvuiX1hRwmnue9F1sWLFmt5Z6Pu%2BaWUu%2BdKvuVtIOk8LyTBSZoov2f6TmcXhePVbVeAl6q1beESuHQNjZsJTUsC1EBdQNQ3BF1PUOgkrgRNsfXbAAKrSABKADi2BrUcAAStJCEctJogAGkcFxcF4ABiYbTbQw18iMI4EHyyCLXy9TIAgLpmnyqg4pIRzvNshgUo9z2mMARxAcgADWDjbGAYAA5MTAjl4RxAyDYMQ58PZ8mt9RvYDwN8lQmBMAQqyjuuB1MAoEBQ8EL2k%2BuH1fVTNN0wowLfcSqjXV4VDzRVdJbJ8HZdkwOEafhJrAhE8tBgJi7IKr/FaYSal8ZpBIOblxDrqsOyTMQrjWEb27Sj%2BBDRDsUsol1tC0MSLCUwoHZdRAvG4QbSt6wHiuCcC/sK%2BrRIR2rOscWVfIu%2B1bse17PvtRATDK8CyDi9Vn4S7SUtBZgIV4BORzhTqWuB2HKk16Husx9rhuvpJ2zl2mTXpKg402GwEBEiQKNgBtO17Ydx2nRdV03bdRIm7TxDm0TKQDnyJdjuXk4xbO8559Ki9m%2BDCgsGmXVarQZgMAAjtsAAkkVtRcPJMA8wLPzyETv%2BcXgv9ci8xTtUcoyMCAD1wPF/l4RUxIuppgALQ5mDpHHWSwQEMjAVcN%2B0IoGwPammHUi4v6QIvnAqc3V0HbFOBeQsb486VQ4EsWgnALi8E8BwLQpBUCcAAFpmE%2BCsNYqY2psh4KQZEHDGFLARiAWIABOPkcj5E%2BFiD4C4Xg5GSAuJILwy5mEcFiLwFgEgNAaFIOwzh3COC8AUCAMxEitBLDgLAJAaBxopjIBQCAbiEgeJAMYAglsGAIz4ENaItiWaaF4BEYI9QACenAxExOYMQOJAB5CI2hMSJN4G4tggg0kMFoAkyRpAsADWAI4MQtBbHcF4FgFghhgDiFKfgE21RiTyiif4VQVRXAOxyeQQQ7RulXwiMQeJzgsDdMCf2QZnTiARGSJge4mBGlGCvkYKJSwqAGGAAoNEeBMAJjSQkRggz%2BCCBEGIdgUgZCCEUCodQpTdBzgMFsmG%2Bg8ARFsZAJYqAEidFqfAtJ2xNrtGpkoW6TNbzwNeuubYuNQaxHgZs1wqhtjwJYJ9VwipjAMAWRcTF/AWCEHgVQCZbB4FJGCA7YgvBUALOIOSLpfy2gdDSPYCMYxPBcDxIEGYxRSjeGXLkVIAgeUSDxGKzofQhXzGXJUaoAhuijBcM0PQSrOiqumEUAYMRFVTElYanocr9USCWAoQR6wLX6BYWw7pVjtgw22IE3SCM0y4EIMPERC5eAOKkaQBA1MsAxEHqQGRFx%2BQaCjX/coPgNBsliGyPE%2BjDGkGMVwUx5jHWcBsXY8R2ymGcC8EYkxZiLEMrzYWyRhJSALJSHYWIQA%3D%3D%3D)) ([LLVM Godbolt](https://llvm.godbo.lt/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1C1aANxakl9ZATwDKjdAGFUtAK4sGexwBk8DTAA5DwAjTGIQAGZpAAdUBUI7Bhd3Tz04hNsBPwDgljCI6MtMayyGIQImYgIUjy8uYtKkiqqCHKDQ8KjpBUrq2rSG3tb2vILugEpLVDdiZHYOAAEQqoBqAFJIgBFVsTwmBVXTVDx0VYgYgjJVvAA2aVXL682nAA5V1Rv7zewpx6vVotMKpWDF6AA6FbEdYaACCMNhWBoARugnCzFoRxOZyBIJYYMwkKqFwBDAEDDcJlWxEwTHQAloAE9drQ8MAGKt3qJLrNMAoIGSAhMNgAmACsGlIX0korFDX%2BxFWgopVIA7sRCJgGcy9uzOatuQRefzBZhhetxSKpS93p87pIfrLIsK3AxmGx0AB9OnoRW6jlcDYAdgAQgjsIJiIyQAjVrLwQpiKgmOCg%2BCNGKgxttrt0Gd7bL5QBaV6x2UyzY7PDIfGrNzAAjS%2BOJ5Op9OZqVBsshRV4QMWsUPAxhTEDgAqCEY4JiNMndPCUuHJVl2FoSgRCInU5nmDnWAiZYHYuzO1oybONo%2B0p%2BUqesslLLZHNLcLjPdWS9H4q3DA3cJ/MavrKa7EOCeCmCejwIHgTbrGKIarA%2B46Tgw06zrS%2B4bGKWzWvBwGJmBpjggEqgENa34oVhWyHuKCZJimaYaLc/Y5jE0GwXhA50a2jHkWKP5UbhCFcS2DHtkGfE/mhu4YeEVE0WK7a3GK7yVlBMGXna3yRNgWHCeKtySZRcE4XpspikZ27ofOiomQpCjzKYwCYDEtyRJBzkECUmBsIId54K8t4AgOVqweKIGEfZroANY%2BrZOaed5vkEP5gUKveUoFgOEXgVFDCxXmxD3B5mBefQyWpUFtnigoMVxZlxXfEBA63JBZ50tmbxXvaN7pQOtX5XF9xSv6nIKVmamVHQBpiKOkRdVpDo6bsCgsKKIqmP6ACOqwACS7fKu3rKGXDHaZR2hiKZ1ShdIYaGdFqhY9lamKQr2vQAfsdIb4MQVAGMA11faGVAxImQPff9TDAAoD0iiKECadey1cRmylpUjPUowZ5oipEV3NeKqk5lNmKiFSmPabpiwmOY4JUAoCC0OCpivPaiPzbayO6QOEmdVzWM87RaMqdanPdVTToTGWvQkJg/MS0tQui31NWOc5rmRCNrJ6i%2BsJxiJ9FthokE%2BmFimicbzFSiWCk5URJGNmpZtZeFBHgVKTX67KACckHVrW9aNq7FtG7xqxdkB759r7i5MCOso/nHCcDqu65wuGa7sGWNKNscpwbkG1EZ3CWDIAYNIK4tjo02YLD04zzOs%2BzlNK2LC3c%2B3AtU7jkSnXCHBTLQnBirwXgcFopCoJwPg%2BAAagAsqsACSABKqwKDMczyxafe8AQmiD1M0UgGKkTppIrwqVwtxBmKPsaJIQY%2B/onCSGPh9T5wvAKCAkoHxPQepA4CwCQGgfEdAFwUAgOAmIkCIgmBsMQGKfA6BeWIL/CAIRP4hH8FUaM3BeC4OYFGAA8iEbQmAbCcB4KQcByVSEMCZJ/LAIR6xOFmr/QhpAsAsEMMAcQgCeF4BpDYcCfJP7AioW4LyNDeD%2BDKp/VkPZ8EuCwJ/K4eAWByLeuEEI8RMBbB8vw1kRhD5TChjDOeeBMCqlITERgOj%2BCCBEGIdgUgZCCEUCodQQjdANAMGY2mFhlG/0gFMVAlwkhcKLKQ9yRYWDIBiG4SsAAvBgphwijynpk4gGosBhIgFMKwVCygOAYM4VwdRvAVNGJ0CIDQMiJAEAMeopAmllDqfkLoQxvJiIEC0foVTBiNFKc0PobR/AdG6Q0ywEzWl6GGNULp4wuDFK3vMCQQ8R4fyEdPDgH5aDIHOFcGKwoIC4EICQUUfcJj73McfEAkhbjgh9nKSQXBXj40kBoN5IoAlv14NorgGhJTj0nvsn%2Bf9SAAK0BMbZHARS7Ihd/GFDzdEYKSE8oAA))

```asm
example.bar:
add rsi, -8
cmp rsi, 8
jb .LBB0_3
vmovdqu64 zmm1, zmmword ptr [rdi]
xor eax, eax
.LBB0_2:
vmovdqu64 zmm2, zmmword ptr [rdi + rax + 64]
valignq zmm3, zmm2, zmm1, 1
vpshldvq zmm3, zmm1, zmm0
add rsi, -8
vmovdqu64 zmmword ptr [rdx + rax], zmm3
add rax, 64
vmovdqa64 zmm1, zmm2
cmp rsi, 7
ja .LBB0_2
.LBB0_3:
vzeroupper
ret

bar = example.bar
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.