llvm/llvm-project

~llvm.fsh[rl] patterns not recognized

Open

#173.132 geöffnet am 20. Dez. 2025

Auf GitHub ansehen
 (6 Kommentare) (1 Reaktion) (1 zugewiesene Person)C++ (10.782 Forks)batch import
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

Zig Godbolt LLVM Godbolt

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

Contributor Guide