https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78200
--- Comment #15 from rguenther at suse dot de <rguenther at suse dot de> --- On Fri, 11 Nov 2016, venkataramanan.kumar at amd dot com wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78200 > > --- Comment #14 from Venkataramanan <venkataramanan.kumar at amd dot com> --- > Between GCC 6.2.0 and GCC 7 (Nov/10/2016) I see three major differences in > gimple opts dump. > > 1. IPA inline is more aggressive in GCC 7. Looks like it is in-lining more in > hot function "primal_bea_mpp". However completely disabling ipa inline still > produces regression in GCC 7. > > 2. Non canonicial gimple formation at tree if conversion. This is already > pointed in comment 1. Using -fno-tree-loop-if-convert in GCC 7 brings back > the > runtime same as GCC 6. > > 3. In GCC 7 the true block is kept after the "red_cost > 0" check. > > red_cost = arc->cost - arc->tail->potential + > arc->head->potential; > if( bea_is_dual_infeasible( arc, red_cost ) ) > { > True block ==> next++; > perm[next]->a = arc; > perm[next]->cost = red_cost; > perm[next]->abs_cost = ABS(red_cost); > > Note bea_is_dual_infeasible is expanded by this check > red_cost < 0 && arc->ident == AT_LOWER) > || (red_cost > 0 && arc->ident == AT_UPPER) > > > Tree VRP in GCC6 moves the true block to the last of the gimple blocks. > > Now When I compile GCC 6 with -fno-tree-vrp the true block is at same position > as in GCC 7 (trunk). I get the regression in GCC 6. > > So block movement in GCC 6 and not done in GCC 7 is also interesting > observation. block movement on gimple doesn't really mean anything but what is interesting is the (guessed) profile data on the blocks/edges.