diff options
author | Steven Bosscher <steven@gcc.gnu.org> | 2008-06-18 05:42:23 +0000 |
---|---|---|
committer | Steven Bosscher <steven@gcc.gnu.org> | 2008-06-18 05:42:23 +0000 |
commit | 50e94c7e583d2be25b1f940923fa01203aac65c3 (patch) | |
tree | 0c8c1622859a712e7e554f00afbc548652bc9317 /gcc/fwprop.c | |
parent | 00bb81c15b2976156db1be68faee7071e9efdf8b (diff) | |
download | gcc-50e94c7e583d2be25b1f940923fa01203aac65c3.zip gcc-50e94c7e583d2be25b1f940923fa01203aac65c3.tar.gz gcc-50e94c7e583d2be25b1f940923fa01203aac65c3.tar.bz2 |
df.h (struct df_ref): Replace 'insn' field with 'insn_info' field.
* df.h (struct df_ref): Replace 'insn' field with 'insn_info' field.
(DF_REF_INSN_INFO): New.
(DF_REF_INSN, DF_REF_INSN_UID): Rewrite macros using DF_REF_INSN_INFO.
(DF_REF_IS_ARTIFICIAL): Artificial refs are now identified as refs
with a NULL DF_REF_INSN_INFO.
(DF_INSN_INFO_GET, DF_INSN_INFO_SET): Renamed from DF_INSN_GET and
DF_INSN_SET.
(DF_INSN_INFO_LUID, DF_INSN_INFO_DEFS, DF_INSN_INFO_USES,
DF_INSN_INFO_EQ_USES): New.
(DF_INSN_LUID, DF_INSN_DEFS, DF_INSN_USES, DF_INSN_EQ_USES,
DF_INSN_UID_LUID, DF_INSN_UID_DEFS, DF_INSN_UID_USES,
DF_INSN_UID_EQ_USES): Rewrite using DF_INSN_INFO_* macros.
* df-core.c: Update comment for above changes.
(df_insn_debug_regno): Use DF_INSN_INFO_GET instead of INSN_UID and
DF_INSN_UID_* macros.
(df_ref_debug): Check for NULL DF_REF_INSN_INFO.
* df-scan.c (df_ref_record): Take a df_insn_info instead of an
insn rtx. Update all callers.
(df_def_record_1, df_defs_record, df_uses_record, df_get_call_refs,
df_ref_create_structure, df_insn_refs_collect): Likewise.
(df_ref_equal_p): Compare DF_REF_INSN_INFO pointers for the refs.
* df-problems.c (df_chain_dump): Test for non-NULL DF_REF_INSN_INFO.
(df_live_bb_local_compute): Retrieve DF_INSN_INFO, use DF_INSN_INFO_*
macros to access the insn refs.
(df_chain_top_dump, df_chain_bottom_dump, df_byte_lr_alloc): Likewise.
* fwprop.c (use_killed_between): Use DF_REF_INSN accessor macro.
(all_uses_available): Retrieve DF_INSN_INFO for def_insn, and use it
for accessing the refs.
(try_fwprop_subst): Likewise.
* ddg.c (add_cross_iteration_register_deps): Use DF_REF_INSN macro.
* web.c (union_defs): Retrieve DF_INSN_INFO for def_insn, and use it
for accessing the refs.
* loop-invariant.c (invariant_for_use): Use DF_REF_BB macro.
(check_dependencies): Use DF_INSN_INFO_GET, use DF_INSN_INFO_* macros
to look at the insn refs.
(record_uses): Likewise.
* dce.c (deletable_insn_p): Don't tolerate artificial DEFs in this
function anymore.
(mark_artificial_uses): Don't mark_insn for artificial refs.
(mark_reg_rependencies): Likewise.
* doc/rtl.texi: Remove documentation of ADDRESSOF.
From-SVN: r136885
Diffstat (limited to 'gcc/fwprop.c')
-rw-r--r-- | gcc/fwprop.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/gcc/fwprop.c b/gcc/fwprop.c index 35bc230..6456b0e 100644 --- a/gcc/fwprop.c +++ b/gcc/fwprop.c @@ -546,13 +546,13 @@ use_killed_between (struct df_ref *use, rtx def_insn, rtx target_insn) /* See if USE is killed between DEF_INSN and the last insn in the basic block containing DEF_INSN. */ x = df_bb_regno_last_def_find (def_bb, regno); - if (x && DF_INSN_LUID (x->insn) >= DF_INSN_LUID (def_insn)) + if (x && DF_INSN_LUID (DF_REF_INSN (x)) >= DF_INSN_LUID (def_insn)) return true; /* See if USE is killed between TARGET_INSN and the first insn in the basic block containing TARGET_INSN. */ x = df_bb_regno_first_def_find (target_bb, regno); - if (x && DF_INSN_LUID (x->insn) < DF_INSN_LUID (target_insn)) + if (x && DF_INSN_LUID (DF_REF_INSN (x)) < DF_INSN_LUID (target_insn)) return true; return false; @@ -570,6 +570,7 @@ static bool all_uses_available_at (rtx def_insn, rtx target_insn) { struct df_ref **use_rec; + struct df_insn_info *insn_info = DF_INSN_INFO_GET (def_insn); rtx def_set = single_set (def_insn); gcc_assert (def_set); @@ -583,13 +584,13 @@ all_uses_available_at (rtx def_insn, rtx target_insn) /* If the insn uses the reg that it defines, the substitution is invalid. */ - for (use_rec = DF_INSN_USES (def_insn); *use_rec; use_rec++) + for (use_rec = DF_INSN_INFO_USES (insn_info); *use_rec; use_rec++) { struct df_ref *use = *use_rec; if (rtx_equal_p (DF_REF_REG (use), def_reg)) return false; } - for (use_rec = DF_INSN_EQ_USES (def_insn); *use_rec; use_rec++) + for (use_rec = DF_INSN_INFO_EQ_USES (insn_info); *use_rec; use_rec++) { struct df_ref *use = *use_rec; if (rtx_equal_p (use->reg, def_reg)) @@ -600,13 +601,13 @@ all_uses_available_at (rtx def_insn, rtx target_insn) { /* Look at all the uses of DEF_INSN, and see if they are not killed between DEF_INSN and TARGET_INSN. */ - for (use_rec = DF_INSN_USES (def_insn); *use_rec; use_rec++) + for (use_rec = DF_INSN_INFO_USES (insn_info); *use_rec; use_rec++) { struct df_ref *use = *use_rec; if (use_killed_between (use, def_insn, target_insn)) return false; } - for (use_rec = DF_INSN_EQ_USES (def_insn); *use_rec; use_rec++) + for (use_rec = DF_INSN_INFO_EQ_USES (insn_info); *use_rec; use_rec++) { struct df_ref *use = *use_rec; if (use_killed_between (use, def_insn, target_insn)) @@ -767,8 +768,9 @@ try_fwprop_subst (struct df_ref *use, rtx *loc, rtx new, rtx def_insn, bool set_ df_ref_remove (use); if (!CONSTANT_P (new)) { - update_df (insn, loc, DF_INSN_USES (def_insn), type, flags); - update_df (insn, loc, DF_INSN_EQ_USES (def_insn), type, flags); + struct df_insn_info *insn_info = DF_INSN_INFO_GET (def_insn); + update_df (insn, loc, DF_INSN_INFO_USES (insn_info), type, flags); + update_df (insn, loc, DF_INSN_INFO_EQ_USES (insn_info), type, flags); } } else @@ -788,9 +790,10 @@ try_fwprop_subst (struct df_ref *use, rtx *loc, rtx new, rtx def_insn, bool set_ set_unique_reg_note? */ if (!CONSTANT_P (new)) { - update_df (insn, loc, DF_INSN_USES (def_insn), + struct df_insn_info *insn_info = DF_INSN_INFO_GET (def_insn); + update_df (insn, loc, DF_INSN_INFO_USES (insn_info), type, DF_REF_IN_NOTE); - update_df (insn, loc, DF_INSN_EQ_USES (def_insn), + update_df (insn, loc, DF_INSN_INFO_EQ_USES (insn_info), type, DF_REF_IN_NOTE); } } |