diff options
author | Richard Sandiford <richard@codesourcery.com> | 2007-08-02 10:25:24 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2007-08-02 10:25:24 +0000 |
commit | 5eb2a9f2cf0c9e6a78647f1e8f9baa0fb71858b9 (patch) | |
tree | 05f51c09c852995eee508fef5bd9b68fa5eb609c /gcc/emit-rtl.c | |
parent | a15da80d336a43788411f1da71059303d77f9a6d (diff) | |
download | gcc-5eb2a9f2cf0c9e6a78647f1e8f9baa0fb71858b9.zip gcc-5eb2a9f2cf0c9e6a78647f1e8f9baa0fb71858b9.tar.gz gcc-5eb2a9f2cf0c9e6a78647f1e8f9baa0fb71858b9.tar.bz2 |
emit-rtl.c (reset_used_decls): Rename to...
gcc/
* emit-rtl.c (reset_used_decls): Rename to...
(set_used_decls): ...this. Set the used flag rather than clearing it.
(unshare_all_rtl_again): Update accordingly. Set flags on argument
DECL_RTLs rather than resetting them.
From-SVN: r127153
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r-- | gcc/emit-rtl.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 3c6bf72..020847a 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -167,7 +167,7 @@ static GTY ((if_marked ("ggc_marked_p"), param_is (struct rtx_def))) static rtx make_call_insn_raw (rtx); static rtx change_address_1 (rtx, enum machine_mode, rtx, int); -static void reset_used_decls (tree); +static void set_used_decls (tree); static void mark_label_nuses (rtx); static hashval_t const_int_htab_hash (const void *); static int const_int_htab_eq (const void *, const void *); @@ -2160,11 +2160,11 @@ unshare_all_rtl_again (rtx insn) } /* Make sure that virtual stack slots are not shared. */ - reset_used_decls (DECL_INITIAL (cfun->decl)); + set_used_decls (DECL_INITIAL (cfun->decl)); /* Make sure that virtual parameters are not shared. */ for (decl = DECL_ARGUMENTS (cfun->decl); decl; decl = TREE_CHAIN (decl)) - reset_used_flags (DECL_RTL (decl)); + set_used_flags (DECL_RTL (decl)); reset_used_flags (stack_slot_list); @@ -2353,20 +2353,28 @@ unshare_all_rtl_in_chain (rtx insn) } /* Go through all virtual stack slots of a function and mark them as - not shared. */ + shared. We never replace the DECL_RTLs themselves with a copy, + but expressions mentioned into a DECL_RTL cannot be shared with + expressions in the instruction stream. + + Note that reload may convert pseudo registers into memories in-place. + Pseudo registers are always shared, but MEMs never are. Thus if we + reset the used flags on MEMs in the instruction stream, we must set + them again on MEMs that appear in DECL_RTLs. */ + static void -reset_used_decls (tree blk) +set_used_decls (tree blk) { tree t; /* Mark decls. */ for (t = BLOCK_VARS (blk); t; t = TREE_CHAIN (t)) if (DECL_RTL_SET_P (t)) - reset_used_flags (DECL_RTL (t)); + set_used_flags (DECL_RTL (t)); /* Now process sub-blocks. */ for (t = BLOCK_SUBBLOCKS (blk); t; t = TREE_CHAIN (t)) - reset_used_decls (t); + set_used_decls (t); } /* Mark ORIG as in use, and return a copy of it if it was already in use. |