On Tue, May 24, 2016 at 06:46:49PM +1000, Kugan Vivekanandarajah wrote: > 2016-05-24 Kugan Vivekanandarajah <kug...@linaro.org> > > * tree-ssa-reassoc.c (sort_by_operand_rank): Check fgimple_bb for NULL.
s/fgimple/gimple/ ? > --- a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-44.c > +++ b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-44.c > @@ -0,0 +1,10 @@ > + > +/* { dg-do compile } */ Why the empty line above? Either stick there a PR number if one is filed, or leave it out. > +/* { dg-options "-O2" } */ > + > +unsigned int a; > +int b, c; > +void fn1 () > +{ > + b = a + c + c; > +} > diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c > index fb683ad..06f4d1b 100644 > --- a/gcc/tree-ssa-reassoc.c > +++ b/gcc/tree-ssa-reassoc.c > @@ -525,7 +525,7 @@ sort_by_operand_rank (const void *pa, const void *pb) > gimple *stmtb = SSA_NAME_DEF_STMT (oeb->op); > basic_block bba = gimple_bb (stmta); > basic_block bbb = gimple_bb (stmtb); > - if (bbb != bba) > + if (bba && bbb && bbb != bba) > { > if (bb_rank[bbb->index] != bb_rank[bba->index]) > return bb_rank[bbb->index] - bb_rank[bba->index]; Can bb_rank be ever the same for bbb != bba? If yes, perhaps it would be better to fallthrough into the reassoc_stmt_dominates_stmt_p testing code, if not, perhaps just assert that it is different and just return the difference unconditionally? Jakub