From: Linus Torvalds <torvalds@osdl.org>
To: Denis Vlasenko <vda.linux@googlemail.com>
Cc: Grzegorz Kulewski <kangur@polcom.net>,
Alan <alan@lxorguk.ukuu.org.uk>,
Mikael Pettersson <mikpe@it.uu.se>,
s0348365@sms.ed.ac.uk, 76306.1226@compuserve.com, akpm@osdl.org,
bunk@stusta.de, greg@kroah.com, linux-kernel@vger.kernel.org,
yanmin_zhang@linux.intel.com
Subject: Re: kernel + gcc 4.1 = several problems
Date: Wed, 3 Jan 2007 12:38:31 -0800 (PST) [thread overview]
Message-ID: <Pine.LNX.4.64.0701031225090.4473@woody.osdl.org> (raw)
In-Reply-To: <200701032047.02941.vda.linux@googlemail.com>
On Wed, 3 Jan 2007, Denis Vlasenko wrote:
>
> Why CPU people do not internally convert cmov into jmp,mov pair?
Probably because
- it's not worth it. cmov's certainly _can_ be faster for unpredictable
input. So expecially if you teach your compiler (by using profiling) to
use cmov's mainly for unpredictable cases, turning it into a
conditional jump internally would likely be a bad idea.
- the biggest reason to do it would likely be microarchitectural: if you
have an ALU or a bypass network that just isn't suitable for bypassing
the flags that way (because you designed your pipeline for a
conditional branch), you might decide that it just simplifies things to
turn the cmov internally into a branch+mov uop pair.
- cmov's simply aren't common enough to be worth worrying about,
especially as it's not likely that the difference is all that big in
the end. The limitations on cmov's means that the compiler can only use
them under certain fairly limited circumstances anyway, so it's not
like you'll make a huge difference by doing anything clever. So see
above - it's simply a wash, and likely ends up just depending on other
issues.
And don't get me wrong. cmov's can make a difference. You can use them to
avoid polluting your branch prediction tables, you can use them to make
code smaller, and you can use them when they simply just fit the problem
really well. It's just _not_ the case that they are "obviously better".
They simply aren't. Conditional branches aren't "evil". There are many
MUCH worse things you can do, and other things you should avoid.
It really all boils down to: there's simply no real reason to use cmov.
It's not horrible either, so go ahead and use it if you want to, but don't
expect your code to really magically run any faster.
Linus
next prev parent reply other threads:[~2007-01-03 20:42 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-03 2:12 kernel + gcc 4.1 = several problems Mikael Pettersson
2007-01-03 2:20 ` Alistair John Strachan
2007-01-05 15:53 ` Alistair John Strachan
2007-01-05 16:02 ` Linus Torvalds
2007-01-05 16:19 ` Alistair John Strachan
2007-01-05 16:49 ` Linus Torvalds
2007-01-07 0:36 ` Pavel Machek
2007-01-07 0:57 ` Alistair John Strachan
2007-01-03 5:55 ` Willy Tarreau
2007-01-03 10:29 ` Alan
2007-01-03 10:32 ` Grzegorz Kulewski
2007-01-03 11:51 ` Jeff Garzik
2007-01-03 12:44 ` Alan
2007-01-03 13:32 ` Arjan van de Ven
2007-01-03 13:58 ` Jakub Jelinek
2007-01-03 14:28 ` Alan
2007-01-03 16:06 ` Linus Torvalds
2007-01-03 16:03 ` Linus Torvalds
2007-01-03 17:01 ` l.genoni
2007-01-03 17:45 ` Tim Schmielau
2007-01-03 20:24 ` Linus Torvalds
2007-01-03 17:06 ` l.genoni
2007-01-03 17:53 ` Mariusz Kozlowski
2007-01-03 19:47 ` Denis Vlasenko
2007-01-03 20:38 ` Linus Torvalds [this message]
2007-01-03 21:48 ` Denis Vlasenko
2007-01-03 22:13 ` Linus Torvalds
2007-01-03 21:44 ` Thomas Sailer
2007-01-03 22:08 ` Linus Torvalds
2007-01-04 3:08 ` Zou, Nanhai
2007-01-04 15:34 ` Linus Torvalds
-- strict thread matches above, loose matches on Subject: below --
2007-01-04 7:11 Albert Cahalan
2007-01-04 16:43 ` Segher Boessenkool
2007-01-04 17:04 ` Albert Cahalan
2007-01-04 17:24 ` Segher Boessenkool
2007-01-04 17:47 ` Linus Torvalds
2007-01-04 18:53 ` Segher Boessenkool
2007-01-04 19:10 ` Al Viro
2007-01-05 17:17 ` Pavel Machek
2007-01-06 8:23 ` Segher Boessenkool
2007-01-04 17:37 ` Linus Torvalds
2007-01-04 18:34 ` Segher Boessenkool
2007-01-04 22:02 ` Geert Bosch
2007-01-07 4:25 ` Denis Vlasenko
2007-01-07 4:45 ` Linus Torvalds
2007-01-07 5:26 ` Jeff Garzik
2007-01-07 15:10 ` Segher Boessenkool
2007-01-26 22:05 ` Michael K. Edwards
2007-01-04 18:08 ` Andreas Schwab
2006-12-20 14:21 Oops in 2.6.19.1 Alistair John Strachan
2006-12-30 16:59 ` Alistair John Strachan
2006-12-31 16:27 ` Adrian Bunk
2006-12-31 16:55 ` Alistair John Strachan
2007-01-02 21:10 ` kernel + gcc 4.1 = several problems Adrian Bunk
2007-01-02 21:56 ` Alistair John Strachan
2007-01-02 22:06 ` D. Hazelton
2007-01-02 23:24 ` Adrian Bunk
2007-01-02 23:41 ` D. Hazelton
2007-01-03 2:05 ` Horst H. von Brand
2007-01-02 22:13 ` Linus Torvalds
2007-01-02 23:18 ` Alistair John Strachan
2007-01-03 1:43 ` Linus Torvalds
2007-01-02 22:01 ` Linus Torvalds
2007-01-02 23:09 ` David Rientjes
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.LNX.4.64.0701031225090.4473@woody.osdl.org \
--to=torvalds@osdl.org \
--cc=76306.1226@compuserve.com \
--cc=akpm@osdl.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=bunk@stusta.de \
--cc=greg@kroah.com \
--cc=kangur@polcom.net \
--cc=linux-kernel@vger.kernel.org \
--cc=mikpe@it.uu.se \
--cc=s0348365@sms.ed.ac.uk \
--cc=vda.linux@googlemail.com \
--cc=yanmin_zhang@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).