http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54966
--- Comment #9 from vincenzo Innocente <vincenzo.innocente at cern dot ch> 2012-11-09 06:52:22 UTC --- better and worse! better than 4.7.2 lto is worse in 4.8 Attached is a test case, just one file bzip2 -d smatrix.ii.bz2 the main component is this three different way of computing the same matrix multiplication with more and more explicit temporaries.. tvc = //33 3N NN NM MM -ve * (Transpose(a)) * tw * b * s; } void compute2() { // NM NM MM AlgebraicMatrixNM twbs = tw * b * s; tvc = //33 3N -ve * (Transpose(a)) * twbs; } void compute3() { // NM NM MM AlgebraicMatrixNM twbs = tw * b * s; // 33 3N AlgebraicMatrix3N tmpM1 = -ve * (Transpose(a)); tvc = tmpM1 * twbs; } timing is in cycle using __rdtsc(); on Inel x86_64 stability maybe 10%… Target: x86_64-unknown-linux-gnu gcc version 4.7.2 (GCC) [vocms123] ~/public/ctest/bugs48 $ c++ -O2 smatrix.ii; ./a.out size 5. v1: time in cycles 30159.6 size 5. v2: time in cycles 6031.1 size 5. v3: time in cycles 3388.17 size 6. v1: time in cycles 60336.6 size 6. v2: time in cycles 10366.8 size 6. v3: time in cycles 5955.81 [vocms123] ~/public/ctest/bugs48 $ c++ -O2 smatrix.ii -flto; ./a.out size 5. v1: time in cycles 12818.8 size 5. v2: time in cycles 10453.9 size 5. v3: time in cycles 5954.23 size 6. v1: time in cycles 46293.1 size 6. v2: time in cycles 12309.2 size 6. v3: time in cycles 11621.8 [vocms123] ~/public/ctest/bugs48 $ c++ -O3 smatrix.ii; ./a.out size 5. v1: time in cycles 39630.3 size 5. v2: time in cycles 5869.96 size 5. v3: time in cycles 1966.87 size 6. v1: time in cycles 69531.4 size 6. v2: time in cycles 9020.06 size 6. v3: time in cycles 4732.99 [vocms123] ~/public/ctest/bugs48 $ c++ -O3 smatrix.ii -flto; ./a.out size 5. v1: time in cycles 12425.1 size 5. v2: time in cycles 9650.03 size 5. v3: time in cycles 5340.79 size 6. v1: time in cycles 45998 size 6. v2: time in cycles 11128.1 size 6. v3: time in cycles 10383 gcc version 4.8.0 20121108 (experimental) [trunk revision 193333] (GCC) [vocms123] ~/public/ctest/bugs48 $ c++ -O2 smatrix.ii ; ./a.out size 5. v1: time in cycles 14040.5 size 5. v2: time in cycles 3264.85 size 5. v3: time in cycles 3457.25 size 6. v1: time in cycles 37368.4 size 6. v2: time in cycles 5813.81 size 6. v3: time in cycles 6224.37 [vocms123] ~/public/ctest/bugs48 $ c++ -O2 smatrix.ii -flto ; ./a.out size 5. v1: time in cycles 20705.2 size 5. v2: time in cycles 6333.17 size 5. v3: time in cycles 6654.85 size 6. v1: time in cycles 49788.8 size 6. v2: time in cycles 6828.72 size 6. v3: time in cycles 7188.28 [vocms123] ~/public/ctest/bugs48 $ c++ -O3 smatrix.ii ; ./a.out size 5. v1: time in cycles 17350.4 size 5. v2: time in cycles 2355.68 size 5. v3: time in cycles 1891.62 size 6. v1: time in cycles 38002 size 6. v2: time in cycles 4046.09 size 6. v3: time in cycles 3954.97 [vocms123] ~/public/ctest/bugs48 $ c++ -O3 smatrix.ii -flto; ./a.out size 5. v1: time in cycles 20380.9 size 5. v2: time in cycles 4504.76 size 5. v3: time in cycles 4576.5 size 6. v1: time in cycles 42327.9 size 6. v2: time in cycles 3405.72 size 6. v3: time in cycles 3314.2 stability test [vocms123] ~/public/ctest/bugs48 $ c++ -O3 smatrix.ii -flto ; ./a.out size 5. v1: time in cycles 20447.2 size 5. v2: time in cycles 4509.64 size 5. v3: time in cycles 4580.46 size 6. v1: time in cycles 42361.2 size 6. v2: time in cycles 3407.53 size 6. v3: time in cycles 3316.36 [vocms123] ~/public/ctest/bugs48 $ ./a.out size 5. v1: time in cycles 23968.7 size 5. v2: time in cycles 5277.67 size 5. v3: time in cycles 5353.72 size 6. v1: time in cycles 49573 size 6. v2: time in cycles 4023.34 size 6. v3: time in cycles 3862.6