diff options
author | Diego Novillo <dnovillo@redhat.com> | 2004-06-29 01:53:04 +0000 |
---|---|---|
committer | Diego Novillo <dnovillo@gcc.gnu.org> | 2004-06-28 21:53:04 -0400 |
commit | ff2ad0f77f613012b18f08ac9414de159d4971bb (patch) | |
tree | 96e0012a9258a47b5f0378d9e76710e8c9689b4b /gcc/tree-flow-inline.h | |
parent | 7b63e340d215e2c1abf5a6d195b224658020e233 (diff) | |
download | gcc-ff2ad0f77f613012b18f08ac9414de159d4971bb.zip gcc-ff2ad0f77f613012b18f08ac9414de159d4971bb.tar.gz gcc-ff2ad0f77f613012b18f08ac9414de159d4971bb.tar.bz2 |
common.opt (ftree-fre): New flag.
* common.opt (ftree-fre): New flag.
* flags.h (flag_tree_fre): Declare.
* opts.c (decode_options): Set.
* timevar.def (TV_TREE_FRE): Define.
* tree-flow-inline.h (may_propagate_copy): Re-arrange for
readability. Handle destinations that are not SSA_NAMEs.
* tree-flow.h (struct ptr_info_def): Move from tree.h
(cprop_into_stmt, cprop_into_successor_phis): Remove.
(vn_compute, vn_lookup_or_add, vn_add, vn_lookup): Add
vuse_optype parameter.
* tree-pass.h (pass_fre): Declare.
* tree-ssa-copy.c (cprop_operand): Move to tree-ssa-dom.c
(cprop_into_stmt): Likewise.
(cprop_into_successor_phis): Likewise.
* tree-ssa-dom.c (eliminate_redundant_computations): Fix
argument ordering in call to may_propagate_copy.
* tree-ssa-pre.c (is_undefined_value): Assume hard registers
to be always defined.
(add_to_sets): New local function.
(create_value_expr_from): New local function.
(compute_avail): Call them.
(eliminate): Don't ignore statements with virtual operands.
(init_pre): New local function.
(fini_pre): New local function.
(execute_pre): Call them.
Add argument DO_FRE. Don't do insertion if DO_FRE is true.
(do_pre): New function.
(do_fre): New function.
(gate_fre): New function.
(pass_fre): Declare.
* tree-ssa.c (init_tree_ssa): Don't call vn_init.
(delete_tree_ssa): Don't call vn_delete.
* tree-vn.c (val_expr_pair_d): Add documentation.
(vn_compute): Add VUSES argument to incorporate in computing
hash values. Update all callers.
(expressions_equal_p): Call operand_equal_p with
OEP_PURE_SAME.
(vn_add): Add VUSES argument. Update all callers.
(vn_lookup): Likewise.
(vn_lookup_or_add): Likewise.
* doc/invoke.texi: Document -ftree-fre and -fdump-tree-fre.
From-SVN: r83837
Diffstat (limited to 'gcc/tree-flow-inline.h')
-rw-r--r-- | gcc/tree-flow-inline.h | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/gcc/tree-flow-inline.h b/gcc/tree-flow-inline.h index 722259d..48d8b34 100644 --- a/gcc/tree-flow-inline.h +++ b/gcc/tree-flow-inline.h @@ -541,10 +541,20 @@ may_propagate_copy (tree dest, tree orig) return false; } - return (!SSA_NAME_OCCURS_IN_ABNORMAL_PHI (dest) - && (TREE_CODE (orig) != SSA_NAME - || !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (orig)) - && !DECL_HARD_REGISTER (SSA_NAME_VAR (dest))); + /* If ORIG flows in from an abnormal edge, it cannot be propagated. */ + if (TREE_CODE (orig) == SSA_NAME + && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (orig)) + return false; + + /* If DEST is an SSA_NAME that flows from an abnormal edge or if it + represents a hard register, then it cannot be replaced. */ + if (TREE_CODE (dest) == SSA_NAME + && (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (dest) + || DECL_HARD_REGISTER (SSA_NAME_VAR (dest)))) + return false; + + /* Anything else is OK. */ + return true; } /* Set the default definition for VAR to DEF. */ |