good first issuellvm:instcombinellvm:optimizationsmissed-optimization
Repository-Metriken
- Stars
- (26.378 Stars)
- PR-Merge-Metriken
- (Durchschn. Merge 1T 2h) (1.000 gemergte PRs in 30 T)
Beschreibung
Example 1:
export fn rotate(x: u64, y: u64) u64 {
return x >> @truncate(~y) | x << @truncate(y + 1);
}
Should be:
rotate:
lea ecx, [rsi + 1]
mov rax, rdi
rol rax, cl
ret
Example 2:
export fn rotate2(x: u64, y: u64) u64 {
return x >> @truncate(y + 1) | x << @truncate(~y);
}
Should be:
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:
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