On January 24, 2019 8:19:11 PM GMT+01:00, Jakub Jelinek <ja...@redhat.com> wrote: >On Wed, Jan 23, 2019 at 09:23:53AM +0100, Richard Biener wrote: >> On Tue, 22 Jan 2019, Jakub Jelinek wrote: >> >> > Hi! >> > >> > SCEV can analyze not just integral/pointer IVs, but (scalar) float >ones as >> > well. Calling build_int_cst on such types results in ICE, >build_zero_cst >> > works. Though the loop invariant PHI IVs, if we represent them as >using >> > +0.0 step, aren't correct if honoring signed zeros, as + 0.0 will >make >> > a +0.0 out of -0.0. >> > >> > Bootstrapped/regtested on {x86_64,i686,powerpc64{,le}}-linux, ok >for trunk? >> >> OK. > >Thinking about it, if we honor SNaNs, we should punt too, even if we >are not >honoring signed zeros, because sNaN + 0.0 artificially added there will >raise an exception, where previously the code could not raise it. > >Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok >for >trunk?
OK. Richard. >2019-01-24 Jakub Jelinek <ja...@redhat.com> > > PR tree-optimization/88964 > * gimple-loop-interchange.cc (loop_cand::analyze_induction_var): Also > punt if HONOR_SNANS (chrec). > >--- gcc/gimple-loop-interchange.cc.jj 2019-01-23 09:34:53.739433699 >+0100 >+++ gcc/gimple-loop-interchange.cc 2019-01-23 12:53:35.215848790 +0100 >@@ -690,8 +690,8 @@ loop_cand::analyze_induction_var (tree v > { > /* Punt on floating point invariants if honoring signed zeros, > representing that as + 0.0 would change the result if init >- is -0.0. */ >- if (HONOR_SIGNED_ZEROS (chrec)) >+ is -0.0. Similarly for SNaNs it can raise exception. */ >+ if (HONOR_SIGNED_ZEROS (chrec) || HONOR_SNANS (chrec)) > return false; > struct induction *iv = XCNEW (struct induction); > iv->var = var; > > > Jakub