Message ID | CAELXzTPsEH67qeYf77dLfQYpEFQ=pFA2n+eXQkcB5qCVRfSmnw@mail.gmail.com |
---|---|
State | New |
Headers | show |
On Tue, May 24, 2016 at 06:46:49PM +1000, Kugan Vivekanandarajah wrote: > 2016-05-24 Kugan Vivekanandarajah <kuganv@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
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-44.c b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-44.c index e69de29..9b12212 100644 --- 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 } */ +/* { 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];