[PATCH] Fixes tree-loop-distribute-patterns issues
Joseph S. Myers
joseph@codesourcery.com
Fri Jun 21 01:29:00 GMT 2013
On Fri, 21 Jun 2013, Ondrej Bilka wrote:
> > I expect -O0 performance to depend a lot more on GCC version than -O2.
> >
> You expect but could you prove it? Please provide two versions of gcc
> where you get different simple-* function when compiling with -O0 -S
>
> Versions I checked are
> Debian 4.5.3-12
> Debian 4.7.1-2
> gcc version 4.9.0 20130516 (experimental) (GCC)
>
> Assemblies produced are same for following fragment:
>
> void
> *memset (char *s, int c, int n)
> {
> int i;
> for(i=0 ;i<n; i++) s[i] = c;
> return s;
> }
I tried 4.3 and 4.4 based compilers building for i586 and got differences:
< movl %eax, %edx
< addl 8(%ebp), %edx
< movl 12(%ebp), %eax
< movb %al, (%edx)
---
> addl 8(%ebp), %eax
> movl 12(%ebp), %edx
> movb %dl, (%eax)
The general principle is simple enough: -O0 code is more likely to depend
on the fine details of the implementation, because differences in the
internal representation of no semantic significance can easily result in
changes to the generated code when a dumb conversion from IR to assembly
is in operation, whereas with -O2 such non-semantic differences are likely
to be optimized away. And for such simple functions there's only a
limited amount an optimizer can do so different compiler versions are
likely to differ only in insubstantial matters of instruction ordering and
register allocation.
Any sort of performance measurement involving -O0 is extremely suspect,
simply because performance is essentially not a consideration at all for
-O0 code generation; other matters such as speed of the compiler itself
and debuggability are the considerations involved, and are the things
people may try to avoid regressing across compiler upgrades.
--
Joseph S. Myers
joseph@codesourcery.com
More information about the Libc-alpha
mailing list