Issue |
141710
|
Summary |
`(x << 1) | 1` => `shld(x, 1, 0x80...)` for vectors of 8 x u64
|
Labels |
new issue
|
Assignees |
|
Reporter |
Validark
|
([LLVM Godbolt](https://llvm.godbo.lt/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1C1aANxakl9ZATwDKjdAGFUtAK4sGexwBk8DTAA5DwAjTGIJAHZSAAdUBUI7Bhd3Tz04hNsBPwDgljCIrmirTBskoQImYgIUjy8uS0xrLIYKqoIcoNDwqMtK6tq0hoV%2Bjv8u/J6igEpLVDdiZHYOLBoAgGp0BVQAfVpUUVp1gFIAZicADnXVdbwANkkz7HWAAX5UCDPL69uHp5OAEwAVg003W%2B0OOzcDGYbHQOyY6HQxBOkQAQscNABBbCCYgATxAmKx60BQK4J1OABF1goEG4qFR6KZSkQUV8rjd7o9Ts8vtz1nE8NsGKRfpJBahhQIxQKhSLZQ9JdLReLlQq1fKZZqpRqBRonmKOT9uf9jsCNEbzpzbqcAWbzng7etoraAesLrLnQBOL3uriWt3rLgNINcAF%2B4OnSNSJ7E0nmoHus40yp0daHI7Grl/XmvEzmAB0VDptELpgu3M%2B1pNub5Fqt3xzPPr5MbNtNeYUMQMBHWEAFXGm03jZNOlJpJEpTfFZuBEeng8VEsD%2BuX61XSs3K/X243cexpOImD72dnecTp2Jx0iVOv2NW4022z2BzE047ddeISq1ZnndbUFwTfWgoRhVhMHhRFkVRDFsVxAgCSJQ8yQpFNaXpRlmVZKczwAxclS1VU5V1bUSJVdciMo0jiMImjqIotUAFpvQBAFTlOSIAQ0U47guIFJEiSIgQuDQLkND9axbMlAzwu0HScJ13VdJSPUjX0w1XZ0QxjBdVK4aMwxbUdE2Tal1jTI5M0k5t/heAsWGLUty0rB4/0/aTE1kmtbIvYFQzwr9u17ftB2HUdj1PHzz1be1sRvO94ofUoDGPGyYvzMxHJLBAywrKtApbdspIkwqnjBc1Ti4YkOFmWhOCBXgvA4LRSFQTgfB8AA1ABZdYAEkACVaXmRZMEBKreAITRatmABrEAQX0ThJCama2s4XgFBAS1ppa2rSDgWAkDQFgYjocJyEoU7zvoCITBsYhoTmvg6AIcJtogEJ1pCfwqkJbheF%2B5gCQAeRCbRWU4HhSFOthBFBhhaAB1qsBCNxgCcMRaG2wHSCwFhDGAcR9vxvBjzKFlcdazBVFKNx3uh3h/He%2BrSdoPAQmIf6XCwdbELwFgmdIFliBCeJMCpTBCaMDmjBm2YmSYYAFC6vBMAAd1BmJGGF/hBBEMR2CkGRBEUFR1FJ3QGgMeWHP0TntsgWZUBiFpcaYlhkBiNwUwALwYUXGra0XiDwLAnYgWYSjKewIEcQZ6lIXxxjyAp0niRIBETjPMiSTo06mRpmnKUYc%2BGJpWVL9oC%2B6Qo%2BnacuG%2BqWvJkKaPRqWCQ6oatbSfajhwVoZB%2B0Q56wQgXBCFw9ihymhX5sWy02dW0hmtagetp20g9q0Ydlo4AE%2B43zad4XkWPqSEBJCAA%3D%3D%3D)) ([Zig Godbolt](https://zig.godbo.lt/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1AAvPMFJL6yAngGVG6AMKpaAVxYM9DgDJ4GmADl3ACNMYhAAZmkAB1QFQlsGZzcPPVj4mwFffyCWUPCoi0wrTIYhAiZiAmT3Ty4iksTyyoJswJCwyOkFCqqa1Pqelrbc/K6ASgtUV2Jkdg40Bh6Aah70ZYBSCIARZYABPBZYqogNgCYztfOz8a2AIQ2NAEFFlYA1b2wAzZ3lgFYuGd7o8XgIVq4/AQfrsFAB3QjIBDLCAfL7jTYAdgez2WuOWADZJNCtthlq5CaQQXj/oDiRFSXs3phrCQIAAOUhkwmTKl44pKOkMtBHOg4YjEVnXZT0JgCyzMqFMZb4KhUMKMKGogLXHnPDYY7bAvXPKgMVYIWjoCBMEBkyGc4XRGxsZYUVYEdAAOhYTAICE93lQwDOAElBBA1t7MBVPWGCBBPfFgP50Jy9sFCEI8MZMAB5KgQCGCcYlznBW1FgjoyuY7FPalwhFIiB7AgAT2imDD/ELkJLtd51NxnshguWxGjMzN1p%2Bji2jld6P1C4gwR%2B2BJyPxEWWAFpXZszndllxS4Oh/zMGP9XWh3flq8oW3oe6vfEWF62MRgJghAg8FQ8bBJyTCcmye7IngywAPQEpIJZGvW97UgBkGHn8cF0rsGjohOBBTssbaIch1KPssqgvpG76fmEP5/gBQEgWBEEQFwh7HlBsHcrcER1ueyF4QREAUSSm57Ao0QGPGhIsVB5wYdxS4Yiuz7zvO%2BwSVJEByWcCnwTxt73vq2yUjieLGSCFnGk8prmrQ1oVvaD6oEczpXm6kY%2Bn6AZBqG4aedGTCxuGiZmCmaYZsI2Z5gWlYlv2NY3uegnEGaCgWlaoGupyAUsJ6OYSpgCi9sWBmWQalnPJgqjHFCtn8KgDl2sWzVQklZm4ilaUWtanKnpiC57LKJUEBFhCOLK8ZDcVAUxnGCauEsYWYKmyxapMJ7xYhVlPCC1W1cstnBJUTVxa1A4dc5SxQgAskIdyOYIL7puNk0tsNs1BfNnqLUm4X7JFWY5vmI2lpts7qSinzfPup5lZdXV2ZlfWcnddzw7tFXPBwky0Jwfy8J4HBaKQqCcAAWmYqzTLMV7nBEPCkAQmg45MADWIB/Bo%2BicJIhMs6TnC8AoIDc8zxM46QcCwDAiAoC50SimQFAQI6SsgMYGhSNzNC0AQYQi6uAsZswxBtpwjMm5Uba5sE2gKhbvDCmwgi5gwtDmxLpBYMErjABNtC0CL3C8FgPpGOIXv4BO1h4AAbkVAvVcyrj6475CCMUAu0HgwTENbzhYALBDEIc6cJ8QwRxJg2yYOHwA50YLOTFQBjAAobx4JgsK5p2ROM/wggiGI7BSDIgiKCo6he7o9QGE3pjmDnwQi5AkyoE6iTB7uvQ/lCqhsviAD6hK7o3rgUbuLDINErhbNsxgMBXGG7rmABKxSYLKmAAGKTbwqAK6lywKvCAkx5SxzsBABw/Q6ikB8H4doeROj1HSAkAQsC0hxHQQwEYHRwiDE/pAsovRqguFqHoCBpRmhVDwcgghFhSGYMGKQuhYxTxTBmHMCQuN8b8y9mTDgyxF7LA0J6KQnoNDIlwIQEgh4GbjF4OLLQpYOZcx5hwPmpAWAgAAJz4k9H8M4WtJD4iMSYsxERSBExJoI4WosmbNylrLCASAiAuHIJQSo7chakG8QoZQhhih/lQLCfuTsFZKwCKweYIixESJJitWRwC9CD2EKIcQY80mTzUALWe2iBBMDQDIogxAAASso7iYEYE8VOqBe6MBWunFghTin4FKQ08JBTmBoHKPgLpaw/C%2BMGQwQJ/haAhLCendxtAQzoBAIHOOLAr6iBLotNmpBYT52iI7XhHACbWIFoIxZyzr5KjieIyQkjpHtLkfTeoyxnAinoMQeRp4lHN0mAgL%2BWBwhgI0VonRERPSSAxLotkfwohgohVCw%2BhyBHDIcco1mpA1HczxhwCI/DbG%2BORaWDFZxsUANxZ80gFd4h2EkEAA))
Naïve code (znver5):
```llvm
define dso_local <8 x i64> @foo(<8 x i64> %0) local_unnamed_addr {
Entry:
%1 = shufflevector <8 x i64> <i64 poison, i64 poison, i64 poison, i64 poison, i64 poison, i64 poison, i64 poison, i64 0>, <8 x i64> %0, <8 x i32> <i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14>
%2 = tail call <8 x i64> @llvm.fshl.v8i64(<8 x i64> %0, <8 x i64> %1, <8 x i64> splat (i64 1))
%3 = or <8 x i64> %2, <i64 1, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0>
ret <8 x i64> %3
}
declare <8 x i64> @llvm.fshl.v8i64(<8 x i64>, <8 x i64>, <8 x i64>) #1
```
```asm
.LCPI0_1:
.byte 1
.byte 0
foo:
vpxor xmm1, xmm1, xmm1
valignq zmm1, zmm0, zmm1, 7
vpshldq zmm0, zmm0, zmm1, 1
vpmovsxbq xmm1, word ptr [rip + .LCPI0_1]
vporq zmm0, zmm0, zmm1
ret
```
Better (znver5):
```llvm
define dso_local <8 x i64> @bar(<8 x i64> %0) local_unnamed_addr {
Entry:
%1 = shufflevector <8 x i64> <i64 poison, i64 poison, i64 poison, i64 poison, i64 poison, i64 poison, i64 poison, i64 -9223372036854775808>, <8 x i64> %0, <8 x i32> <i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14>
%2 = tail call <8 x i64> @llvm.fshl.v8i64(<8 x i64> %0, <8 x i64> %1, <8 x i64> splat (i64 1))
ret <8 x i64> %2
}
```
```asm
.LCPI1_0:
.quad -9223372036854775808
bar:
valignq zmm1, zmm0, qword ptr [rip + .LCPI1_0]{1to8}, 7
vpshldq zmm0, zmm0, zmm1, 1
ret
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs