Hello, 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.
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)
test1.c
Description: Binary data
