Messages in this thread | | | Date | Tue, 13 Aug 2002 23:42:15 +0200 (CEST) | From | Adrian Bunk <> | Subject | Re: [patch 4/21] fix ARCH_HAS_PREFETCH |
| |
On Sun, 11 Aug 2002, 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.
Why is this a special case? As long as a compiler can't prove that the computed value of i isn't used later it mustn't optimize it away.
Kernighan/Ritchie (German translation of the second edition) contains the following example program that shows why the compiler mustn't optimize it away:
<-- snip -->
#include <stdio.h>
main() { double nc;
for (nc = 0; getchar() != EOF; ++nc) ; printf("%.0f\n", nc);
}
<-- snip -->
cu Adrian
--
You only think this is a free country. Like the US the UK spends a lot of time explaining its a free country because its a police state. Alan Cox
- 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/
| |