Re: [RFC PATCH] fs: micro-optimization remove branches by adjusting flag values

From: Matthew Wilcox
Date: Mon Sep 14 2020 - 14:07:33 EST


On Mon, Sep 14, 2020 at 07:43:38PM +0200, mateusznosek0@xxxxxxxxx wrote:
> From: Mateusz Nosek <mateusznosek0@xxxxxxxxx>
>
> When flags A and B have equal values than the following code
>
> if(flags1 & A)
> flags2 |= B;
>
> is equivalent to
>
> flags2 |= (flags1 & A);
>
> The latter code should generate less instructions and be faster as one
> branch is omitted in it.

[citation needed]

$ cat test.c
int a(int x)
{
int y = 0;

if (x & 1)
y |= 1;
if (x & 2)
y |= 2;

return y;
}

$ objdump -d test.o
0000000000000000 <a>:
0: 89 f8 mov %edi,%eax
2: 83 e0 03 and $0x3,%eax
5: c3 retq

Please stop submitting uglifying patches without checking they actually
improve anything. GCC is smarter than you think it is.