summaryrefslogtreecommitdiff
path: root/gcc/struct-equiv.c
diff options
context:
space:
mode:
authordberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>2007-06-11 18:02:15 +0000
committerdberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>2007-06-11 18:02:15 +0000
commit3072d30e7983a3ca5ad030f1f98a5c39bcc2c07b (patch)
treefdb9e9f8a0700a2713dc690fed1a2cf20dae8392 /gcc/struct-equiv.c
parent8ceb1bfd33bc40bf0cbe1fab8903c2c31efd10ee (diff)
downloadgcc-3072d30e7983a3ca5ad030f1f98a5c39bcc2c07b.tar.gz
Merge dataflow branch into mainline
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@125624 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/struct-equiv.c')
-rw-r--r--gcc/struct-equiv.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/gcc/struct-equiv.c b/gcc/struct-equiv.c
index c37378e457d..3658e87b748 100644
--- a/gcc/struct-equiv.c
+++ b/gcc/struct-equiv.c
@@ -1,6 +1,7 @@
/* Control flow optimization code for GNU compiler.
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
This file is part of GCC.
@@ -88,6 +89,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#include "target.h"
#include "emit-rtl.h"
#include "reload.h"
+#include "df.h"
static void merge_memattrs (rtx, rtx);
static bool set_dest_equiv_p (rtx x, rtx y, struct equiv_info *info);
@@ -983,13 +985,8 @@ insns_match_p (rtx i1, rtx i2, struct equiv_info *info)
bool
struct_equiv_init (int mode, struct equiv_info *info)
{
- if ((info->x_block->flags | info->y_block->flags) & BB_DIRTY)
- update_life_info_in_dirty_blocks (UPDATE_LIFE_GLOBAL_RM_NOTES,
- (PROP_DEATH_NOTES
- | ((mode & CLEANUP_POST_REGSTACK)
- ? PROP_POST_REGSTACK : 0)));
- if (!REG_SET_EQUAL_P (info->x_block->il.rtl->global_live_at_end,
- info->y_block->il.rtl->global_live_at_end))
+ if (!REG_SET_EQUAL_P (DF_LR_OUT (info->x_block),
+ DF_LR_OUT (info->y_block)))
{
#ifdef STACK_REGS
unsigned rn;
@@ -1002,11 +999,11 @@ struct_equiv_init (int mode, struct equiv_info *info)
least makes the regsets comparable. */
for (rn = FIRST_STACK_REG; rn <= LAST_STACK_REG; rn++)
{
- CLEAR_REGNO_REG_SET (info->x_block->il.rtl->global_live_at_end, rn);
- CLEAR_REGNO_REG_SET (info->y_block->il.rtl->global_live_at_end, rn);
+ CLEAR_REGNO_REG_SET (DF_LR_OUT (info->x_block), rn);
+ CLEAR_REGNO_REG_SET (DF_LR_OUT (info->y_block), rn);
}
- if (!REG_SET_EQUAL_P (info->x_block->il.rtl->global_live_at_end,
- info->y_block->il.rtl->global_live_at_end))
+ if (!REG_SET_EQUAL_P (DF_LR_OUT (info->x_block),
+ DF_LR_OUT (info->y_block)))
#endif
return false;
}
@@ -1028,7 +1025,7 @@ struct_equiv_init (int mode, struct equiv_info *info)
info->common_live = ALLOC_REG_SET (&reg_obstack);
info->x_local_live = ALLOC_REG_SET (&reg_obstack);
info->y_local_live = ALLOC_REG_SET (&reg_obstack);
- COPY_REG_SET (info->common_live, info->x_block->il.rtl->global_live_at_end);
+ COPY_REG_SET (info->common_live, DF_LR_OUT (info->x_block));
struct_equiv_make_checkpoint (&info->best_match, info);
return true;
}