Commit 1052bd54 by Zdenek Dvorak Committed by Zdenek Dvorak

df.c (df_bitmaps_free): Only work for bbs for that structures are allocated.

	* df.c (df_bitmaps_free): Only work for bbs for that structures are
	allocated.
	(df_bb_modify): Realloc tables to the new index.
	(df_find_use): New function.
	(df_find_def, df_reg_used): Handle subregs.
	* df.h (df_find_use): Declare.

	* loop-invariant.c: Include hashtab.h.
	(struct invariant): Remove processed field, add eqto and reg fields.
	(struct invariant_expr_entry): New.
	(invariant_for_use, hash_invariant_expr_1, invariant_expr_equal_p,
	hash_invariant_expr, eq_invariant_expr, find_or_insert_inv,
	find_identical_invariants, merge_identical_invariants): New functions.
	(create_new_invariant): Return the new invariant.  Initialize new
	fields.
	(find_invariants): Call merge_identical_invariants.
	(get_inv_cost, best_gain_for_invariant, set_move_mark,
	move_invariant_reg): Handle equivalent invariants.
	* Makefile.in (loop-invariant.o): Add HASHTAB_H dependency.


Co-Authored-By: Steven Bosscher <stevenb@suse.de>

From-SVN: r108949
parent ab84748a
2005-12-22 Zdenek Dvorak <dvorakz@suse.cz>
Steven Bosscher <stevenb@suse.de>
* df.c (df_bitmaps_free): Only work for bbs for that structures are
allocated.
(df_bb_modify): Realloc tables to the new index.
(df_find_use): New function.
(df_find_def, df_reg_used): Handle subregs.
* df.h (df_find_use): Declare.
* loop-invariant.c: Include hashtab.h.
(struct invariant): Remove processed field, add eqto and reg fields.
(struct invariant_expr_entry): New.
(invariant_for_use, hash_invariant_expr_1, invariant_expr_equal_p,
hash_invariant_expr, eq_invariant_expr, find_or_insert_inv,
find_identical_invariants, merge_identical_invariants): New functions.
(create_new_invariant): Return the new invariant. Initialize new
fields.
(find_invariants): Call merge_identical_invariants.
(get_inv_cost, best_gain_for_invariant, set_move_mark,
move_invariant_reg): Handle equivalent invariants.
* Makefile.in (loop-invariant.o): Add HASHTAB_H dependency.
2005-12-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de> 2005-12-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/23333 PR c++/23333
......
...@@ -2372,7 +2372,8 @@ loop-iv.o : loop-iv.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(BASIC_BLOCK_H) \ ...@@ -2372,7 +2372,8 @@ loop-iv.o : loop-iv.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(BASIC_BLOCK_H) \
output.h intl.h output.h intl.h
loop-invariant.o : loop-invariant.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \ loop-invariant.o : loop-invariant.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \
$(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(EXPR_H) coretypes.h \ $(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(EXPR_H) coretypes.h \
$(TM_H) $(TM_P_H) function.h $(FLAGS_H) $(DF_H) $(OBSTACK_H) output.h $(TM_H) $(TM_P_H) function.h $(FLAGS_H) $(DF_H) $(OBSTACK_H) output.h \
$(HASHTAB_H)
cfgloopmanip.o : cfgloopmanip.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \ cfgloopmanip.o : cfgloopmanip.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \
$(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(CFGLAYOUT_H) output.h \ $(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(CFGLAYOUT_H) output.h \
coretypes.h $(TM_H) cfghooks.h $(OBSTACK_H) coretypes.h $(TM_H) cfghooks.h $(OBSTACK_H)
......
...@@ -451,14 +451,11 @@ df_bitmaps_alloc (struct df *df, bitmap blocks, int flags) ...@@ -451,14 +451,11 @@ df_bitmaps_alloc (struct df *df, bitmap blocks, int flags)
static void static void
df_bitmaps_free (struct df *df, int flags) df_bitmaps_free (struct df *df, int flags)
{ {
basic_block bb; unsigned i;
FOR_EACH_BB (bb) for (i = 0; i < df->n_bbs; i++)
{ {
struct bb_info *bb_info = DF_BB_INFO (df, bb); struct bb_info *bb_info = &df->bbs[i];
if (!bb_info)
continue;
if ((flags & DF_RD) && bb_info->rd_in) if ((flags & DF_RD) && bb_info->rd_in)
{ {
...@@ -2636,7 +2633,7 @@ static void ...@@ -2636,7 +2633,7 @@ static void
df_bb_modify (struct df *df, basic_block bb) df_bb_modify (struct df *df, basic_block bb)
{ {
if ((unsigned) bb->index >= df->n_bbs) if ((unsigned) bb->index >= df->n_bbs)
df_bb_table_realloc (df, df->n_bbs); df_bb_table_realloc (df, bb->index);
bitmap_set_bit (df->bbs_modified, bb->index); bitmap_set_bit (df->bbs_modified, bb->index);
} }
...@@ -3032,25 +3029,42 @@ df_find_def (struct df *df, rtx insn, rtx reg) ...@@ -3032,25 +3029,42 @@ df_find_def (struct df *df, rtx insn, rtx reg)
{ {
struct df_link *defs; struct df_link *defs;
if (GET_CODE (reg) == SUBREG)
reg = SUBREG_REG (reg);
gcc_assert (REG_P (reg));
for (defs = DF_INSN_DEFS (df, insn); defs; defs = defs->next) for (defs = DF_INSN_DEFS (df, insn); defs; defs = defs->next)
if (rtx_equal_p (DF_REF_REG (defs->ref), reg)) if (rtx_equal_p (DF_REF_REAL_REG (defs->ref), reg))
return defs->ref; return defs->ref;
return NULL; return NULL;
} }
/* Return 1 if REG is referenced in INSN, zero otherwise. */ /* Finds the reference corresponding to the use of REG in INSN.
DF is the dataflow object. */
int struct ref *
df_reg_used (struct df *df, rtx insn, rtx reg) df_find_use (struct df *df, rtx insn, rtx reg)
{ {
struct df_link *uses; struct df_link *uses;
if (GET_CODE (reg) == SUBREG)
reg = SUBREG_REG (reg);
gcc_assert (REG_P (reg));
for (uses = DF_INSN_USES (df, insn); uses; uses = uses->next) for (uses = DF_INSN_USES (df, insn); uses; uses = uses->next)
if (rtx_equal_p (DF_REF_REG (uses->ref), reg)) if (rtx_equal_p (DF_REF_REAL_REG (uses->ref), reg))
return 1; return uses->ref;
return 0; return NULL;
}
/* Return 1 if REG is referenced in INSN, zero otherwise. */
int
df_reg_used (struct df *df, rtx insn, rtx reg)
{
return df_find_use (df, insn, reg) != NULL;
} }
static int static int
......
...@@ -290,6 +290,8 @@ extern struct ref *df_bb_regno_last_def_find (struct df *, basic_block, unsigned ...@@ -290,6 +290,8 @@ extern struct ref *df_bb_regno_last_def_find (struct df *, basic_block, unsigned
extern struct ref *df_find_def (struct df *, rtx, rtx); extern struct ref *df_find_def (struct df *, rtx, rtx);
extern struct ref *df_find_use (struct df *, rtx, rtx);
extern int df_reg_used (struct df *, rtx, rtx); extern int df_reg_used (struct df *, rtx, rtx);
/* Functions for debugging from GDB. */ /* Functions for debugging from GDB. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment