Hi, > Doloop optimization fails to be applied on the following inner loop > when compiling for PowerPC (GCC -r162294) due to: > > Doloop: number of iterations too costly to compute.
strength reduction is performed in ivopts, introducing new variable: for (p = inptr; p < something; p += 3) ... So the number of iterations is (something - p) / 3, which doloop considers too costly to compute. Zdenek > I do not understand why as the number of iterations is max_cols and I > appreciate an explanation. > > Thanks, > Revital > > 11 while (--max_rows >= 0) > 12 { > 13 inptr = *inbuf++; > 14 outp = outbuf[0][rows]; > 15 rows++; > 16 > 17 for (y = 0; y < max_cols; y++) > 18 { > 19 k = ((int) (inptr[0])); > 20 inptr += 3; > 21 > 22 outp[y] = (unsigned char) ((inarr[k]) >> 16); > 23 } > 24 } > > > >From Doloop dump: > > Analyzing operand (reg/f:DI 246 [ D.2082 ]) of insn (insn 118 116 119 5 > test1.c:17 (set (reg:CC 272) > (compare:CC (reg/v/f:DI 199 [ inptr ]) > (reg/f:DI 246 [ D.2082 ]))) 535 {*cmpdi_internal1} > (expr_list:REG_DEAD (reg/f:DI 246 [ D.2082 ]) > (nil))) > invariant (reg/f:DI 246 [ D.2082 ]) (in DI) > Loop 2 is simple: > simple exit 5 -> 6 > number of iterations: (mult:DI (plus:DI (minus:DI (reg/f:DI 246 > [ D.2082 ]) > (reg/v/f:DI 199 [ inptr ])) > (const_int -3 [0xfffffffffffffffd])) > (const_int -6148914691236517205 [0xaaaaaaaaaaaaaaab])) > upper bound: -1 > Doloop: number of iterations too costly to compute. > > > (See attached file: test1.c)