On Sat, 2014-11-08 at 13:07 +0100, Richard Biener wrote:
> On Fri, Nov 7, 2014 at 10:01 PM, Richard Biener
> <richard.guent...@gmail.com> wrote:
> > On Fri, Nov 7, 2014 at 4:21 PM, David Malcolm <dmalc...@redhat.com> wrote:
> >> gcc/ChangeLog.gimple-classes:
> >>         * tree-ssa-tail-merge.c (same_succ_hash): Add checked cast.
> >>         (gimple_equal_p): Add checked casts.
> >> ---
> >>  gcc/ChangeLog.gimple-classes | 5 +++++
> >>  gcc/tree-ssa-tail-merge.c    | 8 +++++---
> >>  2 files changed, 10 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/gcc/ChangeLog.gimple-classes b/gcc/ChangeLog.gimple-classes
> >> index f43df63..0bd0421 100644
> >> --- a/gcc/ChangeLog.gimple-classes
> >> +++ b/gcc/ChangeLog.gimple-classes
> >> @@ -1,5 +1,10 @@
> >>  2014-11-06  David Malcolm  <dmalc...@redhat.com>
> >>
> >> +       * tree-ssa-tail-merge.c (same_succ_hash): Add checked cast.
> >> +       (gimple_equal_p): Add checked casts.
> >> +
> >> +2014-11-06  David Malcolm  <dmalc...@redhat.com>
> >> +
> >>         * tree-ssa-structalias.c (find_func_aliases): Replace
> >>         is_gimple_assign with a dyn_cast, introducing local gassign *
> >>         "t_assign", using it in place of "t" for typesafety.
> >> diff --git a/gcc/tree-ssa-tail-merge.c b/gcc/tree-ssa-tail-merge.c
> >> index 5678657..b822214 100644
> >> --- a/gcc/tree-ssa-tail-merge.c
> >> +++ b/gcc/tree-ssa-tail-merge.c
> >> @@ -484,7 +484,7 @@ same_succ_hash (const_same_succ e)
> >>
> >>        hstate.add_int (gimple_code (stmt));
> >>        if (is_gimple_assign (stmt))
> >> -       hstate.add_int (gimple_assign_rhs_code (stmt));
> >> +       hstate.add_int (gimple_assign_rhs_code (as_a <gassign *> (stmt)));
> >>        if (!is_gimple_call (stmt))
> >>         continue;
> >>        if (gimple_call_internal_p (stmt))
> >> @@ -1172,8 +1172,10 @@ gimple_equal_p (same_succ same_succ, gimple s1, 
> >> gimple s2)
> >>        if (TREE_CODE (lhs1) != SSA_NAME
> >>           && TREE_CODE (lhs2) != SSA_NAME)
> >>         return (operand_equal_p (lhs1, lhs2, 0)
> >> -               && gimple_operand_equal_value_p (gimple_assign_rhs1 (s1),
> >> -                                                gimple_assign_rhs1 (s2)));
> >> +               && gimple_operand_equal_value_p (gimple_assign_rhs1 (
> >> +                                                  as_a <gassign *> (s1)),
> >> +                                                gimple_assign_rhs1 (
> >> +                                                  as_a <gassign *> 
> >> (s2))));
> >
> > Just a comment as these patches flow by - I think this is a huge step
> > backwards from "enforcing" s1/s2 being a gimple_assign inside
> > gimple_assign_rhs1 to this as_a <gassign *> boilerplate at _each_ callsite!
> >
> > Which means this step of the refactoring is totally broken and probably
> > requires much more manual work to avoid this kind of uglyness.
> >
> > I definitely won't approve of this kind of changes.
> 
> To be constructive here - the above case is from within a
> GIMPLE_ASSIGN case label
> and thus I'd have expected
> 
>     case GIMPLE_ASSIGN:
>       {
>         gassign *a1 = as_a <gassign *> (s1);
>         gassign *a2 = as_a <gassign *> (s2);
>       lhs1 = gimple_assign_lhs (a1);
>       lhs2 = gimple_assign_lhs (a2);
>       if (TREE_CODE (lhs1) != SSA_NAME
>           && TREE_CODE (lhs2) != SSA_NAME)
>         return (operand_equal_p (lhs1, lhs2, 0)
>                 && gimple_operand_equal_value_p (gimple_assign_rhs1 (a1),
>                                                  gimple_assign_rhs1 (a2)));
>       else if (TREE_CODE (lhs1) == SSA_NAME
>                && TREE_CODE (lhs2) == SSA_NAME)
>         return vn_valueize (lhs1) == vn_valueize (lhs2);
>       return false;
>       }
> 
> instead.  That's the kind of changes I have expected and have approved of.

I do make the above kind of change in some places within the
gimple-classes branch.

I think I didn't do it in this case because the body of the "case
GIMPLE_ASSIGN" doesn't yet have braces, so adding locals requires adding
them and re-indenting the case body.  I didn't spot the opportunity to
speed up the code as you do above by converting the two gimple_get_lhs
to gimple_assign_lhs.  Without that, I guess I decided to simply add the
two as_a<> directly in-place to avoid the reindent.   With your speedup
it's clearly better to reindent the code.


(Got to go now, sorry; I hope to write a better reply on Monday)

Thanks
Dave

Reply via email to