diff options
author | Jeff Law <law@redhat.com> | 2004-09-21 22:07:23 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2004-09-21 22:07:23 -0600 |
commit | 195da47bbbf6402e3147dc1e6be6cacde140f7f3 (patch) | |
tree | ba1ee7d893d35a339821c16a830d1a3c262c07e7 /gcc/tree-ssa-ccp.c | |
parent | 0a4f0294304e28e3a5012ac4e1eaf966314de0c2 (diff) | |
download | gcc-195da47bbbf6402e3147dc1e6be6cacde140f7f3.zip gcc-195da47bbbf6402e3147dc1e6be6cacde140f7f3.tar.gz gcc-195da47bbbf6402e3147dc1e6be6cacde140f7f3.tar.bz2 |
tree-ssa-ccp.c (get_default_value): If we have a constant value recorded for an SSA_NAME...
* tree-ssa-ccp.c (get_default_value): If we have a constant
value recorded for an SSA_NAME, then use that constant as
the initial lattice value.
(substitute_and_fold): Transfer equivalences discovered into
SSA_NAME_EQUIV.
* tree.h (SSA_NAME_EQUIV): Add comments.
(SET_SSA_NAME_EQUIV): Similarly.
From-SVN: r87844
Diffstat (limited to 'gcc/tree-ssa-ccp.c')
-rw-r--r-- | gcc/tree-ssa-ccp.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index 81ce673..5fe1e1d 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -135,7 +135,14 @@ get_default_value (tree var) val.lattice_val = UNDEFINED; val.const_val = NULL_TREE; - if (TREE_CODE (sym) == PARM_DECL || TREE_THIS_VOLATILE (sym)) + if (TREE_CODE (var) == SSA_NAME + && SSA_NAME_EQUIV (var) + && is_gimple_min_invariant (SSA_NAME_EQUIV (var))) + { + val.lattice_val = CONSTANT; + val.const_val = SSA_NAME_EQUIV (var); + } + else if (TREE_CODE (sym) == PARM_DECL || TREE_THIS_VOLATILE (sym)) { /* Function arguments and volatile variables are considered VARYING. */ val.lattice_val = VARYING; @@ -512,6 +519,7 @@ static void substitute_and_fold (void) { basic_block bb; + unsigned int i; if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file, @@ -586,6 +594,25 @@ substitute_and_fold (void) } } } + + /* And transfer what we learned from VALUE_VECTOR into the + SSA_NAMEs themselves. This probably isn't terribly important + since we probably constant propagated the values to their + use sites above. */ + for (i = 0; i < num_ssa_names; i++) + { + tree name = ssa_name (i); + value *value; + + if (!name) + continue; + + value = get_value (name); + if (value->lattice_val == CONSTANT + && is_gimple_reg (name) + && is_gimple_min_invariant (value->const_val)) + SET_SSA_NAME_EQUIV (name, value->const_val) + } } |