------- Comment #21 from rguenth at gcc dot gnu dot org 2006-05-12 14:00 ------- This looks related to PR26726 as IVOPTs produces now
<bb 2>: i = minLen + 1; D.1588 = (int *) (unsigned int) (i * 4); ivtmp.34 = limit + D.1588 - 4B; ivtmp.40 = base + D.1588; goto <bb 4> (<L1>); <L0>:; D.1595 = (int *) ivtmp.40; MEM[base: D.1595, offset: -4B] = (MEM[base: (int *) ivtmp.34, offset: -4B] + 1 << 1) - MEM[base: D.1595, offset: -4B]; i = i + 1; <L1>:; ivtmp.34 = ivtmp.34 + 4B; ivtmp.40 = ivtmp.40 + 4B; if (i <= maxLen) goto <L0>; else goto <L2>; with the seemingly innocuous offset: -4B canonicalization because of the weird i386 backend cost model. Now if fixing that would fix the size issue is another thing. Not replacing the exit test or using i as solely IV is another thing - but it doesn't even consider i as IV candidate. -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- BugsThisDependsOn| |26726 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18219