lkml.org 
[lkml]   [2002]   [Aug]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [patch 4/21] fix ARCH_HAS_PREFETCH
On Sun, Aug 11, 2002 at 11:47:22AM -0700, Andrew Morton wrote:
> Alan Cox wrote:
> >
> > On Sun, 2002-08-11 at 08:38, Andrew Morton wrote:
> > > This information loss is unfortunate. Examples:
> > >
> > > for (i = 0; i < N; i++)
> > > prefetch(foo[i]);
> > >
> > > Problem is, if `prefetch' is a no-op, the compiler will still
> > > generate an empty busy-wait loop. Which it must do.
> >
> > Why - nothing there is volatile
>
> Because the compiler sees:
>
> for (i = 0; i < N; i++)
> ;
>
> and it says "ah ha. A busy wait delay loop" and leaves it alone.
>
> It's actually a special-case inside the compiler to not optimise
> away such constructs.

Good lord. If anyone depends all versions of GCC to not optimize this away,
they are going to hate life. Since GCC doesn't seem to do cross file
optimization (does it?) I've found the following works well:

cat > use_result.c
int dummy; // can't be static, the compiler will see it's not read

use_result(int i)
{
dummy = i;
}
^D

for (i = 0; i < N; ++i) use_result(i);

I'm positive we do stuff like this in LMbench, which is fairly well supported
on a pile of different platforms/compilers.
--
---
Larry McVoy lm at bitmover.com http://www.bitmover.com/lm
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:27    [W:0.094 / U:0.272 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site