Re: [PATCHv14 08/17] x86/mm: Reduce untagged_addr() overhead until the first LAM user

From: Peter Zijlstra
Date: Tue Jan 17 2023 - 08:05:55 EST


On Wed, Jan 11, 2023 at 03:37:27PM +0300, Kirill A. Shutemov wrote:

> #define __untagged_addr(untag_mask, addr) ({ \
> u64 __addr = (__force u64)(addr); \
> - s64 sign = (s64)__addr >> 63; \
> - __addr &= untag_mask | sign; \
> + if (static_branch_likely(&tagged_addr_key)) { \
> + s64 sign = (s64)__addr >> 63; \
> + __addr &= untag_mask | sign; \
> + } \
> (__force __typeof__(addr))__addr; \
> })
>
> #define untagged_addr(addr) __untagged_addr(current_untag_mask(), addr)

Is the compiler clever enough to put the memop inside the branch?