aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>2005-02-02 08:59:59 -0700
committerJeff Law <law@gcc.gnu.org>2005-02-02 08:59:59 -0700
commited425871ecc4001d5dedfaa0442404d5ea07390f (patch)
tree06e818758d3379c45b2cd03953cef79b657b5515 /gcc
parentd02d7104e17045297a6f8a5a0fdae67ad8c34510 (diff)
downloadgcc-ed425871ecc4001d5dedfaa0442404d5ea07390f.zip
gcc-ed425871ecc4001d5dedfaa0442404d5ea07390f.tar.gz
gcc-ed425871ecc4001d5dedfaa0442404d5ea07390f.tar.bz2
gcse.c (struct reg_set): Store the block index where the register was set rather than the setting insn.
* gcse.c (struct reg_set): Store the block index where the register was set rather than the setting insn. (record_one_set, compute_transp): Corresponding changes. (pre_insert_copy_insn): Do not call replace_one_set. (replace_one_set): Remove. From-SVN: r94591
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/gcse.c30
2 files changed, 13 insertions, 25 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 28f4351..d109626 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2005-02-02 Jeff Law <law@redhat.com>
+
+ * gcse.c (struct reg_set): Store the block index where the register
+ was set rather than the setting insn.
+ (record_one_set, compute_transp): Corresponding changes.
+ (pre_insert_copy_insn): Do not call replace_one_set.
+ (replace_one_set): Remove.
+
2005-02-02 Joseph S. Myers <joseph@codesourcery.com>
PR other/15514
diff --git a/gcc/gcse.c b/gcc/gcse.c
index 118959b..5535aa1 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -436,8 +436,8 @@ typedef struct reg_set
{
/* The next setting of this register. */
struct reg_set *next;
- /* The insn where it was set. */
- rtx insn;
+ /* The index of the block where it was set. */
+ int bb_index;
} reg_set;
static reg_set **reg_set_table;
@@ -535,7 +535,6 @@ static void free_gcse_mem (void);
static void alloc_reg_set_mem (int);
static void free_reg_set_mem (void);
static void record_one_set (int, rtx);
-static void replace_one_set (int, rtx, rtx);
static void record_set_info (rtx, rtx, void *);
static void compute_sets (rtx);
static void hash_scan_insn (rtx, struct hash_table *, int);
@@ -1104,24 +1103,6 @@ free_reg_set_mem (void)
obstack_free (&reg_set_obstack, NULL);
}
-/* An OLD_INSN that used to set REGNO was replaced by NEW_INSN.
- Update the corresponding `reg_set_table' entry accordingly.
- We assume that NEW_INSN is not already recorded in reg_set_table[regno]. */
-
-static void
-replace_one_set (int regno, rtx old_insn, rtx new_insn)
-{
- struct reg_set *reg_info;
- if (regno >= reg_set_table_size)
- return;
- for (reg_info = reg_set_table[regno]; reg_info; reg_info = reg_info->next)
- if (reg_info->insn == old_insn)
- {
- reg_info->insn = new_insn;
- break;
- }
-}
-
/* Record REGNO in the reg_set table. */
static void
@@ -1144,7 +1125,7 @@ record_one_set (int regno, rtx insn)
new_reg_info = obstack_alloc (&reg_set_obstack, sizeof (struct reg_set));
bytes_used += sizeof (struct reg_set);
- new_reg_info->insn = insn;
+ new_reg_info->bb_index = BLOCK_NUM (insn);
new_reg_info->next = reg_set_table[regno];
reg_set_table[regno] = new_reg_info;
}
@@ -2468,7 +2449,7 @@ compute_transp (rtx x, int indx, sbitmap *bmap, int set_p)
else
{
for (r = reg_set_table[REGNO (x)]; r != NULL; r = r->next)
- SET_BIT (bmap[BLOCK_NUM (r->insn)], indx);
+ SET_BIT (bmap[r->bb_index], indx);
}
}
else
@@ -2482,7 +2463,7 @@ compute_transp (rtx x, int indx, sbitmap *bmap, int set_p)
else
{
for (r = reg_set_table[REGNO (x)]; r != NULL; r = r->next)
- RESET_BIT (bmap[BLOCK_NUM (r->insn)], indx);
+ RESET_BIT (bmap[r->bb_index], indx);
}
}
@@ -4260,7 +4241,6 @@ pre_insert_copy_insn (struct expr *expr, rtx insn)
new_insn = emit_insn_after (new_insn, insn);
/* Keep register set table up to date. */
- replace_one_set (REGNO (old_reg), insn, new_insn);
record_one_set (regno, insn);
}
else