https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77436
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |wrong-code Component|c |middle-end Known to work| |4.9.4 Target Milestone|--- |5.5 Summary|Incorrect constant result |[5/6/7 Regression] |for summing loop inserted |Incorrect constant result | |for summing loop inserted --- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> --- Confirmed, caused by SCCP (or SCEV/niter analysis): Analyzing # of iterations of loop 1 exit condition [-2147483645, + , 1] != 2147483647 bounds on difference of bases: 4294967292 ... 4294967292 result: # of iterations 4294967292, bounded by 4294967292 Replacing uses of: sum_11 with: 2147483648 while it computes correctly the evolution of the sum IV: {0, +, {2147483650, +, 1}_1}_1 somehow the exit PHI value is computed as 2147483648 by compute_overall_effect_of_inner_loop on that IV + x {2147483650, +, {2147483651, +, 1}_1}_1 number of latch executions is computed as 4294967292. We run into chrec_evaluate with the above where binominal coeff evaluation checks for overflow in the signed type but the computation in chrec_evaluate doing arg0 = fold_build2 (MULT_EXPR, type, CHREC_LEFT (chrec), binomial_n_k); has no such checks. On the GCC 4.9 branch we fail: (chrec_apply (varying_loop = 1 ) (chrec = {2147483650, +, {2147483651, +, 1}_1}_1) (x = 4294967292) (res = scev_not_known)) not replacing: sum_2 = PHI <sum_4(3)> thus this is a regression with the wide-int conversion somehow.