aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <richard@codesourcery.com>2007-08-02 10:25:24 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2007-08-02 10:25:24 +0000
commit5eb2a9f2cf0c9e6a78647f1e8f9baa0fb71858b9 (patch)
tree05f51c09c852995eee508fef5bd9b68fa5eb609c /gcc
parenta15da80d336a43788411f1da71059303d77f9a6d (diff)
downloadgcc-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')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/emit-rtl.c22
2 files changed, 22 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 93129e6..3f67eb9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2007-08-02 Richard Sandiford <richard@codesourcery.com>
+
+ * 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.
+
2007-08-02 Andreas Krebbel <krebbel1@de.ibm.com>
* config/s390/s390.md ("*xordi3_cconly"): Change xr to xg.
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.