On Thu, Aug 11, 2016 at 6:35 PM, Bin Cheng <bin.ch...@arm.com> wrote: > Hi, > I made a mistake when improving loop niter analysis for NE_EXPR exit > condition. > It can results in wrong code as reported in PR72817/PR73450. In previous > patch, > it simplifies below condition: > base <= FINAL ; step > 0 > base >= FINAL ; step < 0 > into: > base - step < FINAL ; step > 0 && base - step doesn't underflow > base - step > FINAL ; step < 0 && base - step doesn't overflow > But this is not enough. Since we adjusted IV.base to "new_base = IV.base - > IV.step" > in the condition, we need to check if |FINAL - new_base| is multiple of > |step| for the > adjusted base. > > This patch fixes the issue as well as revises the comment. Bootstrap and > test on > x86_64. Is it OK?
Ok. Thanks, Richard. > Thanks, > bin > > 2016-08-11 Bin Cheng <bin.ch...@arm.com> > > PR tree-optimization/72817 > PR tree-optimization/73450 > * tree-ssa-loop-niter.c (number_of_iterations_ne): Check > multiple_of_p for adjusted IV.base. > > gcc/testsuite/ChangeLog > 2016-08-11 Bin Cheng <bin.ch...@arm.com> > > PR tree-optimization/72817 > PR tree-optimization/73450 > * gcc.dg/tree-ssa/pr72817.c: New test. > * gcc.dg/tree-ssa/pr73450.c: New test.