[Bug rtl-optimization/54919] [4.6/4.7/4.8 Regression] gcc.dg/torture/pr54877.c FAILs with -fvariable-expansion-in-unroller
steven at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sat Oct 13 16:38:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54919
--- Comment #2 from Steven Bosscher <steven at gcc dot gnu.org> 2012-10-13 16:38:14 UTC ---
At the ".178r.loop2_invariant" dump:
5 r61:SI=0x40 # 64
6 r62:DF=[`*.LC0'] # 0.0
34 r68:DF=[`*.LC1'] # 1.0e+0
L16:
11 r62:DF=r62:DF-r68:DF
12 {r61:SI=r61:SI-0x1;clobber flags:CC;}
13 flags:CCZ=cmp(r61:SI,0)
14 pc={(flags:CCZ==0)?L19:pc}
# {implicit: pc=L16}
L19:
21 r67:SI=fix(r62:DF)
26 ax:SI=r67:SI
29 use ax:SI
Clearly the above loop iterates 64 times. But in the next pass
(".180r.loop2_unroll") the iterations estimate is not 64:
;; *** Considering loop 1 for complete peeling ***
;; Considering peeling once rolling loop
...
Loop 1 is simple:
simple exit 3 -> 5
number of iterations: (const_int 63 [0x3f])
upper bound: 63
realistic bound: 63
;; Unable to prove that the loop rolls exactly once
;; Considering peeling completely
;; Not peeling loop completely, rolls too much (63 iterations > 16 [maximum
peelings])
;; *** Considering loop 1 ***
;; Considering unrolling loop with constant number of iterations
;; max_unroll 8 (8 copies, initial 8).
;; Decided to unroll the constant times rolling loop, 7 times.
But with the wrong iteration estimate, the unrolled loop size is wrong.
More information about the Gcc-bugs
mailing list