This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug rtl-optimization/54919] [4.6/4.7/4.8 Regression] gcc.dg/torture/pr54877.c FAILs with -fvariable-expansion-in-unroller


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]