[Bug tree-optimization/19401] Trivial loop not unrolled

rguenth at tat dot physik dot uni-tuebingen dot de gcc-bugzilla@gcc.gnu.org
Mon Jan 24 09:43:00 GMT 2005


------- Additional Comments From rguenth at tat dot physik dot uni-tuebingen dot de  2005-01-24 09:43 -------
Another one - matrix multiplication:

/* A [NxM], B [MxP] */
#define DOLOOP(N, M, P) \
void matmul ## N ## M ## P(double *res, const double *A, const double *B) \
{ \
        int i,j,k; \
        for (k=0; k<P; ++k) \
                for (i=0; i<N; ++i) { \
                        double s = 0.0; \
                        for (j=0; j<M; ++j) \
                                s += A[i*M+j] * B[j*P+k]; \
                        res[i*P+k] = s; \
                } \
}

DOLOOP(1, 1, 1)
DOLOOP(2, 1, 2)
DOLOOP(1, 2, 1)
DOLOOP(2, 2, 2)
DOLOOP(1, 3, 1)
DOLOOP(1, 1024, 1)

all up to 2x2 should be profitable to completely unroll.  Be sure to unroll
one-time rolling loops like for the last case.

Zdeneks patch only does not unroll the DOLOOP(2, 2, 2) case at -O2. Good.

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19401



More information about the Gcc-bugs mailing list