df.c (df_ref_create, [...]): Kill BB argument.

* df.c (df_ref_create, df_ref_record_1, df_ref_record): Kill BB argument.
	* df.h (struct ref): Kill B.
	(DF_REF_BB, DF_REF_BBNO): Use BLOCK_FOR_INSN.

	* basic-block.h (PROP_EQUAL_NOTES): New flag.
	* flow.c (propagate_one_insn): Use it.
	(mark_used_regs): Handle NIL.

From-SVN: r49220
This commit is contained in:
Jan Hubicka 2002-01-25 20:46:43 +01:00 committed by Jan Hubicka
parent 3d8dd3c051
commit 5a133afd40
5 changed files with 32 additions and 19 deletions

View File

@ -1,3 +1,13 @@
Fri Jan 25 20:43:56 CET 2002 Jan Hubicka <jh@suse.cz>
* df.c (df_ref_create, df_ref_record_1, df_ref_record): Kill BB argument.
* df.h (struct ref): Kill B.
(DF_REF_BB, DF_REF_BBNO): Use BLOCK_FOR_INSN.
* basic-block.h (PROP_EQUAL_NOTES): New flag.
* flow.c (propagate_one_insn): Use it.
(mark_used_regs): Handle NIL.
2001-01-25 Geoffrey Keating <geoffk@redhat.com>
* config/stormy16/stormy16.md (tablejump_pcrel): Use a MEM

View File

@ -560,6 +560,7 @@ enum update_life_extent
#define PROP_ALLOW_CFG_CHANGES 32 /* Allow the CFG to be changed
by dead code removal. */
#define PROP_AUTOINC 64 /* Create autoinc mem references. */
#define PROP_EQUAL_NOTES 128 /* Take into account REG_EQUAL notes. */
#define PROP_FINAL 127 /* All of the above. */
#define CLEANUP_EXPENSIVE 1 /* Do relativly expensive optimizations

View File

@ -226,13 +226,13 @@ static void df_refs_unlink PARAMS ((struct df *, bitmap));
#endif
static struct ref *df_ref_create PARAMS((struct df *,
rtx, rtx *, basic_block, rtx,
rtx, rtx *, rtx,
enum df_ref_type, enum df_ref_flags));
static void df_ref_record_1 PARAMS((struct df *, rtx, rtx *,
basic_block, rtx, enum df_ref_type,
rtx, enum df_ref_type,
enum df_ref_flags));
static void df_ref_record PARAMS((struct df *, rtx, rtx *,
basic_block bb, rtx, enum df_ref_type,
rtx, enum df_ref_type,
enum df_ref_flags));
static void df_def_record_1 PARAMS((struct df *, rtx, basic_block, rtx));
static void df_defs_record PARAMS((struct df *, rtx, basic_block, rtx));
@ -794,11 +794,10 @@ df_use_unlink (df, use)
/* Create a new ref of type DF_REF_TYPE for register REG at address
LOC within INSN of BB. */
static struct ref *
df_ref_create (df, reg, loc, bb, insn, ref_type, ref_flags)
df_ref_create (df, reg, loc, insn, ref_type, ref_flags)
struct df *df;
rtx reg;
rtx *loc;
basic_block bb;
rtx insn;
enum df_ref_type ref_type;
enum df_ref_flags ref_flags;
@ -810,7 +809,6 @@ df_ref_create (df, reg, loc, bb, insn, ref_type, ref_flags)
sizeof (*this_ref));
DF_REF_REG (this_ref) = reg;
DF_REF_LOC (this_ref) = loc;
DF_REF_BB (this_ref) = bb;
DF_REF_INSN (this_ref) = insn;
DF_REF_CHAIN (this_ref) = 0;
DF_REF_TYPE (this_ref) = ref_type;
@ -848,27 +846,25 @@ df_ref_create (df, reg, loc, bb, insn, ref_type, ref_flags)
/* Create a new reference of type DF_REF_TYPE for a single register REG,
used inside the LOC rtx of INSN. */
static void
df_ref_record_1 (df, reg, loc, bb, insn, ref_type, ref_flags)
df_ref_record_1 (df, reg, loc, insn, ref_type, ref_flags)
struct df *df;
rtx reg;
rtx *loc;
basic_block bb;
rtx insn;
enum df_ref_type ref_type;
enum df_ref_flags ref_flags;
{
df_ref_create (df, reg, loc, bb, insn, ref_type, ref_flags);
df_ref_create (df, reg, loc, insn, ref_type, ref_flags);
}
/* Create new references of type DF_REF_TYPE for each part of register REG
at address LOC within INSN of BB. */
static void
df_ref_record (df, reg, loc, bb, insn, ref_type, ref_flags)
df_ref_record (df, reg, loc, insn, ref_type, ref_flags)
struct df *df;
rtx reg;
rtx *loc;
basic_block bb;
rtx insn;
enum df_ref_type ref_type;
enum df_ref_flags ref_flags;
@ -910,11 +906,11 @@ df_ref_record (df, reg, loc, bb, insn, ref_type, ref_flags)
for (i = regno; i < endregno; i++)
df_ref_record_1 (df, gen_rtx_REG (reg_raw_mode[i], i),
loc, bb, insn, ref_type, ref_flags);
loc, insn, ref_type, ref_flags);
}
else
{
df_ref_record_1 (df, reg, loc, bb, insn, ref_type, ref_flags);
df_ref_record_1 (df, reg, loc, insn, ref_type, ref_flags);
}
}
@ -978,7 +974,7 @@ df_def_record_1 (df, x, bb, insn)
if (GET_CODE (dst) == REG
|| (GET_CODE (dst) == SUBREG && GET_CODE (SUBREG_REG (dst)) == REG))
df_ref_record (df, dst, loc, bb, insn, DF_REF_REG_DEF, flags);
df_ref_record (df, dst, loc, insn, DF_REF_REG_DEF, flags);
}
@ -1070,7 +1066,7 @@ df_uses_record (df, loc, ref_type, bb, insn, flags)
case REG:
/* See a register (or subreg) other than being set. */
df_ref_record (df, x, loc, bb, insn, ref_type, flags);
df_ref_record (df, x, loc, insn, ref_type, flags);
return;
case SET:
@ -1161,7 +1157,7 @@ df_uses_record (df, loc, ref_type, bb, insn, flags)
case PRE_MODIFY:
case POST_MODIFY:
/* Catch the def of the register being modified. */
df_ref_record (df, XEXP (x, 0), &XEXP (x, 0), bb, insn, DF_REF_REG_DEF, DF_REF_READ_WRITE);
df_ref_record (df, XEXP (x, 0), &XEXP (x, 0), insn, DF_REF_REG_DEF, DF_REF_READ_WRITE);
/* ... Fall through to handle uses ... */

View File

@ -57,7 +57,6 @@ enum df_ref_flags
struct ref
{
rtx reg; /* The register referenced. */
basic_block bb; /* BB containing ref. */
rtx insn; /* Insn containing ref. */
rtx *loc; /* Loc is the location of the reg. */
struct df_link *chain; /* Head of def-use or use-def chain. */
@ -175,8 +174,8 @@ struct df_map
#define DF_REF_REG(REF) ((REF)->reg)
#define DF_REF_LOC(REF) ((REF)->loc)
#endif
#define DF_REF_BB(REF) ((REF)->bb)
#define DF_REF_BBNO(REF) ((REF)->bb->index)
#define DF_REF_BB(REF) (BLOCK_FOR_INSN ((REF)->insn))
#define DF_REF_BBNO(REF) (BLOCK_FOR_INSN ((REF)->insn)->index)
#define DF_REF_INSN(REF) ((REF)->insn)
#define DF_REF_INSN_UID(REF) (INSN_UID ((REF)->insn))
#define DF_REF_TYPE(REF) ((REF)->type)

View File

@ -1633,6 +1633,7 @@ propagate_one_insn (pbi, insn)
;
else
{
rtx note;
/* Any regs live at the time of a call instruction must not go
in a register clobbered by calls. Find all regs now live and
record this for them. */
@ -1688,6 +1689,10 @@ propagate_one_insn (pbi, insn)
/* Record uses. */
if (! insn_is_dead)
mark_used_regs (pbi, PATTERN (insn), NULL_RTX, insn);
if ((flags & PROP_EQUAL_NOTES)
&& ((note = find_reg_note (insn, REG_EQUAL, NULL_RTX))
|| (note = find_reg_note (insn, REG_EQUIV, NULL_RTX))))
mark_used_regs (pbi, XEXP (note, 0), NULL_RTX, insn);
/* Sometimes we may have inserted something before INSN (such as a move)
when we make an auto-inc. So ensure we will scan those insns. */
@ -3616,6 +3621,8 @@ mark_used_regs (pbi, x, cond, insn)
int flags = pbi->flags;
retry:
if (!x)
return;
code = GET_CODE (x);
switch (code)
{