| Issue |
165306
|
| Summary |
Look for vector bit rotates bigger than 16 bytes
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
Validark
|
[Zig Godbolt](https://zig.godbo.lt/#g:!((g:!((g:!((h:codeEditor,i:(filename:'1',fontScale:14,fontUsePx:'0',j:1,lang:zig,selection:(endColumn:2,endLineNumber:11,positionColumn:2,positionLineNumber:11,selectionStartColumn:2,selectionStartLineNumber:11,startColumn:2,startLineNumber:11),source:'export+fn+foo(x:+@Vector(2,+u64),+i:+@Vector(2,+u64))+@Vector(2,+u64)+%7B%0A++++return+(x+%3C%3C+@truncate(-%25i))+%7C+(x+%3E%3E+@truncate(i))%3B%0A%7D%0A%0Aexport+fn+bar(x:+@Vector(4,+u64),+i:+@Vector(4,+u64))+@Vector(4,+u64)+%7B%0A++++return+(x+%3C%3C+@truncate(-%25i))+%7C+(x+%3E%3E+@truncate(i))%3B%0A%7D%0A%0Aexport+fn+baz(x:+@Vector(8,+u64),+i:+@Vector(8,+u64))+@Vector(8,+u64)+%7B%0A++++return+(x+%3C%3C+@truncate(-%25i))+%7C+(x+%3E%3E+@truncate(i))%3B%0A%7D'),l:'5',n:'0',o:'Zig+source+%231',t:'0')),k:51.27826974307506,l:'4',m:100,n:'0',o:'',s:0,t:'0'),(g:!((h:compiler,i:(compiler:ztrunk,filters:(b:'0',binary:'1',binaryObject:'1',commentOnly:'0',debugCalls:'1',demangle:'0',directives:'0',execute:'1',intel:'0',libraryCode:'0',trim:'1',verboseDemangling:'0'),flagsViewOpen:'1',fontScale:14,fontUsePx:'0',j:2,lang:zig,libs:!(),options:'-O+ReleaseFast+-target+x86_64-linux+-mcpu%3Dznver5+-fomit-frame-pointer',overrides:!(),selection:(endColumn:1,endLineNumber:1,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:1),l:'5',n:'0',o:'+zig+trunk+(Editor+%231)',t:'0')),header:(),k:48.72173025692494,l:'4',m:100.00000000000001,n:'0',o:'',s:0,t:'0')),l:'2',m:100,n:'0',o:'',t:'0')),version:4)
[LLVM Godbolt](https://llvm.godbo.lt/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1C1aANxakl9ZATwDKjdAGFUtAK4sGexwBk8DTAA5DwAjTGIQAGYANlIAB1QFQjsGF3dPPQSk2wE/AOCWMIiYy0xrHIYhAiZiAjSPLy5S8pSqmoI8oNDwqNiFatr6jKb%2B9s6Cot6ASktUN2Jkdg4sGgCAanQFVAB9WlRRWjWAUkinACY11TW8aMkT7DWAAX5UCBPzy%2Bvb%2B%2BOzgFYNKRjqcLlcbndIg8jv8uFM1nsDts3AxmGx0NsmOh0MRjgB2ABCRw0AEFsIJiABPEBE4lrX5/C4nAAiawIxGRyGBHzB30h9K4rNQXNBX3uNLp0L%2BkWBLIUbhCws%2BNx%2BAC9wqh/MkxHg1WR6WdxfTJDK1mrVARFTyfpLpURLV8IdhDZK/iaFAhDu8ReDrf9AUbnf9oibDOh7T6%2BZKmmsFHEDBaIOC1tFIlNA39cSbaO6cV6lbyoX6gZLoumABwmkjhgv0v7F/64w3ETAWvM8x30ss0o64pndkkrfyYDZbXb7MRc43tn6PEI1N6nKcO30A4uL/MdqNwhFiJEo1iYdGY7F4wkkslsqnpxmRFlsjmTjcrgV295L5WQ9PS5kx%2BWPq18rqGoMFqtA6uE9YMumxo/marbrgBhZSoK/7Lp%2BJISv8ro/u6noIWhSH%2BpKdwYfSwY/qGqERkh0axvGayJrcyapummY/tmCC5vh1H0kRQblpWXFOO%2BNYupBjakc28HCU%2Bkb/F2JI9n2ikDpgqzDpsOw7nhTgVtOfKzkwKoLrpsmEWupn6TR27jrQe6ooeGJYrmBI0helLUqRko3ne7IMJy7x6QR/IoYF%2BZil5/zfrev4KmFiGmuqmq2NquqQQakV/DBMVwVyQUfkhtpCvFBHpthMW4XlZm8ZBJG0mRIYMGGJU8VGQJ0UwCZJimaaZWxMUcUJ%2BWiUWZECT%2BVYtSNfx1vSEn1VJVVWZ23a9jSHAzLQnB/LwXgcFopCoJwPg%2BAAagAsmsACSABKMZzAsw7QpEPCkAQmgbTMADWIBZQAdJIuIAJwaEDuJZYDINg9IW0cJIu0fYdnC8AoICAu9%2B0baQcCwEgaAsHEdAQRQED44T9ARCYNh%2BV9fB0AQ4SoxAISIyE/g1FS3C8GzzCUgA8iE2iYDYnCvfjbCCHzDC0JzB1YCEbjAE4YjZqLvBYCwhjAOImOkPgzY2HgpiYKjuuYKowtuAzavkIIZSI2BITEBzLhYIjbJ4CwNvG8QISJJgTKYJrRhgUYH0zFQBjAAop14JgADufNxIwNv8IIIhiOwUgyIIigqOouu6E0BhhyY5j6HgISo5AMyoHEFSmwAtHz0qNywyBxG4zIqgwPs7YdPvEHgWDVxAMxWMLFQOE1QyNKQvhDhMPRNFkyQCLPmSJGvDDjN0EQjGUk%2BtAMdSuA0egT4bAhtLUu%2BFMvlgnxvIwn3fkywrM8yLBIm3bQjutHQ4PCWgnIID3gYF9OEEBcCEEmmcF6UxeAYy0FMb6IBJB/D%2BgyUGGgzgYOwSDM4sRYbw1IF7LgGhAR7QOoAlGaM3rh1/hwM4/8aHIwYZjVBpAfZJHsJIIAA%3D%3D)
```llvm
define dso_local <2 x i64> @foo(<2 x i64> %0, <2 x i64> %1) local_unnamed_addr {
Entry:
%2 = trunc <2 x i64> %1 to <2 x i6>
%3 = sub <2 x i6> zeroinitializer, %2
%4 = zext <2 x i6> %3 to <2 x i64>
%5 = shl <2 x i64> %0, %4
%6 = and <2 x i64> %1, splat (i64 63)
%7 = lshr <2 x i64> %0, %6
%8 = or <2 x i64> %5, %7
ret <2 x i64> %8
}
define dso_local <4 x i64> @bar(<4 x i64> %0, <4 x i64> %1) local_unnamed_addr {
Entry:
%2 = trunc <4 x i64> %1 to <4 x i6>
%3 = sub <4 x i6> zeroinitializer, %2
%4 = zext <4 x i6> %3 to <4 x i64>
%5 = shl <4 x i64> %0, %4
%6 = and <4 x i64> %1, splat (i64 63)
%7 = lshr <4 x i64> %0, %6
%8 = or <4 x i64> %5, %7
ret <4 x i64> %8
}
define dso_local <8 x i64> @baz(<8 x i64> %0, <8 x i64> %1) local_unnamed_addr {
Entry:
%2 = trunc <8 x i64> %1 to <8 x i6>
%3 = sub <8 x i6> zeroinitializer, %2
%4 = zext <8 x i6> %3 to <8 x i64>
%5 = shl <8 x i64> %0, %4
%6 = and <8 x i64> %1, splat (i64 63)
%7 = lshr <8 x i64> %0, %6
%8 = or <8 x i64> %5, %7
ret <8 x i64> %8
}
```
Emit:
```asm
foo:
vprorvq xmm0, xmm0, xmm1
ret
.LCPI1_0:
.quad 63
bar:
vpbroadcastq ymm4, qword ptr [rip + .LCPI1_0]
vpmovqd xmm2, ymm1
vpxor xmm3, xmm3, xmm3
vpsubd xmm2, xmm3, xmm2
vpmovzxdq ymm2, xmm2
vpand ymm2, ymm2, ymm4
vpand ymm1, ymm1, ymm4
vpsllvq ymm2, ymm0, ymm2
vpsrlvq ymm0, ymm0, ymm1
vpor ymm0, ymm2, ymm0
ret
.LCPI2_0:
.quad 63
baz:
vpmovqw xmm2, zmm1
vpbroadcastq zmm4, qword ptr [rip + .LCPI2_0]
vpxor xmm3, xmm3, xmm3
vpsubw xmm2, xmm3, xmm2
vpmovzxwq zmm2, xmm2
vpandq zmm1, zmm1, zmm4
vpandq zmm2, zmm2, zmm4
vpsllvq zmm2, zmm0, zmm2
vpsrlvq zmm0, zmm0, zmm1
vporq zmm0, zmm2, zmm0
ret
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs