[Bug middle-end/30201] gcc doesn't unroll nested loops
bangerth at dealii dot org
gcc-bugzilla@gcc.gnu.org
Thu Dec 14 15:16:00 GMT 2006
------- Comment #7 from bangerth at dealii dot org 2006-12-14 15:16 -------
I've reduced the code a bit by stripping all C++isms and collapsing
everything into a single function:
-----------------------------------
double data[9];
int main()
{
for( int factor = 0; factor < 1000000000; factor++ )
{
#ifdef UNROLL
data[ 0 + 3 * 0 ] = factor;
data[ 1 + 3 * 0 ] = 0;
data[ 2 + 3 * 0 ] = 0;
data[ 0 + 3 * 1 ] = 0;
data[ 1 + 3 * 1 ] = factor;
data[ 2 + 3 * 1 ] = 0;
data[ 0 + 3 * 2 ] = 0;
data[ 1 + 3 * 2 ] = 0;
data[ 2 + 3 * 2 ] = factor;
#else
for( int i = 0; i < 3; i++ )
for( int j = 0; j < 3; j++ )
data[i + 3 * j] = (i == j) * factor;
#endif
}
}
-----------------------------
For this, we get these results:
g/x> gcc x.c -O3 -funroll-loops -std=c99
g/x> time ./a.out
real 0m9.380s
user 0m9.381s
sys 0m0.000s
g/x> gcc x.c -O3 -funroll-loops -std=c99 -DUNROLL
g/x> time ./a.out
real 0m0.420s
user 0m0.420s
sys 0m0.000s
W.
--
bangerth at dealii dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |bangerth at dealii dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30201
More information about the Gcc-bugs
mailing list