| Issue |
173132
|
| Summary |
~llvm.fsh[rl] patterns not recognized
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
Validark
|
[Zig Godbolt](https://zig.godbo.lt/#g:!((g:!((g:!((h:codeEditor,i:(filename:'1',fontScale:11,fontUsePx:'0',j:1,lang:zig,selection:(endColumn:1,endLineNumber:8,positionColumn:1,positionLineNumber:8,selectionStartColumn:1,selectionStartLineNumber:8,startColumn:1,startLineNumber:8),source:'export+fn+rotate(x:+u64,+y:+u64)+u64+%7B%0A++++return+x+%3E%3E+@truncate(~y)+%7C+x+%3C%3C+@truncate(y+%2B+1)%3B%0A%7D%0A%0Aexport+fn+rotate2(x:+u64,+y:+u64)+u64+%7B%0A++++return+x+%3E%3E+@truncate(y+%2B+1)+%7C+x+%3C%3C+@truncate(~y)%3B%0A%7D%0A'),l:'5',n:'0',o:'Zig+source+%231',t:'0')),k:53.56593906638326,l:'4',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%3Dicelake_server+-fomit-frame-pointer',overrides:!(),selection:(endColumn:25,endLineNumber:2,positionColumn:9,positionLineNumber:2,selectionStartColumn:25,selectionStartLineNumber:2,startColumn:9,startLineNumber:2),source:1),l:'5',n:'0',o:'+zig+trunk+(Editor+%231)',t:'0')),k:46.43406093361675,l:'4',m:100,n:'0',o:'',s:0,t:'0')),l:'2',n:'0',o:'',t:'0')),version:4)
[LLVM Godbolt](https://llvm.godbo.lt/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1C1aANxakl9ZATwDKjdAGFUtAK4sGexwBk8DTAA5DwAjTGIQACZpAAdUBUI7Bhd3Tz04hNsBPwDgljCI6MtMayyGIQImYgIUjy8uYtKkiqqCHKDQ8KjpBUrq2rSG3tb2vILugEpLVDdiZHYOLBoAgGp0BVQAfVpUUVoVvAA2SRWAAWJUSoJMCCOTgFJIgFYNUgPjlcenrgmVnb3Nm4GMw2OhNkx0OhiJ8AOwAIXuGgAgthBMQAJ4gRFIlafZ6RT4AZgAIitDOh3g9ng0VodCdjcV9CUTSaoSJS8U9Im86QzOQ8SX8FAhoXdOa9OfTkYznk8WWTISsGG4AO4cr40rh8r6HeXk9WynlSnGcmHy4X7MVfCU67XPAAc8vZVue0lNfOImAIBqe9ux9xhxP9yKW/kwaw2212Yg550uTGukVuH2tbxd31%2B/zEgOBrEwYIhUNhCORqIIGKx0s5BPugsLStVPs1dqezNrpP16e5tONMqeAtJtGFopTzxtz17nLl7bJDAp6ZpvKrOvlbJHVKeTyNLbNM4tPvHT0OLcdM%2Bdo/7by%2BMI9Xp9fuRAaDyI4U1onCevC8HC0pFQnB8HwADUAFkVgASQAJRWDZZnmPFCR4UgCE0V8pgAaxAF4ADoYUOe1Ig0QkNBhSJ7S4SJIgATn0ThJC/VC/04XgFBAV4UJ/V9SDgWAkDQFgYjocJyEofjBPoCITBsYggXQvg6GuYhWIgEJGJCfwqkxbheHU5gMQAeRCbRMBsTgkP4thBH0hhaC038sBCNxgCcMQhzM3gsBYQxgHETjSHwT0bDwUxMFYvzMFUEy3GudzyEEEpGNoPAQmITSXCwRjyzwFhYpC4gQniTBiUwLyjCSoxUKmKgDGABQgLwTAVX0mJGFi/hBBEMR2CkGRBEUFR1D83QGgMCqTHMfRktYyAplQGIyjCgBafTmUWlhkBiNx2wALwYPLPz/PLiDwLBpogKYrBMsoHDnAZ6m5XwwzGLouC3DJEgEO6JG5d6ylGToIlexoruaPoalcOpvuBoKBBaap/vyF6t2GfoIcGbkUbaJ6AYkJ4LpmOZurfD8GL8/8OD%2BWhkBWCBy1k34IFwQh2UeRCJl4DitAmDCQEkKjsMiRCYSow4qMiGEuHtGEJdojh6NIHKuA0V5v1/cmWLY5DKuJjhIlJtXmK1zjudIPKEnsSQgA%3D%3D)
Example 1:
```zig
export fn rotate(x: u64, y: u64) u64 {
return x >> @truncate(~y) | x << @truncate(y + 1);
}
```
Should be:
```asm
rotate:
lea ecx, [rsi + 1]
mov rax, rdi
rol rax, cl
ret
```
Example 2:
```zig
export fn rotate2(x: u64, y: u64) u64 {
return x >> @truncate(y + 1) | x << @truncate(~y);
}
```
Should be:
```asm
rotate2:
lea ecx, [rsi + 1]
mov rax, rdi
ror rax, cl
ret
```
Might not be useful in most situations, but these are also valid transformations:
```asm
rotate:
mov rcx, rsi
not cl
mov rax, rdi
ror rax, cl
ret
rotate2:
mov rcx, rsi
not cl
mov rax, rdi
rol rax, cl
ret
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs