lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Wed, 28 Jan 2009 15:39:20 -0500
From:	Chris Snook <csnook@...hat.com>
To:	Davide Libenzi <davidel@...ilserver.org>
CC:	Linux Kernel Mailing List <linux-kernel@...r.kernel.org>
Subject: Re: if (unlikely(...)) == unnecessary?

Davide Libenzi wrote:
> On Wed, 28 Jan 2009, Chris Snook wrote:
> 
>> Davide Libenzi wrote:
>>> I noticed that GCC >= 3.3 (not tried the ones before) automatically branches
>>> out the "if" code (and follow-through the "else" code, if there). Is that a
>>> coincidence or a rule we can rely on going forward?
>> That's the default behavior, but there are lots of things that can cause it to
>> behave differently.
> 
> Please don't keep me hanging. What are they (just a few of the "lots" 
> that makes GCC follow-through "if" code)?
> 
> 
> - Davide
> 
> 

When you turn on optimizations, gcc will try to avoid branching just to execute 
a few instructions, since the cache miss and page fault penalties greatly exceed 
the cost of a branch mispredict.  The thresholds and heuristics vary, but in 
general, if you stick something like this:

if (condition) foo++;
else if (complex condition) {do lots of stuff}

In the middle of a long function body and compile with optimizations enabled, 
gcc will try to put the foo++ right after the evaluation.  Some ISAs support 
conditional instructions to let the compiler help fill pipeline bubbles, and 
some superscalar processors will speculatively execute it in parallel with their 
evaluation of the second condition, and proceed with whichever execution path is 
chosen when they retire the instruction evaluating the first conditional.

-- Chris
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ