df.h (FOR_EACH_INSN_INFO_MW): New macro.
gcc/ * df.h (FOR_EACH_INSN_INFO_MW): New macro. * df-problems.c (df_note_bb_compute): Use it. * regstat.c (regstat_bb_compute_ri): Likewise. From-SVN: r211680
This commit is contained in:
parent
292321a5cd
commit
fc8e9f583c
|
@ -1,3 +1,9 @@
|
|||
2014-06-15 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* df.h (FOR_EACH_INSN_INFO_MW): New macro.
|
||||
* df-problems.c (df_note_bb_compute): Use it.
|
||||
* regstat.c (regstat_bb_compute_ri): Likewise.
|
||||
|
||||
2014-06-15 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* df.h (FOR_EACH_ARTIFICIAL_USE, FOR_EACH_ARTIFICIAL_DEF): New macros.
|
||||
|
|
|
@ -3114,7 +3114,7 @@ df_note_bb_compute (unsigned int bb_index,
|
|||
FOR_BB_INSNS_REVERSE (bb, insn)
|
||||
{
|
||||
df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
|
||||
struct df_mw_hardreg **mws_rec;
|
||||
df_mw_hardreg *mw;
|
||||
int debug_insn;
|
||||
|
||||
if (!INSN_P (insn))
|
||||
|
@ -3137,17 +3137,11 @@ df_note_bb_compute (unsigned int bb_index,
|
|||
|
||||
/* We only care about real sets for calls. Clobbers cannot
|
||||
be depended on to really die. */
|
||||
mws_rec = DF_INSN_INFO_MWS (insn_info);
|
||||
while (*mws_rec)
|
||||
{
|
||||
struct df_mw_hardreg *mws = *mws_rec;
|
||||
if ((DF_MWS_REG_DEF_P (mws))
|
||||
&& !df_ignore_stack_reg (mws->start_regno))
|
||||
df_set_unused_notes_for_mw (insn,
|
||||
mws, live, do_not_gen,
|
||||
FOR_EACH_INSN_INFO_MW (mw, insn_info)
|
||||
if ((DF_MWS_REG_DEF_P (mw))
|
||||
&& !df_ignore_stack_reg (mw->start_regno))
|
||||
df_set_unused_notes_for_mw (insn, mw, live, do_not_gen,
|
||||
artificial_uses, &debug);
|
||||
mws_rec++;
|
||||
}
|
||||
|
||||
/* All of the defs except the return value are some sort of
|
||||
clobber. This code is for the return. */
|
||||
|
@ -3168,16 +3162,10 @@ df_note_bb_compute (unsigned int bb_index,
|
|||
else
|
||||
{
|
||||
/* Regular insn. */
|
||||
mws_rec = DF_INSN_INFO_MWS (insn_info);
|
||||
while (*mws_rec)
|
||||
{
|
||||
struct df_mw_hardreg *mws = *mws_rec;
|
||||
if (DF_MWS_REG_DEF_P (mws))
|
||||
df_set_unused_notes_for_mw (insn,
|
||||
mws, live, do_not_gen,
|
||||
artificial_uses, &debug);
|
||||
mws_rec++;
|
||||
}
|
||||
FOR_EACH_INSN_INFO_MW (mw, insn_info)
|
||||
if (DF_MWS_REG_DEF_P (mw))
|
||||
df_set_unused_notes_for_mw (insn, mw, live, do_not_gen,
|
||||
artificial_uses, &debug);
|
||||
|
||||
FOR_EACH_INSN_INFO_DEF (def, insn_info)
|
||||
{
|
||||
|
@ -3194,25 +3182,19 @@ df_note_bb_compute (unsigned int bb_index,
|
|||
}
|
||||
|
||||
/* Process the uses. */
|
||||
mws_rec = DF_INSN_INFO_MWS (insn_info);
|
||||
while (*mws_rec)
|
||||
{
|
||||
struct df_mw_hardreg *mws = *mws_rec;
|
||||
if (DF_MWS_REG_USE_P (mws)
|
||||
&& !df_ignore_stack_reg (mws->start_regno))
|
||||
{
|
||||
bool really_add_notes = debug_insn != 0;
|
||||
FOR_EACH_INSN_INFO_MW (mw, insn_info)
|
||||
if (DF_MWS_REG_USE_P (mw)
|
||||
&& !df_ignore_stack_reg (mw->start_regno))
|
||||
{
|
||||
bool really_add_notes = debug_insn != 0;
|
||||
|
||||
df_set_dead_notes_for_mw (insn,
|
||||
mws, live, do_not_gen,
|
||||
artificial_uses,
|
||||
&really_add_notes);
|
||||
df_set_dead_notes_for_mw (insn, mw, live, do_not_gen,
|
||||
artificial_uses,
|
||||
&really_add_notes);
|
||||
|
||||
if (really_add_notes)
|
||||
debug_insn = -1;
|
||||
}
|
||||
mws_rec++;
|
||||
}
|
||||
if (really_add_notes)
|
||||
debug_insn = -1;
|
||||
}
|
||||
|
||||
FOR_EACH_INSN_INFO_USE (use, insn_info)
|
||||
{
|
||||
|
|
4
gcc/df.h
4
gcc/df.h
|
@ -766,6 +766,10 @@ struct df_d
|
|||
for (df_ref *ITER##_ = DF_INSN_INFO_EQ_USES (INSN); (ITER = *ITER##_); \
|
||||
++ITER##_)
|
||||
|
||||
#define FOR_EACH_INSN_INFO_MW(ITER, INSN) \
|
||||
for (df_mw_hardreg **ITER##_ = DF_INSN_INFO_MWS (INSN); (ITER = *ITER##_); \
|
||||
++ITER##_)
|
||||
|
||||
#define FOR_EACH_INSN_DEF(ITER, INSN) \
|
||||
FOR_EACH_INSN_INFO_DEF(ITER, DF_INSN_INFO_GET (INSN))
|
||||
|
||||
|
|
|
@ -153,7 +153,7 @@ regstat_bb_compute_ri (unsigned int bb_index,
|
|||
{
|
||||
struct df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
|
||||
bitmap_iterator bi;
|
||||
struct df_mw_hardreg **mws_rec;
|
||||
df_mw_hardreg *mw;
|
||||
rtx link;
|
||||
|
||||
if (!NONDEBUG_INSN_P (insn))
|
||||
|
@ -202,29 +202,26 @@ regstat_bb_compute_ri (unsigned int bb_index,
|
|||
/* We only care about real sets for calls. Clobbers cannot
|
||||
be depended on.
|
||||
Only do this if the value is totally dead. */
|
||||
for (mws_rec = DF_INSN_INFO_MWS (insn_info); *mws_rec; mws_rec++)
|
||||
{
|
||||
struct df_mw_hardreg *mws = *mws_rec;
|
||||
if (DF_MWS_REG_DEF_P (mws))
|
||||
{
|
||||
bool all_dead = true;
|
||||
unsigned int r;
|
||||
FOR_EACH_INSN_INFO_MW (mw, insn_info)
|
||||
if (DF_MWS_REG_DEF_P (mw))
|
||||
{
|
||||
bool all_dead = true;
|
||||
unsigned int r;
|
||||
|
||||
for (r = mws->start_regno; r <= mws->end_regno; r++)
|
||||
if (bitmap_bit_p (artificial_uses, r)
|
||||
|| bitmap_bit_p (live, r))
|
||||
{
|
||||
all_dead = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (all_dead)
|
||||
for (r = mw->start_regno; r <= mw->end_regno; r++)
|
||||
if (bitmap_bit_p (artificial_uses, r)
|
||||
|| bitmap_bit_p (live, r))
|
||||
{
|
||||
regno = mws->start_regno;
|
||||
REG_LIVE_LENGTH (regno)++;
|
||||
all_dead = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (all_dead)
|
||||
{
|
||||
regno = mw->start_regno;
|
||||
REG_LIVE_LENGTH (regno)++;
|
||||
}
|
||||
}
|
||||
|
||||
/* All of the defs except the return value are some sort of
|
||||
clobber. This code is for the return. */
|
||||
|
|
Loading…
Reference in New Issue