Sebastian Pop wrote: > Richard Biener wrote: > > looks like > > RTL issues and/or IVOPTs issues? > > I should have posted the first diff between the compilers with > -fdump-tree-all: > that would expose the problem at its root.
Looks like this is caused by the fwprop pass: diff -u -r ./foo.i.087t.forwprop3 ../mas/foo.i.087t.forwprop3 --- ./foo.i.087t.forwprop3 2014-10-17 13:17:29.985327000 -0500 +++ ../mas/foo.i.087t.forwprop3 2014-10-17 13:17:29.308814000 -0500 @@ -5,6 +5,8 @@ Pass statistics: ---------------- +Applying pattern match-comparison.pd:43, gimple-match.c:11747 +gimple_simplified to if (i_20 != 99) Pass statistics: ---------------- @@ -60,7 +62,7 @@ i_17 = i_20 + 1; # DEBUG iD.2450 => i_17 # DEBUG iD.2450 => i_17 - if (i_17 != 100) + if (i_20 != 99) goto <bb 3>; else goto <bb 4>; [...] diff -u -r ./foo.i.089t.ccp3 ../mas/foo.i.089t.ccp3 --- ./foo.i.089t.ccp3 2014-10-17 13:17:29.991734000 -0500 +++ ../mas/foo.i.089t.ccp3 2014-10-17 13:17:29.316140000 -0500 @@ -53,13 +53,13 @@ # VUSE <.MEM_16> return; -i_17 : -->2 uses. +i_17 : --> single use. i_20 = PHI <i_17(3), 0(2)> # DEBUG i => i_17 -if (i_17 != 100) # DEBUG i => i_17 -i_20 : -->2 uses. +i_20 : -->3 uses. +if (i_20 != 99) i_17 = i_20 + 1; _4 = (long unsigned int) i_20; # DEBUG i => i_20