linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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

  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).