------- Comment #13 from bernds at gcc dot gnu dot org  2010-06-25 08:56 -------
Subject: Bug 43902

Author: bernds
Date: Fri Jun 25 08:56:24 2010
New Revision: 161366

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=161366
Log:
        With large parts from Jim Wilson:
        PR target/43902
        * tree-pretty-print.c (dump_generic_node, op_code_prio): Add
        WIDEN_MULT_PLUS_EXPR and WIDEN_MULT_MINUS_EXPR.
        * optabs.c (optab_for_tree_code): Likewise.
        (expand_widen_pattern_expr): Likewise.
        * tree-ssa-math-opts.c (convert_mult_to_widen): New function, broken
        out of execute_optimize_widening_mul.
        (convert_plusminus_to_widen): New function.
        (execute_optimize_widening_mul): Use the two new functions.
        * expr.c (expand_expr_real_2): Add support for GIMPLE_TERNARY_RHS.
        Remove code to generate widening multiply-accumulate.  Add support
        for WIDEN_MULT_PLUS_EXPR and WIDEN_MULT_MINUS_EXPR.
        * gimple-pretty-print.c (dump_ternary_rhs): New function.
        (dump_gimple_assign): Call it when appropriate.
        * tree.def (WIDEN_MULT_PLUS_EXPR, WIDEN_MULT_MINUS_EXPR): New codes.
        * cfgexpand.c (gimple_assign_rhs_to_tree): Likewise.
        (expand_gimple_stmt_1): Likewise.
        (expand_debug_expr): Support WIDEN_MULT_PLUS_EXPR and
        WIDEN_MULT_MINUS_EXPR.
        * tree-ssa-operands.c (get_expr_operands): Likewise.
        * tree-inline.c (estimate_operator_cost): Likewise.
        * gimple.c (extract_ops_from_tree_1): Renamed from
        extract_ops_from_tree.  Add new arg for a third operand; fill it.
        (gimple_build_assign_stat): Support operations with three operands.
        (gimple_build_assign_with_ops_stat): Likewise.
        (gimple_assign_set_rhs_from_tree): Likewise.
        (gimple_assign_set_rhs_with_ops_1): Renamed from
        gimple_assign_set_rhs_with_ops.  Add new arg for a third operand.
        (get_gimple_rhs_num_ops): Support GIMPLE_TERNARY_RHS.
        (get_gimple_rhs_num_ops): Handle WIDEN_MULT_PLUS_EXPR and
        WIDEN_MULT_MINUS_EXPR.
        * gimple.h (enum gimple_rhs_class): Add GIMPLE_TERNARY_RHS.
        (extract_ops_from_tree_1): Adjust declaration.
        (gimple_assign_set_rhs_with_ops_1): Likewise.
        (gimple_build_assign_with_ops): Pass NULL for last operand.
        (gimple_build_assign_with_ops3): New macro.
        (gimple_assign_rhs3, gimple_assign_rhs3_ptr, gimple_assign_set_rhs3,
        gimple_assign_set_rhs_with_ops, extract_ops_from_tree): New inline
        functions.
        * tree-cfg.c (verify_gimple_assign_ternary): New static function.
        (verify_gimple_assign): Call it.
        * doc/gimple.texi (Manipulating operands): Document GIMPLE_TERNARY_RHS.
        (Tuple specific accessors, subsection GIMPLE_ASSIGN): Document new
        functions for dealing with three-operand statements.
        * tree.c (commutative_ternary_tree_code): New function.
        * tree.h (commutative_ternary_tree_code): Declare it.
        * tree-vrp.c (gimple_assign_nonnegative_warnv_p): Return false for
ternary
        statements.
        (gimple_assign_nonzero_warnv_p): Likewise.
        * tree-ssa-sccvn.c (stmt_has_constants): Handle GIMPLE_TERNARY_RHS.
        * tree-ssa-ccp.c (get_rhs_assign_op_for_ccp): New static function.
        (ccp_fold): Use it.  Handle GIMPLE_TERNARY_RHS.
        * tree-ssa-dom.c (enum expr_kind): Add EXPR_TERNARY.
        (struct hashtable_expr): New member ternary in the union.
        (initialize_hash_element): Handle GIMPLE_TERNARY_RHS.
        (hashable_expr_equal_p): Fix indentation.  Handle EXPR_TERNARY.
        (iterative_hash_hashable_expr): Likewise.
        (print_expr_hash_elt): Handle EXPR_TERNARY.
        * gimple-fold.c (fold_gimple_assign): Handle GIMPLE_TERNARY_RHS.
        * tree-ssa-threadedge.c (fold_assignment_stmt): Remove useless break
        statements.  Handle GIMPLE_TERNARY_RHS.

testsuite/
        PR target/43902
        * gcc.target/mips/madd-9.c: New test.


Added:
    trunk/gcc/testsuite/gcc.target/mips/madd-9.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/cfgexpand.c
    trunk/gcc/doc/gimple.texi
    trunk/gcc/expr.c
    trunk/gcc/gimple-fold.c
    trunk/gcc/gimple-pretty-print.c
    trunk/gcc/gimple.c
    trunk/gcc/gimple.h
    trunk/gcc/optabs.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/tree-cfg.c
    trunk/gcc/tree-inline.c
    trunk/gcc/tree-pretty-print.c
    trunk/gcc/tree-ssa-ccp.c
    trunk/gcc/tree-ssa-dom.c
    trunk/gcc/tree-ssa-math-opts.c
    trunk/gcc/tree-ssa-operands.c
    trunk/gcc/tree-ssa-sccvn.c
    trunk/gcc/tree-ssa-threadedge.c
    trunk/gcc/tree-vrp.c
    trunk/gcc/tree.c
    trunk/gcc/tree.def
    trunk/gcc/tree.h


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43902

Reply via email to