aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2008-11-25 21:25:52 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2008-11-25 21:25:52 +0000
commit32fc3abf0ed64ed30346eac9ba6e28f8fe9df11f (patch)
tree14ac1d001513028b4ffa9611446c7444e350c7ed
parent15c58b190c94455c0ea869366c6d0c1175d0381b (diff)
downloadgcc-32fc3abf0ed64ed30346eac9ba6e28f8fe9df11f.zip
gcc-32fc3abf0ed64ed30346eac9ba6e28f8fe9df11f.tar.gz
gcc-32fc3abf0ed64ed30346eac9ba6e28f8fe9df11f.tar.bz2
regrename.c (merge_overlapping_regs): Add registers artificially defined at the top of the basic block to the set of...
* regrename.c (merge_overlapping_regs): Add registers artificially defined at the top of the basic block to the set of live ones just before the first insn. From-SVN: r142203
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/regrename.c7
2 files changed, 13 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bf00b68..19295b1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2008-11-25 Eric Botcazou <ebotcazou@adacore.com>
+
+ * regrename.c (merge_overlapping_regs): Add registers artificially
+ defined at the top of the basic block to the set of live ones just
+ before the first insn.
+
2008-11-25 H.J. Lu <hongjiu.lu@intel.com>
Joey Ye <joey.ye@intel.com>
diff --git a/gcc/regrename.c b/gcc/regrename.c
index b01c2e6..83fd605 100644
--- a/gcc/regrename.c
+++ b/gcc/regrename.c
@@ -137,8 +137,15 @@ merge_overlapping_regs (basic_block b, HARD_REG_SET *pset,
struct du_chain *t = chain;
rtx insn;
HARD_REG_SET live;
+ df_ref *def_rec;
REG_SET_TO_HARD_REG_SET (live, df_get_live_in (b));
+ for (def_rec = df_get_artificial_defs (b->index); *def_rec; def_rec++)
+ {
+ df_ref def = *def_rec;
+ if (DF_REF_FLAGS (def) & DF_REF_AT_TOP)
+ SET_HARD_REG_BIT (live, DF_REF_REGNO (def));
+ }
insn = BB_HEAD (b);
while (t)
{