Dictation of strength reduction in source is required for adequate performance on this target. The same source "optimization" is counter-productive for ia32.
This is a portion of the diff file between 2 versions of libgfortran/generated/matmul_r8.c. for (n = 0; n < count; n++) { ! abase_n = abase + n * aystride; sum += abase_n[x] * bbase_y[n]; sum1 += abase_n[x+1] * bbase_y[n]; --- 199,208 ---- { rtype_name sum = 0, sum1 = 0; + index_type nay = 0; for (n = 0; n < count; n++) { ! /* FIXME: gcc ought to strength reduce from n * aystride */ ! abase_n = abase + nay; ! nay += aystride; sum += abase_n[x] * bbase_y[n]; sum1 += abase_n[x+1] * bbase_y[n]; -- Summary: missed strength reduction costs performance Product: gcc Version: 4.1.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: tprince at computer dot org CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: ia64-unknown-linux-gnu GCC host triplet: ia64-unknown-linux-gnu GCC target triplet: ia64-unknown-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23845