This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[tcb] Conditional copy propagation


This patch allows us to remove kill_redundant_phi_nodes by implementing
conditional copy propagation, which is based on the same propagation
engine used by SSA-CCP.  The basic idea is the same, we not only want to
propagate copies directly, but also through PHI nodes and conditional
edges that may not always be executable.

Things yet to do include making sure the propagation is fast enough to
be called often, replace DOM's copy propagation and evaluate how
effective conditional copy propagation is relative to the
straightforward copy-propagation that the SSA form gives us for free.

Bootstrapped and tested x86 and x86-64.


Diego.


        * Makefile.in (tree-ssa-copy.o): Add dependency on
        tree-ssa-propagate.h.
        * common.opt (ftree-copy-prop): New switch.
        * opts.c (decode_options): Set flag_tree_copy_prop at -O1 and
        higher.
        * timevar.def (TV_TREE_COPY_PROP): Define.
        * tree-cfg.c (tree_can_merge_blocks_p): Update comment.
        (find_taken_edge): Call fold if VAL is a comparison operator.
        * tree-flow.h (get_ptr_info): Declare.
        (kill_redundant_phi_nodes): Remove.
        (execute_ssa_ccp): Declare.
        (execute_copy_prop): Declare.
        * tree-optimize.c (init_tree_optimization_passes): Add
        pass_copy_prop and pass_fre.  Add more instances of pass_ccp.
        * tree-pass.h (pass_copy_prop): Declare.
        * tree-ssa-alias.c (get_ptr_info): Remove static declaration.
        * tree-ssa-ccp.c (get_default_value): Add parameter
        may_use_default_p.
        Update all callers.
        (set_lattice_value): Set SSA_NAME_VALUE.
        (need_imm_uses_for): Return true on PHI nodes and assignments
        that have no V_MAY_DEFs.
        (ccp_initialize): Do not initialize to VARYING DEFs and
        V_MUST_DEFs whose default value is VARYING.
        (execute_ssa_ccp): Make extern.
        * tree-ssa-copy.c: Update header documentation.
        (may_propagate_copy): Do not abort if ORIG is a GIMPLE reg.
        (merge_alias_info): Synchronize flow sensitive alias
        information.
        (need_imm_uses_for, get_first_copy_of, get_last_copy_of,
        set_first_copy_of, dump_copy_of, copy_prop_visit_assignment,
        copy_prop_visit_cond_stmt, copy_prop_visit_stmt,
        copy_prop_visit_phi_node, init_copy_prop, fini_copy_prop,
        execute_copy_prop): New local functions.
        * tree-ssa-pre.c (compute_avail): Also process DECLs.
        (execute_fre): Make extern.
        * tree-ssa-propagate.c: Update copyright years.
        (ssa_prop_init): Clear SSA_NAME_VALUE for every name.
        (replace_uses_in, replace_vuse_in, substitute_and_fold): Move
        from tree-ssa-ccp.c.
        * tree-ssa-propagate.h: Update copyright years.
        (replace_uses_in, substitute_and_fold): Declare.
        * tree-ssa.c (propagate_into_addr, replace_immediate_uses,
        get_eq_name, check_phi_redundancy, kill_redundant_phi_nodes,
        pass_redundant_phi): Remove.
        * tree.h (struct tree_ssa_name): Update comment for field
        value_handle.
        * doc/invoke.texi: Document -ftree-copy-prop.

testsuite/ChangeLog.tcb

        * gcc.dg/tree-ssa/20030530-2.c: Update dump file to scan.
        * gcc.dg/tree-ssa/20030611-1.c: Likewise.
        * gcc.dg/tree-ssa/20030703-1.c: Likewise.
        * gcc.dg/tree-ssa/20030703-2.c: Likewise.
        * gcc.dg/tree-ssa/20030708-1.c: Likewise.
        * gcc.dg/tree-ssa/20030709-3.c: Likewise.
        * gcc.dg/tree-ssa/20030710-1.c: Likewise.
        * gcc.dg/tree-ssa/20030711-1.c: Likewise.
        * gcc.dg/tree-ssa/20030711-2.c: Likewise.
        * gcc.dg/tree-ssa/20030711-3.c: Likewise.
        * gcc.dg/tree-ssa/20030714-1.c: Likewise.
        * gcc.dg/tree-ssa/20030714-2.c: Likewise.
        * gcc.dg/tree-ssa/20030729-1.c: Likewise.
        * gcc.dg/tree-ssa/20030730-1.c: Likewise.
        * gcc.dg/tree-ssa/20030730-2.c: Likewise.
        * gcc.dg/tree-ssa/20030731-1.c: Likewise.
        * gcc.dg/tree-ssa/20030731-2.c: Likewise.
        * gcc.dg/tree-ssa/20030807-1.c: Likewise.
        * gcc.dg/tree-ssa/20030807-10.c: Likewise.
        * gcc.dg/tree-ssa/20030807-11.c: Likewise.
        * gcc.dg/tree-ssa/20030807-2.c: Likewise.
        * gcc.dg/tree-ssa/20030807-3.c: Likewise.
        * gcc.dg/tree-ssa/20030807-5.c: Likewise.
        * gcc.dg/tree-ssa/20030807-6.c: Likewise.
        * gcc.dg/tree-ssa/20030807-7.c: Likewise.
        * gcc.dg/tree-ssa/20030807-8.c: Likewise.
        * gcc.dg/tree-ssa/20030807-9.c: Likewise.
        * gcc.dg/tree-ssa/20030814-1.c: Likewise.
        * gcc.dg/tree-ssa/20030814-2.c: Likewise.
        * gcc.dg/tree-ssa/20030814-3.c: Likewise.
        * gcc.dg/tree-ssa/20030814-4.c: Likewise.
        * gcc.dg/tree-ssa/20030814-5.c: Likewise.
        * gcc.dg/tree-ssa/20030814-6.c: Likewise.
        * gcc.dg/tree-ssa/20030814-7.c: Likewise.
        * gcc.dg/tree-ssa/20030815-1.c: Likewise.
        * gcc.dg/tree-ssa/20030917-1.c: Likewise.
        * gcc.dg/tree-ssa/20030917-3.c: Likewise.
        * gcc.dg/tree-ssa/20030922-1.c: Likewise.
        * gcc.dg/tree-ssa/20040514-2.c: Likewise.
        * gcc.dg/tree-ssa/20040721-1.c: Likewise.
        * gcc.dg/tree-ssa/ssa-ccp-1.c: Likewise.
        * gcc.dg/tree-ssa/ssa-ccp-2.c: Likewise.
        * gcc.dg/tree-ssa/ssa-ccp-3.c: Likewise.
        * gcc.dg/tree-ssa/ssa-ccp-7.c: Likewise.
        * gcc.dg/tree-ssa/ssa-ccp-9.c: Likewise.
        * gcc.dg/tree-ssa/ssa-dom-ccp-1.c: Likewise.

Attachment: 20040921-copy-prop.diff.gz
Description: GNU Zip compressed data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]