http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46528
--- Comment #9 from Richard Guenther <rguenth at gcc dot gnu.org> 2010-11-24 21:50:55 UTC --- The CFGs match, the spanning tree as well. Instrumenting needs to split two edges, but that shouldn't matter and happens elsewhere as well. But we have in .optimized (of the -fprofile-generate case) <bb 11>: pretmp.676_490 = (unsigned int) D.8874_415; pretmp.677_491 = macro_39->params; pretmp.681_496 = *.LPBX1[67]; <bb 12>: # len_429 = PHI <len_55(12), len_44(11)> # ivtmp.698_171 = PHI <ivtmp.698_92(12), 0(11)> D.8871_52 = MEM[base: pretmp.677_491, index: ivtmp.698_171, step: 8, offset: 0B]; D.8872_53 = D.8871_52->ident.len; D.8873_54 = D.8872_53 + 1; len_55 = D.8873_54 + len_429; # DEBUG len => len_55 # DEBUG i => D#11 # DEBUG len => len_55 # DEBUG i => D#11 ivtmp.698_92 = ivtmp.698_171 + 1; i_64 = (unsigned int) ivtmp.698_92; if (i_64 < pretmp.676_490) goto <bb 12>; else goto <bb 13>; <bb 13>: D.11695_474 = pretmp.681_496 + 1; D.11697_493 = pretmp.676_490 + 4294967295; D.11698_127 = (long int) D.11697_493; *.LPBX1_I_lsm.686_486 = D.11695_474 + D.11698_127; *.LPBX1[67] = *.LPBX1_I_lsm.686_486; which at least looks odd to me and produced by SCCP (supposedly *.LPBX1[67] + 1 + (long)(niter - 1), so not 100% invalid). Soooo ... for those who can reproduce it, can you try with -fno-tree-scev-cprop? I'll wrap my brain around that above computation tomorrow ;)